2016-04-10 21 views
0

Ich versuche, ein Programm, das 5 Wörter aus einer Datenbank zufällig nimmt und fügt sie in ein Array. Die Seite lädt anfangs wie gewünscht, aber nach dem Klicken auf die Schaltfläche passiert nichts. Keiner der Alarme wird jemals ausgelöst, daher darf die Funktion niemals eingegeben werden, aber warum ist es jenseits von mir. Außerdem bekomme ich einen Fehler, der besagt, dass name kein legitimer Index ist (Referenzzeile 13), wenn ich das erste Mal versuche, ihn in einem Browser auszuführen, also wäre der Rat auch großartig.Ein Klick auf die Schaltfläche tut nichts

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

Ihre Javascript ist korrekt. Bekommen Sie die Antwort vom Ajax und prüfen Sie, ob diese erfolgreich zurückgegeben wird. So: '$ .post (" getWord.php ", Funktion (Daten, Antwort) {console.log (Antwort)});'. Was ist der 'Daten'-Wert, den Sie posten? Ich sehe es nirgends definiert. – Roy

+1

Ich dachte, das sei nur die richtige Syntax, ich habe es in jedem Beispiel gesehen, das mir gegeben wurde, und es hat für ein Programm funktioniert, das ich bereits zum Laufen gebracht habe, also habe ich es weiter gemacht. Außerdem habe ich diese Zeile zu meiner Funktion hinzugefügt, und in der Konsole wird nichts angezeigt. –

+0

Es ist die richtige Syntax für eine Jquery Ajax. Die Funktion ist die Erfolgsfunktion und die (Daten) sind die Daten, die der Ajax-Aufruf zurückerhält. Sie können es nennen, was Sie wollen. Sie können es JSon oder Käse oder Daten nennen, spielt keine Rolle. – NoobishPro

Antwort

3

Sie erhalten den Fehler auf $_COOKIE["name"]; weil das Cookie nicht gesetzt ist, bis Sie es einrichten. Sie setzen den Cookie erst, wenn jemand seine Namen eingegeben hat. Beim ersten Laden wird ein Fehler ausgegeben.

http://www.thesitewizard.com/php/set-cookies.shtml „Beachten Sie, dass Sie nicht ein Cookie in PHP und hoffen festlegen können das Cookie sofort im selben Skript Sitzung abrufen Nehmen Sie die folgenden nicht-arbeit PHP-Code als Beispiel:“.

unter der Überschrift gefunden : „Wie Sie den Inhalt eines Cookies erhalten

diese Fix mit Stenografie if-Anweisung, etwa so:.

<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 /> 

ich eine andere Frage: Warum sind reques Ihre Worte ted 1 auf einmal? Warum nicht alle 5 Wörter in einer Abfrage? Warum sollten Sie sie auch als XML-Daten zurücksenden? Da Sie scheinen, die Daten selbst zu behandeln, würde ich persönlich eine einfache Schleife auf der PHP-Seite empfehlen, die es als ein handliches vorgefertigtes JSON-Feld zurückgibt. edit: Auch wichtig, PHP echo keine Inhalte automatisch. Ein AJAX-Anruf kann nur gedruckte Daten empfangen. Sie müssen Ihre Ergebnisse am Ende des PHP-Skript zum Echo oder werden Sie nichts

Wie so zurück:

$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; 

Nun müssen Sie auch Ihre Javascript Seite ein klein wenig ändern. Dies ist, wie Sie das neue Array zugreifen (von PHP erstellt)

<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> 

Wie Sie sehen können, auf diese Weise spart man ziemlich viel Code und spart Ihnen eine viel des Wortes Ersatz

+0

Bedeutet das, dass der HTML-Code vor dem PHP ausgeführt wird? Der Cookie sollte gesetzt werden, sobald die Bedingung eingegeben wurde, die Postdaten stammen von einem früheren Skript. –

+0

Edited die Antwort für Ihre Informationen – NoobishPro

+0

Ich habe nicht mehr einen Namen kommen zu jeder Zeit, dass es ausgeführt wird, und wenn ich auf die Schaltfläche klicken, bekomme ich einen Fehler auf der Konsole mit der Aufschrift "SyntaxError: JSON.parse: unerwartetes Zeichen in Zeile 1 Spalte 1 der JSON-Daten " –