Parse error: syntax error, unexpected '$ergebnisZwei' (T_VARIABLE), expecting ',' or ';' in C:\xampp\htdocs\quiz.php on line 84?

3 Antworten

Ich tapse einmal von oben nach unten.

1) Ergänze die Anführungszeichen um den Wert des size-Attributs.

<input type="text" name="Frage1" size="6">

In einer späteren Programmzeile fehlen sie nochmals.

2) Da du den Körper der ersten Schleife nicht explizit in geschweifte Klammern setzt, besteht dieser nur aus der ersten Anweisung, die er finden kann.

Also:

foreach ($_POST as $feld => $wert1)
  $ergebni1s = "-178";

$erreichbarepunkte1 = "1";

Folglich wird $wert1 viel später auch undefiniert sein.

Bei deiner zweiten Schleife besteht das gleiche Problem. Diesmal wird nur das erste if-elseif in den Schleifenkörper gezogen.

3) Die 1 im Namen von $ergebni1s sieht mir wie ein Tippfehler aus. Für Bezeichner mit zusammengesetzten Wörtern solltest du entweder auf die kamelHoeckerSchreibweise zurückfallen oder den snake_stil.

Beispiel:

$erreichbarePunkte1 = "1"; // camelCase
$erreichbare_punkte1 = "1"; // snake style

4) Wieso setzt du all die Zahlen in Anführungszeichen, markierst sie also als Strings? Besser wäre es, mit eindeutigen Typen zu arbeiten - an dieser Stelle also numerischen.

$ergebnis = -178;
$erreichbarepunkte1 = 1;
// etc. ...

Die Konversion zurück zu Strings übernimmt PHP implizit, sobald notwendig (also bspw. bei der Ausgabe der Werte). Die bcadd-Funktionen sind von daher dann auch nicht notwendig. Addition geht auch so:

$numberOne = 1;
$numberTwo = 2;
$sum = $numberOne + $numberTwo;

5) Beide Variablen:

if ($wert == $ergebnis)

gibt es nicht.

Gehe am besten einmal durch dein gesamtes Skript und schau, ob die Variablenbezeichner einheitlich sind.

6) In der echo-Ausgabe für Frage 1 (sollte es nicht Frage 2 sein?) hast du schließende Tags für ein form- und ein div-Element eingebaut. Es gibt aber keine öffnenden Tags.

Des Weiteren fehlt ein Semikolon am Ende der Anweisung.

7) Dir ist hoffentlich bewusst, das je POST-Request beide Schleifen ausgeführt werden?

8) Hinter dem Körper deiner elseif hast du jeweils eine leere Anweisung (einzelnes Semikolon). Die kann eigentlich weg.

9) Beim jeweils letzten Vergleich einer - ich nenne es einmal Sektion, verwendest du plötzlich einen strikten Vergleich.

if ($wert1 !== $ergebnis1) {
  $frage1punkte = "0";
}

Hat das einen besonderen Grund?

10) Wieso unterdrückst du hier gezielt Fehlermeldungen?

@$c=bcadd($frage1punkte, $frage2punkte, 2);
@$e=bcadd($erreichbarepunkte1, $erreichbarepunkte2, 2);

11) Bei deinem letzten echo fehlt ein abschließendes Semikolon.

12) Du möchtest scheinbar dein Quiz auf unterschiedliche Frageseiten aufteilen. Dafür solltest du dir Werte und Zwischenergebnisse aber entweder über Hidden-Fields / URL-Parameter / Cookies oder eine Session weitergeben.

Grobes Beispiel:

<?php
  session_start();

  if (isset($_SESSION["points"])) {
    $points = $_SESSION["points"];
  }
  else {
    $points = 0;
  }
?>
<!doctype html>
<title>Quiz</title>
<meta charset="utf-8">
<form method="post">
  <fieldset>
    <legend><!-- question ... --></legend>
    <label for="result">Your solution:</label>
    <input id="result" name="result" type="number">
    <button>Continue</button>
  </fieldset>
</form>
<?php
  if (isset($_POST["result"])) {
    if (/* correct answer == user input ... */) {
      $_SESSION["points"] = $points + 1;
    }
    else {
      print "Wrong!";
    }
  }
?>

Nach einer richtigen Antwort sollten ebenso die nächste Frage und ihre korrekte Antwort in den Zwischenspeicher gelegt werden. Dann können sie beim nächsten Request wieder ausgelesen werden.

roboterfreund 
Fragesteller
 11.04.2020, 18:38

Vielen Dank für die Hinweise! Die haben mir super weitergeholfen! :-)

0
echo "Du hast $c Punkte von $e erreicht."

Das fehlt das ; am Ende und das $c wird er nicht erkennen ... ändere das!

Woher ich das weiß:Hobby – Programmierer, EDV, ... seit den 80er :)
ShimaG  11.04.2020, 11:53

Bei dem "echo" in Zeile 84 fehlt auch das Semikolon.

1
PeterP58  11.04.2020, 11:58
@ShimaG

Habe die Zeilen nicht gezählt ... mir ist erstmal nur das aufgefallen :-)
Wenn der Fehler dann auch in anderen Zeilen auftaucht, weiß der FS ja woran es liegt ^^+gg
Aber ja! Nach "</div>" fehlt auch ein ;

0
roboterfreund 
Fragesteller
 11.04.2020, 13:46

Dankeschön! Also ich habe das Semikolon am Ende jetzt hinzugefügt, die Fehlermeldung tritt trotzdem nicht auf... Findest du noch irgendwo 'nen Fehler? LG :-)

0

Könntest du bitte Zeile 84 mit anhängen, weil es ansonsten schwer ist ohne Zahlen Zeile 84 zu finden.

Am besten auch Zeile 83 und 85, da sich der Fehler oft auch eine Zeile vorher oder nachher befindet.

roboterfreund 
Fragesteller
 11.04.2020, 12:03

Klar, hier Zeile 83-85:

83

 84 $ergebnis2 = "80";

 85 $erreichbarepunkte2 = "1";

0
vibu04  11.04.2020, 12:27
@roboterfreund

Ok da ist nichts falsch aber PeterP58 hat den Fehler schon gefunden.

0
roboterfreund 
Fragesteller
 11.04.2020, 13:51
@vibu04

Danke für den Hinweis! Aber nachdem ich PeterP58 's Hinweis im Dokument verbessert habe, ist die Fehlermeldung immernoch da. Auch " " oder ' ' oder gar nichts habe ich schon probiert... LG

0