使用Ajax调用PHP更新MySQL中的数据

使用Ajax调用PHP更新MySQL中的数据,php,jquery,ajax,Php,Jquery,Ajax,我已经研究了一段时间,有很多类似的问题被问到。我尽可能多地研究,并提出了一个理论上可行的代码。。。但不管出于什么原因,它都不是。我好像不明白 我使用JQuery/AJax调用php文件并更新SQL记录。以下是代码的一般要点。剩下的基本上是一个按钮点击动作,它调用ajax函数。Php将(最终)将StoreID值添加到数组中,序列化它并将其添加到mysql中 每一段代码都是独立工作的,但当把它们放在一起时就不起作用了 Java脚本代码: jQuery.ajax({ type:

我已经研究了一段时间,有很多类似的问题被问到。我尽可能多地研究,并提出了一个理论上可行的代码。。。但不管出于什么原因,它都不是。我好像不明白

我使用JQuery/AJax调用php文件并更新SQL记录。以下是代码的一般要点。剩下的基本上是一个按钮点击动作,它调用ajax函数。Php将(最终)将StoreID值添加到数组中,序列化它并将其添加到mysql中

每一段代码都是独立工作的,但当把它们放在一起时就不起作用了

Java脚本代码:

jQuery.ajax({
           type: 'POST',
           url: 'storeid.php',
           data: {StoreID: IDjs[x] },
           success: function(reponse) { 
                $('#error').html('Success! SkipID: ' + IDjs[x]);                     
                onStateNext(); },
           error : function(code, message){
                $('#error').html('Error Code: ' + JSON.stringify(code) + ', Error Message: ' + JSON.stringify(message));}
           });          
这段代码的奇怪之处在于,“Success”函数得到了输出。将显示成功回调并运行继续的脚本。。尽管它看起来并没有实际将StoreID变量发送到php文件

PHP代码(storeid.PHP):

当在没有ajax的情况下运行时,此代码也可以工作。当php直接调用时,它会正确地更新记录,但当上面的ajax脚本调用时,它不会正确地更新记录


你知道我会做错什么吗

多亏了@JayBlanchard。您可以使用firefox开发人员工具查看服务器响应,这允许查看错误消息并意识到它正在通信,但只是没有从数据库获取凭据


如果数据库文件未包含,则无法使用全局变量。我认为它不需要它,因为它在运行服务器端时工作得很好,但是由于ajax在服务器关闭数据库连接后在客户端运行,所以需要再次打开它

多亏了@JayBlanchard。您可以使用firefox开发人员工具查看服务器响应,这允许查看错误消息并意识到它正在通信,但只是没有从数据库获取凭据


如果数据库文件未包含,则无法使用全局变量。我认为它不需要它,因为它在运行服务器端时工作得很好,但是由于ajax在服务器关闭数据库连接后在客户端运行,所以需要再次打开它

警告:使用
mysqli
时,您应该使用和将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将
$\u POST
$\u GET
或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。注意:
mysqli
的面向对象界面明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的
mysql\u查询
接口混淆。在你对程序性风格投入太多之前,值得换一种。示例:
$db=new mysqli(…)
$db->prepare(“…”)
过程接口是PHP 4时代的产物,当时引入了
mysqli
API,不应该在新代码中使用。这对@JayBlanchard有点帮助,我以前没有意识到我可以在Firefox中看到请求/响应。看起来它的响应是“错误更新记录”,这实际上是一件好事。。。。。可能意味着它无法获取sql凭据。警告:使用
mysqli
时,您应该使用and将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将
$\u POST
$\u GET
或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。注意:
mysqli
的面向对象界面明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的
mysql\u查询
接口混淆。在你对程序性风格投入太多之前,值得换一种。示例:
$db=new mysqli(…)
$db->prepare(“…”)
过程接口是PHP 4时代的产物,当时引入了
mysqli
API,不应该在新代码中使用。这对@JayBlanchard有点帮助,我以前没有意识到我可以在Firefox中看到请求/响应。看起来它的响应是“错误更新记录”,这实际上是一件好事。。。。。可能意味着它无法获取sql凭据。
$test=$_POST['StoreID'];
if (isset($test)) 
{
    global $conn2;
    $memberid = $_SESSION['memberID'];
    $testarray = array(7,8,$test);
    $serialized_data = serialize($testarray);                             
    $insertsql = "UPDATE StoreIDs SET IDs = '$serialized_data' WHERE MemberID = $memberid";
     if (mysqli_query($conn2, $insertsql)) 
     {
         echo "Updated with StoreID: " . $test;
      } else {
          echo "Error updating record: " . mysqli_error($conn2);
      } 
} else {echo "no isset value"; }