0

我正在尝试执行一个 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());

但是,单击时似乎没有任何反应。任何建议将不胜感激!:)

4

3 回答 3

1

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

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

于 2013-08-07T13:55:31.830 回答
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>');

?>
于 2013-08-07T13:40:41.233 回答
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 插件)或 Chrome 开发者控制台来调试请求。检查请求返回的内容,它可能是与您的数据库设计相关的 mySQL 错误。

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

如果您打算更重地使用 AJAX,我也会切换到 jQuery,因为它处理某些浏览器的后备解决方案并提供更容易的集成,您可以在此处找到文档关系: http ://api.jquery.com /jQuery.ajax/

于 2013-08-07T13:45:27.340 回答