Die Auswahl von zufälligen Fragen aus der MySQL-Datenbank; "richtige Antwort" versaut
Baue ich ein einfaches quiz-Programm, mit Hilfe von PHP und MYSQL.
Das quiz ist gestaltet, um eine Frage zu einer Zeit; die Fragen sind multiple-choice-Fragen (jede Frage hat 4 mögliche Antworten)
Wenn der Spieler wählt richtig, er geht zur nächsten Frage;
wenn er wählt die falsche ein, das quiz ist zu Ende.
Zuerst entwarf ich das quiz wie folgt :
(1) erstellt eine Datenbank-Tabelle, die enthält 1500 Fragen. Die Tabelle hat die folgenden Spalten :
ID (primary key)
QUESTION (the question itself)
A1 (first answer)
A2 (second answer)
A3 (third answer)
A4 (fourth answer)
CORRECT (the correct answer --- which is one of the above A1 to A4)
(2) Dann, meine PHP-code wurde entwickelt, um wählen die Fragen werden nacheinander in der Reihenfolge (mit der ID als Referenz).
So, wenn der Benutzer beginnt zu spielen, er beginnt mit Frage 1, dann Frage 2, etc, etc.
(3) um es interessanter Zu machen, fügte ich eine zusätzliche Spalte in der Datenbank (begin_id), das ist ein Standard-Wert "1", wenn sich ein Benutzer registriert, wie ein Spieler auf meiner quiz-website. Jedes mal, wenn der Benutzer eine Frage beantwortet hat, wird in dieser Spalte aktualisiert wird, mit, die Frage ist "ID". Bedeutung, er zeichnet die LETZTE Frage beantworteten (ob falsch oder richtig). Also : das nächste mal der Benutzer anmeldet, und spielt das quiz, er fängt nicht an zu von Frage-1. Stattdessen beginnt er von der NÄCHSTEN Frage, in der Liste. (Das heißt, der Benutzer sieht nie die gleiche Frage zweimal!)
Hier ist der code :
//Query database
$get_question = "SELECT * from questions_table where id = $begin_id";
$result_get_question = mysqli_query($conn, $get_question);
$row_get_question = mysqli_fetch_array($result_get_question);
//Assign database response to variables
$question = $row_get_question['question'];
$a1 = $row_get_question['a1'];
$a2 = $row_get_question['a2'];
$a3 = $row_get_question['a3'];
$a4 = $row_get_question['a4'];
$correct = $row_get_question['correct'];
//Check user answer
if (isset($_POST['submit'])) {
$selected_radio = $_POST['response'];
if ($selected_radio == $correct)
echo "THAT ANSWER IS CORRECT";
else
echo "THAT ANSWER IS WRONG!";
}
Und alles funktionierte wunderbar !!
Nun, ich beschloss, es noch mehr "effizient", sondern von der Auswahl der Fragen nacheinander, habe ich beschlossen, ändern Sie einfach meine PHP-SELECT-Anweisung, select-Fragen nach dem ZUFALLSPRINZIP.
Dies war nicht leicht, vor allem, da es so viele online-tutorials auf, wie dies geschehen ist.
Hier ist der code, den ich verwendet (die einfachste) :
SELECT * from questions_table order by rand() limit 1;
Diesem Werke, so weit wie die Auswahl von zufälligen Fragen geht. Aber etwas ist falsch : egal, welche Antwort der Benutzer wählt, es ist immer die FALSCHE Antwort!!
Für einige Grund, die Auswahl von zufälligen Fragen aus der Datenbank Durcheinander gebracht hat "Richtige Antwort /Falsche Antwort" Logik in meinem PHP-code.
Keine Ahnung, was falsch sein könnte.
UPDATE
$get_question = "SELECT * from questions_table where id = $begin_id"; $result_get_question = mysqli_query($conn,$get_question); $row_get_question = mysqli_fetch_array($result_get_question); $question_id = $row_get_question['question_id']; $question = $row_get_question['question']; $a1 = $row_get_question['a1']; $a2 = $row_get_question['a2']; $a3 = $row_get_question['a3']; $a4 = $row_get_question['a4']; $correct = $row_get_question['correct'];
<br> <form method ="post" action =""> <input type="radio" name="response" value="<?=$a1?>"><?=$a1?><br> <input type="radio" name="response" value="<?=$a2?>"><?=$a2?><br> <input type="radio" name="response" value="<?=$a3?>"><?=$a3?><br> <input type="radio" name="response" value="<?=$a4?>"><?=$a4?><br> <input type="hidden" name="question_id" value="<?= echo $question_id?>" /> <br> <Input type = "submit" Name = "submit" Value = "Answer"> </form>
blockquotes
wenn wichtigWarum nicht Sie erzeugen eine zufällige Nummer Ihrer ID im PHP-oder SQL-code?
nicht sicher, ob ich verstehe. Könnten Sie bitte näher erläutern? Dank
Haben Sie überprüft, um zu sehen, was die Variablen enthalten? d.h. durch Druck oder echo die variable. Das sollte Ihnen eine bessere Vorstellung, was zurückgegeben wird.
Der code, den Sie verwendet "(die einfachste)" 1) wählen Sie ALLE Daten (alle Zeilen, alle Spalten) aus der questions_table, 2), um das Ergebnis durch eine zufällige Spalte, auf die verwiesen wird durch Ihre Nummer und dann 3) beschneiden das Ergebnis immer nur die erste Zeile. Das ist nicht sehr schön; Randomisierung eine ausgewählte Zeile sollte durchgeführt werden, indem zufällig die ID in der
WHERE
Klausel, nicht, indem Sie Sie Sortieren, indem Sie eine zufällige Spalte.InformationsquelleAutor phpnewbie2015 | 2015-08-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Sie bitten, Ihre Frage an den Benutzer, wird eine Frage zufällig aus der Datenbank selektiert.
Dann die Nutzer Ihre form, eine andere Frage ist die nach dem Zufallsprinzip ausgewählt, und das ist die Frage, die Sie verwenden, um zu überprüfen, die Antwort, anstatt die von Ihnen gestellte Frage an den Benutzer.
Müssen Sie fügen Sie ein hidden-input im Formular, enthält die Frage-id
Und wenn du dann überprüfen Sie die Antwort, sicher sein zu Holen die richtige Frage aus der Datenbank
Würde der code so Aussehen
vielen Dank für Ihre Antwort. Ich aktualisierte mein original-Beitrag zu zeigen, dass meine form. Ich bin mir nicht ganz sicher, wie die Umsetzung der "question_id" Logik in der SQL select-Anweisung zu sehen, wie es ist zufällig ausgewählt.
Sie müssten, um die Abfrage der Datenbank in der POST, wenn-Anweisung. z.B.
if (isset($_POST['submit'])) { //query database for correct answer where id = $questionId }
Ich bearbeitet meine post.
Ich bearbeitet habe, wieder mit der kompletten Lösung
InformationsquelleAutor Eloims