0

我在实现 W3C 网站上的 ajax 示例时遇到了困难。该示例从数据库中提取结果并根据从下拉菜单中选择的选项将它们显示在表中。

http://www.w3schools.com/php/php_ajax_database.asp

我已尝试配置此示例以满足我的要求。这是根据选择的选项更新数据库中的字段。我想我很接近我只是想确保我在正确的轨道上。选择选项时,将进行AJAX调用,从而触发我的PHP脚本以进行更改。它看起来像这样:

<?php
$q = mysql_real_escape_string($_POST['q']);
print_r($_GET["q"]);


$con = mysql_connect('localhost', '', '');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("Orders", $con);

$sql= "UPDATE Orders SET status='.$_POST[q]['.$i.'].' WHERE   ID='.$_POST[order_no]    ['.$i.'].'";

但是,此数据并未输入数据库。我可以检索 $q 的值,它是“已批准”、“待定”或“未批准”,但不能检索特定订单号来更新该单独的行。我的选择框如下所示:

echo '<select name="order_status[]" id="id" onchange="showUser(this.value)">';
    echo '<option value = "Pending"  name="order_status['.$i.']" class =       "pending"' . ($row['status'] == 'Pending' ? ' selected=selected' : '') . '>Pending</option>';
    echo '<option value = "Approved" name="order_status['.$i.']" class = "approved"' . ($row['status'] == 'Approved' ? ' selected=selected' : '') . '>Approved</option>';
    echo '<option value = "Disapproved" name="order_status['.$i.']" class ="disapproved"' . ($row['status'] == 'Disapproved' ? ' selected=selected' : '') . '>Disapproved</option>';

这包含在表单中,该表单还根据选中的复选框发送电子邮件。此功能有效,我可以向单个行发送电子邮件:

 <form method ="post" action="sendemail.php">
    echo '<td><input type="checkbox" name="order_selected['.$i.']"/></td>';

//in send mail.php:
    if(isset($_POST['order_selected']))
    {
    $keys = array_keys($_POST['order_selected']);

    foreach($keys as $key)
//send email 

我需要在同一个 php 脚本中实现更新代码吗?或使用相同的方法循环遍历数组?

非常感谢

4

1 回答 1

2

根据您的描述,我不确定您的问题是什么,但是通过查看您的代码,您的 SQL 语句中有一些语法错误。

$sql= "UPDATE Orders SET status='.$_POST[q]['.$i.'].' WHERE   ID='.$_POST[order_no]    ['.$i.'].'";

应该

 $sql= 'UPDATE Orders SET status="' . $_POST['q'][$i] . '" WHERE   ID="' . $_POST['order_no'][$i] . '"';

从您的代码中也不清楚您的 $i 变量来自哪里,并且在 SQL 语句中使用它之前您也没有对 $_POST['order_no'] 进行任何验证,这将使您容易受到 SQL 注入的攻击。

此外,这个 ajax 示例也是一种非常古老的做事方式。我总是会包含 jQuery 库并在那里使用 jQuery.ajax() 函数http://api.jquery.com/jQuery.ajax/它为您完成所有跨浏览器的工作。它还使得从 DOM 元素中选择数据并将它们解析为 $_POST 或 $_GET 变得非常容易。然后通过使用回调函数,您可以继续处理 php 脚本的结果。

$('select.foo').change(function() {
     var post = {
         status: $('select.foo option:selected').val();    // get the value from a dropdown 
     }

    $.ajax({
       type: "POST",
       url: "some.php",
       data: post,
       success: function(returnData){
           if(returnData == 1){
               alert('updated');
           }
      }
    });
});
于 2012-09-20T08:51:01.293 回答