Eine individuelle Antwortprüfung funktioniert so, dass Sie auf der folgenden Seite die Befehle markFail()
(optional) und repeatPage()
aufrufen, wenn mit der Antwort etwas nicht stimmt. Legen Sie als erstes einen Textbaustein an, dessen Inhalt im Falle einer ungültigen Antwort angezeigt werden soll, ich nehme mal an diese hat die Kennung "failCombined".
Nun zum PHP-Code. Wir müssen jede Zeile einzeln prüfen. Dafür verwenden wir eine Schleife über getItems()
. Ich gehe mal davon aus, dass die drei Fragen die Kennungen AB01, AB02 und AB03 haben. Es reicht, wenn wir die Items in AB01 abzählen. Das würde also wie folgt aussehen:
foreach (getItems('AB01') as $item) {
// Hier kommt nun die Prüfung
}
Jetzt benötigen wir noch id()
, um aus einer Frage- und Item-Kennung die komplette Variablen-Kennung zu machen. Und dann prüfen wir mittels value(), was die Antworten waren. Und dann prüfen wir, ob etwas nicht passt. Wenn nicht, verwenden wir markFail()
, um es sichtbar zu markieren (auch hier reicht wieder die erste Eingabe) und setzen eine Variable (z.B. $anyFail), damit wir es nachher noch wissen.
$anyFail = false;
foreach (getItems('AB01') as $item) {
// Erstmal prüfen, ob in der ersten Spalte "ja" (=1) ausgewählt wurde
if (value(id('AB01', $item)) == 1) {
// Nun prüfen, ob bei den beiden anderen etwas eingetragen wurde
if ((trim(value(id('AB02', $item))) == '') or (value(id('AB03', $item)) < 1)) {
// Markieren und merken
markFail(id('AB01', $item));
$anyFail = true;
}
}
}
// Passt alles? Sonst nochmal
if ($anyFail) {
repeatPage('failCombine');
}
Ja, ich gebe zu, dass das mittlere IF ein wenig kompliziert ist - dadurch, dass das Ergebnis von id() gleich als Parameter von value() verwendet wird, aber nach dem fünften hinsehen sollte es klar werden, was da passiert.