2016-04-10 2 views
0

Я пытаюсь сделать программу, которая принимает 5 слов из базы данных случайным образом и вставляет их в массив. Сначала страница загружается по желанию, но после нажатия кнопки ничего не происходит. Ни одно из предупреждений не срабатывает, поэтому функция никогда не должна вводиться, но почему это выходит за рамки меня. Кроме того, я получаю ошибку, говоря, что имя не является законным индексом (ссылка на строку 13), когда я впервые запускаю его в браузере, поэтому совет об этом тоже будет замечательным.Нажатие кнопки ничего не делает

lingo.php:

<?php 
    session_start(); 
    if (empty($_POST["name"])): 
     $_SESSION["error"] = "You did not enter a name."; 
     header("Location: entername.php"); 
    else: 
     $name = $_POST["name"]; 
     setcookie("name", "$name", time()+3600); 
    endif; 
?> 
<html> 
    <head> 
    <b>Welcome to Lingo, <?php echo $_COOKIE["name"]; ?></b><br /> 
    <script src = "http://code.jquery.com/jquery-latest.js"></script> 
    <script type = "text/javascript" language = "javascript"> 
    var arr = []; 
    function collectWords() { 
     $.post("getWord.php", 
    function(data) { 
     arr[word1] = $(data).find("Word1").text(); 
     alert("function reached"); 
     alert(arr[word1]); 
     arr[word2] = $(data).find("Word2").text(); 
     alert(arr[word2]); 
     arr[word3] = $(data).find("Word3").text(); 
     alert(arr[word3]); 
     arr[word4] = $(data).find("Word4").text(); 
     alert(arr[word4]); 
     arr[word5] = $(data).find("Word5").text(); 
     alert(arr[word5]); 
    }); 
    } 
    </script> 
    </head> 
    <body> 
    <table id = "theTable" border = "1" class = "thetable"> </table> 
    <input type = "submit" value = "Start" onclick = "collectWords()"> 
    </body> 
</html> 

getWord.php

<?php 
    $db = new mysqli('localhost', 'spj916', "cs4501", 'spj916'); 
    if ($db->connect_error): 
     die ("Could not connect to db " . $db->connect_error); 
    endif; 

    $query = "select word from Words order by rand() limit 1"; 
    $result = $db->query($query); 
    $rows = $result->num_rows; 
    if ($rows >= 1): 
     header('Content-type: text/xml'); 
     echo "<?xml version='1.0' encoding='utf-8'?>"; 
     echo "<Word1>"; 
     $row = $result->fetch_array(); 
     $ans = $row["word"]; 
     echo "<value>$ans</value>"; 
     echo "</Word1>"; 
    else: 
     die ("DB Error"); 
    endif; 

    $query = "select word from Words order by rand() limit 1"; 
    $result = $db->query($query); 
    $rows = $result->num_rows; 
    if ($rows >= 1): 
     header('Content-type: text/xml'); 
     echo "<?xml version='1.0' encoding='utf-8'?>"; 
     echo "<Word2>"; 
     $row = $result->fetch_array(); 
     $ans = $row["word"]; 
     echo "<value>$ans</value>"; 
     echo "</Word2>"; 
    else: 
     die ("DB Error"); 
    endif; 

    $query = "select word from Words order by rand() limit 1"; 
    $result = $db->query($query); 
    $rows = $result->num_rows; 
    if ($rows >= 1): 
     header('Content-type: text/xml'); 
     echo "<?xml version='1.0' encoding='utf-8'?>"; 
     echo "<Word3>"; 
     $row = $result->fetch_array(); 
     $ans = $row["word"]; 
     echo "<value>$ans</value>"; 
     echo "</Word3>"; 
    else: 
     die ("DB Error"); 
    endif; 

    $query = "select word from Words order by rand() limit 1"; 
    $result = $db->query($query); 
    $rows = $result->num_rows; 
    if ($rows >= 1): 
     header('Content-type: text/xml'); 
     echo "<?xml version='1.0' encoding='utf-8'?>"; 
     echo "<Word4>"; 
     $row = $result->fetch_array(); 
     $ans = $row["word"]; 
     echo "<value>$ans</value>"; 
     echo "</Word4>"; 
    else: 
     die ("DB Error"); 
    endif; 

    $query = "select word from Words order by rand() limit 1"; 
    $result = $db->query($query); 
    $rows = $result->num_rows; 
    if ($rows >= 1): 
     header('Content-type: text/xml'); 
     echo "<?xml version='1.0' encoding='utf-8'?>"; 
     echo "<Word5>"; 
     $row = $result->fetch_array(); 
     $ans = $row["word"]; 
     echo "<value>$ans</value>"; 
     echo "</Word5>"; 
    else: 
     die ("DB Error"); 
    endif; 
?> 
+0

Ваших Javascript верен. Получите ответ от Ajax и проверьте, что он успешно возвращается. Например: '$ .post (" getWord.php ", функция (данные, ответ) {console.log (response)});'. Также что такое значение 'data', которое вы публикуете? Я не вижу, чтобы это определялось где угодно. – Roy

+1

Я думал, что это был просто правильный синтаксис, я видел его в каждом примере, который мне дал, и он работает для программы, которую я уже начал работать, поэтому я продолжал ее размещать. Кроме того, я добавил эту строку к моей функции, и ничего не появляется в консоли. –

+0

Это правильный синтаксис для jQuery ajax. Функция - это функция успеха, а (данные) - данные, возвращаемые аякс-вызовом. Вы можете назвать все, что захотите. Вы можете назвать его json или сыром или данными, не имеет значения. – NoobishPro

ответ

3

Вы получаете ошибку $_COOKIE["name"];, потому что сказал куки не установлен, пока вы не установите его. Вы не устанавливаете файл cookie, пока кто-то не введет их имена, поэтому при первом загрузке он выдаст ошибку.

http://www.thesitewizard.com/php/set-cookies.shtml «Обратите внимание, что вы не можете установить кук в PHP и надеетесь немедленно получить кук в той же сессии сценария Возьмет следующие нерабочий PHP коды в качестве примера:.»

Найдены под заголовком : «Как получить содержимое куки

Устранить с стенографии, если заявление, например, так:.

<b>Welcome to Lingo, 
<?php isset($_COOKIE["name"]) ? $_COOKIE["name"] : $_POST["name"]; //Checks if the cookie is set. If not, uses the $_POST name ?>! </b><br /> 

у меня есть еще один вопрос: Почему ваши слова reques ted 1 за раз? Почему бы не получить все 5 слов в 1 запросе? Кроме того, зачем отправлять их в виде XML-данных? Поскольку вы, похоже, сами обрабатываете данные, я лично рекомендовал бы простой цикл на стороне PHP, возвратив его в качестве удобного готового массива JSON. Редактирование: Также важно, чтобы PHP не эхо-контента не отправлял автоматически. Вызов AJAX может принимать только печатные данные. Вы должны повторить свои результаты в конце вашего PHP-скрипта или не возвращают ничего

Как так:

$query = "select word from Words order by rand() limit 5"; 
    $result = $db->query($query); 
    $rows = $result->num_rows; 
    $array = array(); 
    if ($rows >= 1): 

$i = 0;//start the wordcount 
//While there are results, loop. (Results are limited to 5, so it won't loop more than 5 times) 
while($row = $result->fetch_row()){ 
    $i++;//Put this on top so it starts with "1" 
    $array["word$i"] = $row[0]; //create the array 
} 
echo json_encode($array); //Turn array into json and echo it. 
     else: 
     die ("DB Error"); 
    endif; 

Теперь, вы также должны изменить ваш Javascript сторона чуть-чуть. Это, как вы получите доступ к новому массиву (созданный PHP)

<script type = "text/javascript" language = "javascript"> 
function collectWords() { 
    $.post("getWord.php", 
function(data) { 
alert(data); // show whether you get any data back in the first place. thanks @jDo 
var arr = $.parseJSON(data); 

    alert(arr.word1); 
    alert(arr.word2); 
    alert(arr.word3); 
    alert(arr.word4); 
    alert(arr.word5); 
}); 
} 
</script> 

Как вы можете видеть, таким образом, экономит вам довольно много коды и экономит вам много замены слов

+0

Означает ли это, что html выполняется перед php? Файл cookie должен быть установлен после ввода условного обозначения, данные отправления поступают из предыдущего сценария. –

+0

Отредактировал ответ для вашей информации – NoobishPro

+0

У меня больше не появляется имя в любое время, когда он запускается, и когда я нажимаю кнопку, на консоли появляется сообщение «SyntaxError: JSON.parse: неожиданный символ в строке 1 столбца 1 данных JSON « –