AJAX PHP提交无效

时间:2013-08-07 13:36:23

标签: php javascript html ajax

我正在尝试执行一个PHP脚本,在单击图像时更新MySQL数据库。我正在使用我在网上找到的片段:

function execute(filename,var1,var2)
{
    var xmlhttp;
    if(window.XMLHttpRequest)
    {
        //Code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else if(window.ActiveXObject)
    {
        //Code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else
    {
        alert("Your browser does not support AJAX!");
    }

        var url = filename+"?";
        var params = "id="+var1+"&complete="+var2;

        xmlhttp.open("POST", url, true);

    xmlhttp.onreadystatechange=function()
    {
        if(xmlhttp.readyState==4)
        {
            //Below line will fill a DIV with ID 'response'
            //with the reply from the server. You can use this to troubleshoot
            //document.getElementById('response').innerHTML=xmlhttp.responseText;

            xmlhttp.close;
        }
    }

        //Send the proper header information along with the request
        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlhttp.setRequestHeader("Content-length", params.length);
        xmlhttp.setRequestHeader("Connection", "close");

        xmlhttp.send(params);
}

使用此链接:<a href="javascript:void(0);" onclick="execute(games_do.php,<?=$game['appid']?>,<?=$complete?>)" > </a>

并且games_do.php包含:

$appid = $_GET['id'];
$complete = $_GET['complete'];

    mysql_query("UPDATE ownedgames SET complete='".$complete."' WHERE steamid='".$steamid."' AND appid='".$appid."'") or die(mysql_error());

然而,点击似乎没有任何结果。任何建议将不胜感激! :)

3 个答案:

答案 0 :(得分:1)

execute标记中<a>函数的参数值应该用引号括起来,因为函数需要一个字符串作为值。

此外,还应考虑D. Schalla的回答中提到的观点。

答案 1 :(得分:0)

更改mysql_query("UPDATE ownedgames SET complete='".$complete."' WHERE steamid='".$steamid."' AND appid='".$appid."'") or die(mysql_error());

到此:

mysql_query("UPDATE ownedgames SET complete='$complete' WHERE steamid='$steamid' AND appid='$appid'") or die(mysql_error());

此外,你可以使用jQuery轻松调用ajax,如果你不使用它,我强烈建议你这样做。它会像这样:

function execute(filename,var1,var2){
$.ajax({
type: "POST",
url: filename,
data: {id:var1, complete: var2}
  }).done(function( result ) {
   //do whatever you want to
  });
}

至于你的链接,你应该试试这个:

<?php

$id=$game['appid'];
echo('<a onclick=execute("games_do.php","'.$id.'","'.$complete.'")>Click Here </a>');

?>

答案 2 :(得分:0)

您的代码有几个问题:

首先,您应该始终转义或输入代码,因为您的代码中可以进行SQL注入:

$appid = $_GET['id'];
$complete = $_GET['complete'];

为:

$appid = intval($_GET['id']);
$complete = mysql_real_escape_string($_GET['complete']);

此外,我稍后会将mySQL驱动程序从mysql_更改为PDO,因为它可能会在更高版本的PHP中不受支持。

但是,要在代码中找到问题,我会使用Firebug(Firefox Addon)或Chrome Developer Console调试请求。检查请求返回的内容,它可能是与您的数据库设计相关的mySQL错误。

为此,请在控制台的选项卡网络下的Chrome中检查AJAX请求的“答案”,当出现错误时,它将显示在那里。

如果您计划使用AJAX工作更加繁重,我也会切换到jQuery,因为它为某些浏览器处理回退解决方案并提供更容易的集成,您可以在那里找到文档关系: http://api.jquery.com/jQuery.ajax/