Danke für den Screenshot und die Erläuterung. In der Tat nicht ganz trivial :)
Sie möchten also prüfen (a) ob pro Zeile mindestens eine Option gewählt wurde und (b) dass entweder Kreuzchen links stehen oder Kreuzchen rechts. Ist das soweit korrekt?
- Meine erste Überlegung wäre, ob es sich hier wirklich um eine Mehrfachauswahl handeln soll. Die Optionen links der Trennlinie scheinen sich gegenseitig auszuschließen.
- Meine zweite Überlegung ist, ob tatsächlich alle 5 Optionen rechts der Trennlinie erforderlich sind. Auch hier scheint es mir so, dass sich vieles ausschließt - und dass einiges in der Auswertung evtl. gar nicht so differenziert benötigt wird.
Im einfachsten Fall könnte man das nämlich als Skala (Zwischenwerte beschriftet) mit einer Differenzierung von 3 (links) plus max. 3 Ausweichoptionen (rechts) erledigen. Dann müsste man sich nicht weiter um die Prüfung der Antwort kümmern. Das könnte man in der Frage dann einfach einschalten.
Wenn Sie es mit Mehrfachauswahl beibehalten möchten, dann benötigen Sie ein wenig PHP-Code für die Prüfung der Antwort. Wie dieser genau aussieht, hängt von den Kennungen Ihrer Variablen ab. Aber im Prinzip muss er nur für jedes Item (via FOR-Schleife) prüfen, ob die Bedingungen erfüllt sind. Das könnte so aussehen:
$missing = false;
$tooMuch = false;
foreach (getItems('AB01', 'all') as $item) {
// Zählen wie viele Kreuzchen links und rechts stehen
$cntLeft = 0;
$cntRight = 0;
for ($value = 1; $value <= 3; $value+) {
$varID = id('AB01', $item).'x'.$value; // Würde z.B. AB01_01x1 ergeben
if (value($varID) == 2) {
$cntLeft++;
}
}
for ($value = 1; $value <= 5; $value+) {
$varID = id('AB02', $item).'x'.$value; // Würde z.B. AB02_01x1 ergeben
if (value($varID) == 2) {
$cntRight++;
}
}
// Gültigkeit prüfen
if (($cntLeft == 0) && ($cntRight == 0)) {
markFail(id('AB01', $item));
$missing = true;
}
if (($cntLeft > 0) && ($cntRight > 0)) {
markFail(id('AB01', $item));
$tooMuch = true;
}
}
// Jetzt noch die Meldung und Wiederholung
if ($missing) {
repeatPage('infoMissing');
}
if ($tooMuch) {
repeatPage('infoTooMuch');
}
Die zweite Schleife innerhalb des foreach
muss evtl. noch etwas anders aussehen, wenn Sie hier einzelne Mehrfachauswahl-Fragen hinzukombiniert haben. Insbesondere die Zeile mit der $varID
. Dazu gerne noch Tipps, wenn Sie Ihre Variablennamen erläutern.