2012-02-18 104 views
1

我试图将登录用户的得分保存到我的sql数据库中。我在HTML5和JavaScript中编写了一个简单的pong游戏。基本上我需要从pong.js文件中获取分数变量,并在用户点击页面上的按钮时将该分数写入数据库。我只是无法让它工作。我会以登录用户的身份点击按钮,我的游戏分数将更新为1(这只是一个测试),但我不会从我的服务器的php文件中获得任何类型的反馈。如何使用AJAX将javascript变量存储到我的sql数据库

这是我的index.php文件:

<?php 
    session_start(); 
    $_SESSION['score'] = 0; 
    ?> 
    <html> 
    <head> 
    <meta name = "description" content = "Josh Siegl's home web server"/> 
    <meta name = "keywords" content = "home, web, server, pong, html5, game"/> 
    <link rel="stylesheet" type = "text/css" href = "mycss.css" /> 
    <title> JOSH SIEGL HOME WEB SERVER </title> 
    </head> 
    <body> 
    <div align = "center"> 
    <?php if(!isset($_COOKIE['ID_SERVER'])) 
    { 
    echo '<form id = "signIn" action = "getuser.php" method = "post"> 
    UserName: <input type = "text" name = "username" /> 
    Password: <input type = "password" name = "password" /> 
    <input type = "submit" name = "SIGNIN" value = "SIGN IN"/> or  
    <a href = "register.html" id = "register" style="text-decoration:none"/> <i>  Register </i></a> 
    </form>'; 
    } 
    else 
    { 

    ?> 

    <p> <?php echo "WELCOME " . $_COOKIE['ID_SERVER'];} ?> <?php   if(isset($_COOKIE['ID_SERVER'])){echo '<a href = "logout.php"> logout</a>';} ?> </p> 

    <h1 id = "GAMENAME"> PONG </h1> 
    <canvas id="myCanvas" width="800" height="600"></canvas> 
    <script type="text/javascript" src = "pong.js" id = "gamescript"></script> 
    <div id = "status"></div> 
    <script language = "JavaScript" type = "text/javascript"> 
    function Ajax_Call() 
    { 
playerscore = 1; 
var hr = new XmlHttpRequest(); 

var url = "submitscore.php"; 
var keys = "score=" + playerscore; 

hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
hr.onreadystatechange = function() 
{ 
    if (hr.readyState == 4 && hr.status == 200) 
    { 
     var returndata = hr.responseText; 
     document.getElementById("status").innerHTML = returndata; 
    } 
} 
hr.open("GET", "submitscore.php?score="+playerscore, true); 
hr.send(); 
document.getElementById("status").innerHTML = "posting..."; 

    } 
    </script> 
    <input type = "submit" name = "submitscore" value = "POST SCORE" onclick = "Ajax_Call();"></input> 

    <br /> <p> This is a pong clone, created by Josh Siegl, hosted on a home web server. 
     This game was created in HTML5 and should run on most up to date browsers. </p> 
    <br /> <p> I programmed this entire game in javascript and HTML5. The source code is publicly available, right click and hit inspect element </p> 

    </div>  
    </body> 
    </html> 

的submitscore按钮调用Ajax_Call(),我知道这工作,因为我更新了我的分数变量表明Ajax_Call至少执行(该playerscore变量包含在pong.js中,如果你需要看到那个文件,我会发布它,但我不相信我需要)。

这是我的submitscore php文件:

<?php 
    $q=$_GET['score']; 
    $con = mysql_connect("localhost", "root", ""); 
    if (!$con) 
    { 
die(mysql_error()); 
    } 

    $mydb = mysql_select_db('users', $con); 
    if (!$mydb) { 
    die ('Can\'t use $con : ' . mysql_error()); 
} 



    $sqlstatement = "UPDATE people 
      SET score= $q WHERE username =$_COOKIE['ID_SERVER']"; 

if (mysql_query($sqlstatement, $con)) 
{ 
    echo "your score of: $q is now in the database"; 
} 
else 
{ 
die(mysql_error()); 
} 

    mysql_close($con); 

    ?> 

(这只是练习,所以不要去试图破解我的数据库;))无论如何,我一直在尝试了一堆不同的东西,所以这是为什么代码看起来有点草率,我想要做的就是在用户点击按钮时将我的分数变量提交给数据库。 (我使用Firefox来测试我的网站,所以在这一点上保持简单,当创建我的新xmlhttprequest对象时,我没有对其他浏览器进行任何检查,如果您认为这是问题,请告知我)

如果你可以告诉我一个方向,或者尝试一下,或者至少有一个网站可以帮助我。这将非常感激。这是我的第一篇文章,如果我做错了,请让我知道。非常感谢您的帮助

+3

说实话,我读的代码太多了。我认为,如果你要求发布反馈,我会建议缩进,有很多事情需要密码。我可能会再看看 – 2012-02-18 08:46:37

回答

1

从标题回答问题将非常简单:与其他数据完全相同。 PHP对AJAX一无所知。从PHP的角度来看,没有AJAX或浏览器或机器人或任何东西,但只有普通的HTTP调用数据。所以,PHP必须处理这些数据并将其存储在数据库中(或拒绝),这与所有人都一样。

问题主体似乎更多的是一篇文章而不是一个问题。遵循stackoverflow习惯,我没有阅读这样的小说。只有我可以看出,这样的长篇帖子经常受到缺乏调试的启发。

看来您需要Firebug作为您当前的调试工具。这个辉煌的Fitrefox插件的Net选项卡将向您显示HTTP请求使我的js和PHP的响应。所以,它会让你知道发生了什么问题。

+0

对文本的数量感到抱歉,如果你花时间阅读它,大部分内容只是解释我所尝试的。无论如何,你不需要的index.php文件的大部分..我有问题的功能是Ajax_Call功能 – 2012-02-18 08:59:59

+0

那么。看到答案的补充。 – 2012-02-18 09:04:39

+0

aha。非常感谢你。 Firebug是一个伟大的工具,事实证明,当我试图调用XMLHttpRequest时,我正试图调用xmlHttpRequest。 – 2012-02-18 09:15:50

相关问题