Vergleicht nur den ausgewählten Wert in der Schleife, um eine Fehlermeldung zu vermeiden

8

Ich versuche ein einfaches Quizsystem zu erstellen. Der folgende Code zeigt, wie der Benutzer die Antwort mit Radio Butto wählt und die getresult.php vergleicht den Radioeingabewert mit der Antwortspalte. In meiner Datenbank gibt es eine Frage, opt1, opt2, opt3, opt4 und antwort Spalten.

%Vor%

// getresult.php

%Vor%

Alles ist richtig, aber wenn ich kein Optionsfeld aus einer Frage auswähle, d. h. wenn ich die Frage belege, zeigt es einen undefinierten Offset-Fehler an, der offensichtlich ist, aber wie kann ich das nicht anzeigen. ODER wie kann ich nur ausgewählte Optionen vergleichen?

    
micky 16.04.2016, 15:51
quelle

4 Antworten

4

Sie sollten array_key_exists () wie folgt ausprobieren:

%Vor%

Oder besser noch, fordern Sie Ihre Antworten von der Datenbank basierend auf validierten Zeilen.

    
Preuk 18.04.2016, 16:16
quelle
2

Wenn das Formular gesendet wird, werden die ausgewählten Werte als (zB) übergeben:

%Vor%

... usw. Wenn Sie nun eine Frage unbeantwortet lassen, sagen wir Frage 2, dann wird für diese Frage kein Wert an den Server gesendet, so dass die übermittelten Werte etwa so aussehen könnten:

%Vor%

Wenn PHP dies in $ _ POST [] speichert, wird es ein assoziatives Array sein:

%Vor%

Mit extract($_POST) erhalten Sie den folgenden Wert für $ mycheck :

%Vor%

Nun wird die folgende Schleife in Ihrem Code noch alle Fragen durchlaufen:

%Vor%

Aber (im Beispiel) wird die Überprüfung für Frage 2 fehlschlagen, weil $ myrow ['id'] gleich 2 ist, während $ mycheck [2] tut nicht existieren. Dies erzeugt den undefinierten Offset Fehler.

Da eine unbeantwortete Frage die Anzahl offensichtlich nicht erhöhen sollte, könnten Sie dieses Problem wie folgt lösen: Testen Sie zuerst, ob die Frage beantwortet wurde (hat $ mycheck einen Eintrag dafür?) und nur Wenn dies der Fall ist, rufen Sie die Antwort von diesem Eintrag ab:

%Vor%

Für den obigen zusätzlichen Test können Sie array_key_exists oder isset .

    
trincot 18.04.2016 16:29
quelle
0

Ein wenig verrostet auf PHP, aber ... Haben Sie versucht, die Funktion isset() zu verwenden? Oder die Fehlermeldungsstufe entsprechend ändern?

Ссылка

    
Vini.g.fer 18.04.2016 16:11
quelle
-2

Warum erstellen Sie kein neues Optionsfeld "Weiß nicht", das anfänglich überprüft werden würde

%Vor%

Also wird diese Schaltfläche standardmäßig aktiviert sein.

    
Omkar Frozen 24.04.2016 10:58
quelle

Tags und Links