Inhaltsverzeichnis

Individuelle Antwortprüfung

Formale Anforderungen an eine Antwort – zum Beispiel dass alle Items einer Skala beantwortet wurden oder dass eine offene Texteingabe einem bestimten Muster folgt – lassen sich mit wenigen Klicks in der Frage festlegen (Antworten prüfen).

Komplexere Überprüfungen können mit ein wenig PHP-Code realisiert werden. Dabei wird ein PHP-Filter gemeinsam mit der Funktion repeatPage() verwendet.

Wichtig: Es gibt zwei Möglichkeiten, den PHP-Code für die Überprüfung zu platzieren:

Hinweis: Überlegen Sie vorab, ob eine Überprüfung der Antwort tatsächlich zielführend ist. Das ist dann der Fall, wenn Teilnehmer ihre Angaben versehentlich in einem falschen Format machen. Wenn Sie hingegen erwarten, dass sich die Teilnahmer mangels Motivation („nur mal durchklicken“) oder absichtlich nicht an die Vorgaben halten, dann ist es oftmals besser, die fehlerhaften Angaben in Kauf zu nehmen und bei der Datenbereinigung zu filtern.

Tipp: Weitere Details zur Programmierung von PHP-Filtern finden Sie unter Filterfragen (PHP-Filter).

Tipp: Verwenden Sie die Funktion markFail(), um Eingabefelder mit fehlerhaften Angaben zu markieren.

Eine Fehlermeldung können Sie anzeigen, wenn Sie als Argument in der Funktion repeatPage() die Kennung eines Textbausteins eintragen (s. unten). Alternativ können Sie auch einen entsprechenden Textbaustein mittels text() anzeigen. Für die zweite Variante wählen Sie beim Anlegen des Textbausteins aus, dass der Text im Stil einer Warnung angezeigt wird – dann erhält er dieselbe Formatierung wie die Standard-Fehlermeldungen.

Im folgenden finden Sie einige Anwendungsbeispiele für individuelle Antwortprüfungen inklusive dem erforderlichen PHP-Code.

Mehrfachauswahl-Matrix

In einer gewöhnlichen Skala kann man einfach überprüfen lassen, ob der Teilnehmer in jeder Zeile eine Option markiert hat. Wenn man aber eine kombinierte Frage verwendet, welche dem Teilnehmer mehrere Kreuzchen pro Zeile erlaubt (Mehrfachauswahl-Matrix), dann benötigt man ein wenig PHP-Code zur Überprüfung, ob wirklich in jeder Zeile etwas ausgewählt wurde.

Das folgende Beispiel geht davon aus, dass 4 Mehrfachauswahl-Fragen („MA01“ bis „MA04“) mit jeweils 10 Items zu einer Mehrfach-Auswahlmatrix kombiniert wurden. Falls in einer Zeile kein Kreuzchen gesetzt wurde, soll diese hervorgehoben werden und es soll der Text „MA05“ als Fehlermeldung angezeigt werden.

Variante A

Eine Möglichkeit besteht darin, einfach für jede Zeile (Item) die auswählten Items abzuzählen. Wurde nichts gewählt, kommt die Item-Nummer auf eine Liste $missing und anschließend werden die Fehler markiert.

Die Funktion id() erstellt aus der Kennung der Rubrik („MA“), der Nummer der Frage (z.B. 1) und der Nummer des Items (z.B. 5) die Variablen-Kennung zum Abruf der Antwort (z.B. „MA01_05“).

// Die nicht-beantworteten Items werden in der Liste $missing gesammelt
$missing = array();
// Die Funktion getItems() liefert eine Liste mit Item-Nummern (=Zeilen)
// De Konstruktion FOREACH durchläuft diese alle in einer Schleife
foreach (getItems('MA01', 'all') as $item) {
  // Alle Spalten (Fragen) für dieses Item in einer FOR-Schleife durchgehen
  $anyChecked = false;
  for ($col = 1; $col <= 4; $col++) {
    $itemID = id('MA', $col, $item);
    if (value($itemID) == 2) {
      $anyChecked = true;
    }
  }
  // Item notieren, falls nichts markiert wurde
  if (!$anyChecked) {
    $missing[] = $item;
  }
}
 
// Überprüfung, ob ein Item unbeantwortet blieb
if (count($missing) > 0) {
  // Die fehlenden Items hervorheben
  foreach ($missing as $item) {
    markFail(id('MA01', $item));
  }
  // Meldung anzeigen und Seite wiederholen
  repeatPage('MA05');
}

Variante B

Wer lieber mit Zahlenmengen arbeitet, kann pro Spalte die nicht angekreuzten Items (Code: 1) ermitteln und deren Schnittmenge bilden.

$missing01 = getItems('MA01', '==', 1);
$missing02 = getItems('MA02', '==', 1);
$missing03 = getItems('MA03', '==', 1);
$missing04 = getItems('MA04', '==', 1);
$missing = array_intersect($missing01, $missing02, $missing03, $missing04);
 
// Überprüfung, ob ein Item unbeantwortet blieb
if (count($missing) > 0) {
  // Die fehlenden Items hervorheben
  foreach ($missing as $item) {
    markFail(id('MA01', $item));
  }
  // Meldung anzeigen und Seite wiederholen
  repeatPage('MA05');
}

Alle Items oder gar keines

Der folgende PHP-Code überprüft, ob in einer Skala alle Items beantwortet wurden – oder gar keines. Die Kennung der Frage (im Beispiel AB01) muss entsprechend der tatsächlichen Frage-Kennung geändert werden, die Fehlermeldung muss als Textbaustein abgespeichert werden. Sofern die Kennung dieses Textbausteins nicht „error_AB01“ lautet, muss auch diese Kennung angepasst werden.

// Eine Liste aller Items in der Frage erstellen
$items = getItems('AB01');
// Ermitteln der beantworteten Items
$answered = getItems('AB01', '>', 0);
// Fehler und zurück, falls nicht alle oder keines beantwortet wurden
if ((count($answered) > 0) and (count($answered) < count($items))) {
  repeatPage('error_AB01');
}

Konsistenzprüfung Texteingabe

Bei offenen Texteingaben kann eingestellt werden, dass sie nur Zahlen akzeptieren (Antworten prüfen: Eingabe von Nummern). Im folgenden soll überprüft werden, ob in drei Eingabefeldern konsistente Werte eingetragen wurden.

Es soll nun sichergestellt werden, dass die Werte bei TY02_01 und TY02_02 jeweils nicht höher sind als die Gesamtanzahl der Mitarbeiter:innen (TX01_01). Falls doch, soll der Text mit Kennung TX02 als Fehlermeldung angezeigt werden.

Die mittels value() abgerufenen Werte können dafür einfach mittels kleiner-als (<) oder größer-als (>) Operator verglichen werden. Das logische Oder (||) prüft, ob mindestens eine der beiden Voraussetzungen verletzt ist.

if (
  (value('TY02_01') > value('TX01_01')) ||
  (value('TY02_02') > value('TX01_01'))
) {
  repeatPage('TX02');
}

Eine von zwei Fragen beantwortet

Im folgenden Beispiel wir überprüft, ob eine von zwei Texteingabefragen („TX01_01“ oder „TX02_01“) ausgefüllt wurde. Wenn keines der Eingabefelder beantwortet wurde, dann wird die Fehlermeldung TX03 gezeigt und die Seite erneut zum Beantworten vorgelegt.

Tipp: Die Funktion trim() entfernt Leerzeichen am Anfang und Ende eines Strings, sodass die Eingabe von Leerzeichen nicht als Eingabe akzeptiert wird.

if (
  (trim(value('TX01_01')) == '') &&
  (trim(value('TX02_01')) == '')
) {
  repeatPage('TX03');
}