0 votes
in Datenauswertung by s248429 (160 points)
edited by SoSci Survey

Hallo :)
Ich möchte mir gerne unterschiedliches Feedback pro erreichte Punktzahl eines Tests anzeigen lassen. Leider wird mir eine Fehlermeldung angezeigt. Es handelt sich um folgenden PHP-Code (es geht um den letzten Abschnitt):

PHP-Code:

/// Definition der Fragen und der korrekten Antworten
$fragen = [
  'LT08' => 3,   
  'LT09' => 1,   
  'LT10' => 4,  
  'LT11' => 2,
  'LT12' => 1,
];
 
// Initialisierung einer Zähler-Variable
$points = 0;
 
// Prüfung aller Fragen in einer Schleife
foreach ($fragen as $variable=>$correct) {
  // Die Antwort des Teilnehmers abrufen
  $answer = value($variable);
  // Überprüfen und ggf. einen Punkt zählen
  if ($answer == $correct) {
    $points++;  // Gleichbedeutend mit $points = $points + 1
  }
}
 
// Das Ergebnis anzeigen ...
html('<p>Sie haben '.$points.' Punkte erzielt.</p>');

if ($points < 0) {
  text('feedback1');
} elseif ($points < 1) {
  text('feedback2');
} else ($points < 2) {
  text('feedback3');
}

Fehlermeldung:

Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Befehl oder String (Text) nicht abgeschlossen

Hinter einem Befehl wie z.B. question() steht kein Strichpunkt oder
ein String (Text in Anführungszeichen) ist nicht abgeschlossen oder
im String selbst kommt ein Anführungszeichen vor, z.B. html('Mach's besser!'); – in diesem Fall stellen Sie dem Anführungszeichen einen Backslash () voran.
Möglicherweise stimmen die öffnenenden und schließenden geschweiften Klammern für Anweisungsblöcke auch nicht überein.
PHP-Code

029 text('feedback1');
030 } elseif ($points < 1) {
031 text('feedback2');
032 } else ($points < 2) {
033 text('feedback3');
034 }
035 return 'ok';

1 Answer

0 votes
by SoSci Survey (327k points)

Okay, die Fehlermeldung ist hier tatsächlich irreführend.

Ursache ist, dass Sie else verwenden, dahinter aber nochmal eine Bedingung schreiben.

if ($points < 0) {
  text('feedback1');
} elseif ($points < 1) {
  text('feedback2');
} else ($points < 2) {   // Hier ist das Problem
  text('feedback3');
}

Korrekt wäre entweder ein else ohne Bedingung

if ($points < 0) {
  text('feedback1');
} elseif ($points < 1) {
  text('feedback2');
} else {
  text('feedback3');
}

Oder ein elseif

if ($points < 0) {
  text('feedback1');
} elseif ($points < 1) {
  text('feedback2');
} elseif ($points < 2) {
  text('feedback3');
}
by s248429 (160 points)
Dankeschön! Das hat funktioniert. Könnt ihr mir zufällig noch sagen, wo ich das Feedback einfügen muss?

Mir wird dann nämlich folgender Fehler angezeigt:

Fehler im Fragebogen Seite 6
Im Befragungsprojekt existiert kein Text mit der Kennung feedback2
by SoSci Survey (327k points)
Text kann entweder einen Text anzeigen, das Sie in einer Rubrik Ihrer Wahl als "Text hinzufügen" eingefügt haben (dann mit der vierstelligen Kennung wie eine Frage). Oder einen Textbaustein, den Sie unter "Textbausteine u. Beschriftungen" angelegt haben.

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...