Как использовать AJAX для хранения переменной javascript в моей базе данных sql - PullRequest
1 голос
/ 18 февраля 2012

Я пытаюсь сохранить счет пользователя в моей базе данных sql. Я запрограммировал простую игру в понг на HTML5 и javascript. По сути, мне нужно получить переменную Score из файла pong.js и записать ее в базу данных, когда пользователь нажимает кнопку на моей странице. Я просто не могу заставить его работать. Я нажму кнопку, когда войду в систему, и мой счет в игре изменится до 1 (это всего лишь тест), но я не получу никакой обратной связи от php-файла моего сервера.

Вот мой файл 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>

кнопка submisscore вызывает Ajax_Call (), я знаю, что это работает, потому что я обновил свою переменную счета, чтобы показать, что Ajax_Call хотя бы выполняется (переменная PlayersCore содержится в pong.js, если вам нужно увидеть этот файл i ' Я опубликую это, хотя я не верю, что мне это нужно).

Вот мой подчиненный 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, если вы считаете, что это проблема, дайте мне знать)

Если бы вы могли сказать мне направление, или что-то попробовать, или хотя бы сайт, который мог бы помочь мне. это было бы очень высоко ценится. Это мой первый пост, поэтому, если я что-то сделал не так, пожалуйста, дайте мне знать. Большое спасибо за помощь

1 Ответ

1 голос
/ 18 февраля 2012

Ответ на вопрос из заголовка был бы предельно прост: точно так же, как и любые другие данные.PHP ничего не знает об AJAX.С точки зрения PHP, здесь нет ни AJAX, ни браузера, ни бота, ни чего-либо другого, кроме обычных HTTP-вызовов с данными.Таким образом, PHP должен обрабатывать эти данные и сохранять их в базе данных (или отклонять), одинаково для всех.

Тело вопроса кажется скорее статьей, чем вопросом.Следуя привычке переполнения стека, я не стал читать такой роман.Только я могу сказать, что такие длинные посты часто навеяны банальным отсутствием отладки .

кажется, что вам нужен Firebug в качестве текущего инструмента отладки.На вкладке Net этого замечательного дополнения Fitrefox будет отображаться либо HTTP-запрос, сделанный моим js, и ответ от PHP.Таким образом, это позволит вам понять, что происходит не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...