0

我的 AJAX 和 MySQL/PHP 脚本有问题。

下面的第一个文件是我用来测试访问服务器的 javascript 文件。据我所知并经过测试,该文件有效。

Game = function() {};

var timer;
Game.EncodeURI = function (text) {
    return encodeURIComponent(text);
}

Game.DecodeURI = function (text) {
return decodeURIComponent(text);
}
Game.AlterDiv = function(div,data) {
if (Game.ID(div)) {
    Game.ID(div).innerHTML = data;
}
   }
Game.ID = function(value) {
return document.getElementById(value);
}
 Game.ServerRequest = function (url, data) {
var xmlhttp;
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest(); // code for IE7+, Firefox, Chrome, Opera, Safari
    } else {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); // code for IE6, IE5
    }   
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            data = xmlhttp.responseText.split("|");                 
                for (i = 0; i < data.length; i++){
                    var one = Game.DecodeURI(data[parseInt(i)]);
                    var two = Game.DecodeURI(data[parseInt(i) + 1]);
                    var three = Game.DecodeURI(data[parseInt(i) + 2]);
                    var four = Game.DecodeURI(data[parseInt(i) + 3]);
                    var five = Game.DecodeURI(data[parseInt(i) + 4]);
                }

        } else {
            return false;
        }
    }
    if (!data) {
        data = "";
    }
    data = data.replace(/: /gi, "=");
    data = data.replace(/:/gi, "=");
    data = data.replace(/, /gi, "&");
    data = data.replace(/,/gi, "&");


xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(data);
 }
Game.Action = function (id, seconds) {
clearTimeout(timer);

    if (id) {
        if (!seconds) {
            Game.AlterDiv('message', 'You begin working.');
            Game.ServerRequest("action.php", "id: " + id);  
        } else {        
            Game.AlterDiv('message', 'You begin working.');
            Game.ID('timer').innerHTML = seconds;   

                    if (seconds >= 2) {
                        seconds -= 1;
                        Game.ID('timer').innerHTML = seconds;           
                        timer = setTimeout(function(){          
                                Game.Action(id, seconds);                       
                            },1000);
                    } else { 
                        Game.ID('timer').innerHTML = "Finished";
                        Game.ServerRequest("action.php", "id: " + id + ", x: x");   // Request it, then POST "x" to say timer has counted down.
                    }
        }
    } else {
        alert("There was an error with your request.\n Please try again.");
    }
}

第二个文件是我用来测试上述功能的基本 PHP 网页。

<html>
<head>
<title>Test</title>
</head>
<body>

<span onClick="Game.Action('1','5');">Start Work</span><br /><br />


<div id="message"></div>

<div id="timer"></div>


</body>
</html>
<script type="text/javascript" src="game.js?<?php echo time(); ?>"></script><!-- the time() stops it cache-ing -->

第三个文件是我用来连接数据库的 PHP/MYSQL 文件。

<?php
$mysqli = new mysqli_connect("127.0.0.1", "root", "", "gurstang");

$id = $_POST['id'];

if(isset($_POST['x'])) {
$x = true;
}else{
$x = false;
}
$userid = 1;

$query = "SELECT * FROM `action_info` WHERE `actionid` = '$id'";
if($result = $mysqli->query($query)){
     while ($row = $result->fetch_assoc()) {
        $action_name = $row['name'];
    $basetimer = $row['time'];
    $gaineditem = $row['itemid'];
}
$result->free();
}
$query = "SELECT `item`,`plural` FROM `items` WHERE `itemid` = '$gaineditem' LIMIT 0,1";
if($result = $mysqli->query($query)){
    while($row = $result->fetch_assoc()){
        $gained_item = $row['item'];
    $gained_plural = $row['plural'];
    }
    $result->free();
}

if($x == false){
echo "Action|$id|"5"";
$message = "You have begun working.";
echo "AlterDiv|message|$message";

}
if($x == true){
echo "Action|$id|"5"";

$itemnumber = mt_rand(1,2);
$gainedmessage = "You have gained $itemnumner $gained_item.";
echo "AlterDiv|message|$gainedmessage";
$query = "SELECT `count` FROM inventory WHERE userid = '$userid' AND itemid = '$gaineditem' LIMIT 0,1";

if($result = $mysqli->query($query)){
    while($row = $result->fetch_assoc()){
        $count = $row['count'];
        $add = $count + $itemnumber;

        $updatequery = "UPDATE `inventory` SET `count` = '$add' WHERE `userid` = '$userid' AND `itemid` = '$gaineditem'";
        $mysqli->query($updatequery);
    }
    }
    else{
        $insertquery = "INSERT INTO `inventory` (`userid`, `itemid` ,`count`) VALUES ('$userid', '$gaineditem', '1')";
        $mysqli->query($insertquery);  
    }
}
?>

这些是当前运行我的脚本的所有 3 个文件。我在 php 网页中有一个 onclick 事件,它将值发送到我的 Game.Action 的 Javascript 函数。经过测试,我得出结论或至少假设我的 Game.Action Javascript 函数有效。在测试了我的 Game.ServerRequest 函数后,我得出的结论是某处发生了变化。虽然,当我检查我的服务器以查看更新是否真的发生时,什么也没有发生。它不会正确更新计时器 div 或消息 div。

所以基本上我的问题是,我的问题是 PHP/MYSQL 还是 AJAX?

谢谢你的帮助。

4

0 回答 0