Quiz mit PHP und Datenbank (mySQL)

02/17/2016 21:22 maxmax37#1
Hallo,
ich habe vor ein Quiz mithilfe von PHP und einer Datenbank zu programmieren.
Dabei stehen die Fragen in einer Tabelle und es gibt 3 Antworten die Struktur ist folgende mit einem Beispiel:

questionanswer1answer2answer3answer
Was ist 1+1zweidreivier1
Da es mehrere Fragen pro Tabelle sind, werden die mithilfe einer for-Schleife auf der PHP-Seite ausgegeben. Das klappt auch.Dann soll es eine Seite geben, wo man die Ergebnisse sieht, also welche Fragen richtig und welche Fragen falsch sind. Da liegt das Problem, denn angeblich sind immer alle Fragen falsch. Die Auswertung soll auch mit einer for-Schleife funktionieren, in der ich meinen Fehler nicht finde.Ich hab die Dateien mal mithochgeladen. Würde mich freuen, wenn mir dabei einer helfen kann.

Das ganze ist ein kleines Projekt in der Schule in Informatik, aber dank der Inkompetenz des Lehrers nicht von ihm lösbar^^
02/18/2016 00:04 False#2
Habe jetzt nur schnell drüber geguckt und nichts getestet, jedoch dies gefunden :
PHP Code:
if ($_POST['$i']==$Zeile['answer']) 
</span>


Wenn du eine Variable in einfachen Anführungszeichen('') schreibst dann wird diese nicht genutzt sondern als String übernommen, daher kann es nicht gehen.
Da du statt: $_POST[1]
$_POST[2]
$_POST[3]
$_POST[4]
immer das hast:
$_POST['$i']
$_POST['$i']
$_POST['$i']
$_POST['$i']

Mögliche Lösung wäre es einfach die Anführungszeichen weg zu lassen da $i ja eh ein Integer ist oder Normale Anführungszeichen ("") zu nutzen.
02/18/2016 00:13 maxmax37#3
Danke für deine Hilfe :)

Leider hat es nicht geholfen. Als Fehlermeldung habe ich jetzt Undefined Offset bekommen. Ich werde selber nochmal nachgucken was das bedeutet.


Allerdings bin ich mir auch nicht sicher, ob das überhaupt in der Theorie so funktionieren kann wie ich das bisher geschrieben habe.
02/18/2016 00:22 False#4
Quote:
Originally Posted by maxmax37 View Post
Danke für deine Hilfe :)

Leider hat es nicht geholfen. Als Fehlermeldung habe ich jetzt Undefined Offset bekommen. Ich werde selber nochmal nachgucken was das bedeutet.


Allerdings bin ich mir auch nicht sicher, ob das überhaupt in der Theorie so funktionieren kann wie ich das bisher geschrieben habe.
Den Tipp kann ich dir schonmal geben, Undefined Offset heißt das du ein key in dem Array (welches du mit mysql_fetch_array erzeugst) suchst, jedoch nicht vorhanden ist.Beispiel:
PHP Code:
$testArray arrray(   "Name"          => "Tim",   "Alter"           => 7,   "Geburtsort"   => "Münster")
Deine "Abfrage" :
echo 
$testArray['Geschlecht']; 
Natürlich kann er Geschlecht im Array nicht finden da es nicht drin ist -> Undefined Offset

Muss mich berichtigen : beim oberigen wäre es Undefined Index, bei Offset hast aber fast das gleiche Problem :
Beispiel :
PHP Code:
$testArray arrray("Tim",7,"Münster")
Deine "Abfrage" :
echo 
$testArray[3]; 
Das kann natürlich nicht gehen da Tim den Offset von 0 hat, 7 von 1 und Münster von 2 daher gibt es keine 3.



Ps. Zum Problem lösen mal in die Form gucken und schauen was für ein Namen die die RadioButtons haben und was du per $_POST nachguckst.
02/18/2016 00:27 maxmax37#5
Ok danke. Habe jetzt gerade auch festgestellt, das es mit $_POST[$i] auch gar nicht funktionieren kann. Das stammte noch von den Versuchen wo ich rumprobiert habe.


In der Theorie müsste ja bei $_POST[] der Name der Radiobuttons stehen. Die heißen bei mir answer[$i], da die einzelnen Fragen ja unterschiedlichen Namen benötigen.


Wenn ich jetzt aber _$POST["$answer[$i]"] probiere, klappt das leider auch nicht. Er zeigt an, dass alle Antworten falsch sind, weil die Überprüfung halt nicht klappt. Der Error ist undefiened Index


Und genau da komm ich nicht weiter, weil das für mich der einzige logische Lösungsansatz wäre :confused:
02/18/2016 00:35 False#6
Quote:
Originally Posted by maxmax37 View Post
Ok danke. Habe jetzt gerade auch festgestellt, das es mit $_POST[$i] auch gar nicht funktionieren kann. Das stammte noch von den Versuchen wo ich rumprobiert habe.


In der Theorie müsste ja bei $_POST[] der Name der Radiobuttons stehen. Die heißen bei mir answer[$i], da die einzelnen Fragen ja unterschiedlichen Namen benötigen.


Wenn ich jetzt aber _$POST["$answer[$i]"] probiere, klappt das leider auch nicht. Er zeigt an, dass alle Antworten falsch sind, weil die Überprüfung halt nicht klappt. Der Error ist undefiened Index


Und genau da komm ich nicht weiter, weil das für mich der einzige logische Lösungsansatz wäre :confused:
Habe lange nicht mehr mit reinem $_POST gearbeitet.. jedoch hast du ja als Name answer[$i] da du [] nutz heißt es, es ist ein Array.Daher musst du (wenn ich mich grade nicht irre) folgendes machen :
PHP Code:
$answer $_POST['answer']
for....
$answer[$i

Sprich $_POST['answer'] sollte den Inhalt haben :


PHP Code:
array("answer1","answer2","answer3",etc
02/18/2016 00:44 maxmax37#7
Ich komme leider so nicht weiter mit deinem Lösungsvorschlag... Bin noch totaler PHP Anfänger und mir ist jetzt nicht ganz bewusst was in die for-Schleife.Du hast ja gesagt, du hast selten mit $_POST gearbeitet. Gibt es noch eine andere Möglichkeit?
02/18/2016 00:51 False#8
Quote:
Originally Posted by maxmax37 View Post
Ich komme leider so nicht weiter mit deinem Lösungsvorschlag... Bin noch totaler PHP Anfänger und mir ist jetzt nicht ganz bewusst was in die for-Schleife.Du hast ja gesagt, du hast selten mit $_POST gearbeitet. Gibt es noch eine andere Möglichkeit?
Wenn du noch nicht ganz weißt was in einer for Schleife passiert schau dir erstmal for schleifen ohne arrays an.Grob gesagt gibst du einfach einfach nur wie er zählen soll, also an Parameter : von wo, bis wann und was nach ein Durchlauf passieren soll.


Also, schau dir mal For schleifen an und wenn du die verstanden hast schau dir Arrays an.
Mach nicht den Fehler Sachen einfach zu verwenden wenn du nicht weißt was sie machen(erst recht nicht 2 Sachen zusammen wo du nicht weißt was sie Tun).
Setz dich lieber im schlimmsten Fall für 1-2 Stunden hin und lies dir es Durch statt verzweifelt den Fehler zu suchen :)


Natürlich gibt es Hilfen die das ganze ein erleichtern, nennt sich Framework, aber für jemanden der grade erst angefangen hat ist es nicht förderlich.
02/18/2016 00:57 maxmax37#9
Also die Funktionsweise von Schleifen ist mir schon bewusst und ich verstehe auch wie die funktioniert, aber ich habe nicht ganz verstanden was die jetzt im Zusammenhang mit dem $_POST bewirken soll und wie ich das Array verwenden muss.

Weil in der Theorie war ja mein Gedankengang richtig oder?
02/18/2016 01:14 False#10
Quote:
Originally Posted by maxmax37 View Post
Also die Funktionsweise von Schleifen ist mir schon bewusst und ich verstehe auch wie die funktioniert, aber ich habe nicht ganz verstanden was die jetzt im Zusammenhang mit dem $_POST bewirken soll und wie ich das Array verwenden muss.

Weil in der Theorie war ja mein Gedankengang richtig oder?
Wenn du dir nicht sicher bist wie ein Array aufgebaut ist nutz print_r($array); , damit siehst du es.

Du bist so halb richtig, zunächst bei dem Namen kannst du das $i entfernen da du eh nur hochzählst und wenn nichts als key angegeben ist zählt er automatisch hoch.


Also ist dein $_POST['answer'] ein Array welches ca so aussehen sollte(mit print_r prüfen!) :
PHP Code:
array(1,2,3)
bzw
array(=> 1,=> 2,=> 3)
ist das selbe 

Nun gibst du dir einfach mal beides aus was du beim If prüfst und schaust warum es unterschiedlich ist.


Ps. evtl hast du den Fehler darin das du in deiner datenbank in der Spalte answer eine Antwort hast statt ein Int.
Bedenke das du bei den Radiobuttons beim Attribute value 1,2 und 3 hast.
Solltest du ein String in der Datenbank haben prüfst du logischerweise z.b.


if("Antwort" == 1)
{


}


Was natürlich nicht geht.
Solltest du Teamviewer haben kann ich dir auch darüber helfen, geht wahrscheinlich leichter^^
02/19/2016 14:07 maxmax37#11
Also ich bin jetzt ein bisschen weitergekommen. In der Datenbank hatte tatsächlich die Antwort auch den Datentyp Varchar und nicht Int. Das habe ich jetzt schonmal geändert.Ich habe mir dann auch noch die beiden Arrays ausgeben lassen und die sind beide richtig. Das bedeutet ja, dass in meiner bisherigen For-Schleife noch immer ein Fehler sein muss.


Würde dann also gerne mal auf das Angebot mit Teamviewer zurückkommen :D
Wenn du Zeit hast kannst du dich ja vlt mal per PN melden :)


Danke schonmal, hat mir jetzt weitergeholfen