0 votes
in SoSci Survey (dt.) by s008008 (185 points)
edited by s008008

Hallo zusammen,

ich habe eine Matrix mit kombinierten Fragen mit Texteingabe erstellt und möchte nun die Antworten prüfen lassen, so dass in jeder Zeile mindestens ein Wert eingegeben wurde oder die letzte Spalte ausgewählt wird. Ich bin dabei so vorgegangen wie unter folgendem Link beschrieben: https://support.soscisurvey.de/?qa=6476/prufung-auf-antwort-kombinierten-fragen-mehrfachauswahl

So sieht der verwendete PHP-Code

    $missing = [];
foreach (getItems('B201', 'all') as $item) {
  $any = false;
  foreach (array('B201', 'B202', 'B203', 'B204') as $question) {
    if (value(id($question, $item)) == 2) {
      $any = true;  // Min. ein Kreuzchen gesetzt
    }
  }
  if (!$any) {
    $missing[] = $item;
  }
}

if (count($missing) > 0) {
  foreach ($missing as $item) {
    markFail(id('B201', $item));
  }
  repeatPage('MA05');
}

So sieht das ganze dann bei der Prüfung aus:

Eigentlich sollte nur die letzte Zeile markiert sein, weil dort nichts eingegeben wurde.
Durch die Kodierung der Variable in der letzten Spalte (1 = nicht gewählt, 2 = ausgewählt) ist die Eingabe dieser Zahlenwerte ein Problem. Wenn ich im PHP-Code zum Bespiel 'if (value($itemID) == 2 OR value($itemID) != "")' verwende wird immer noch die erste Zeile angemerkt.

Für einen Tipp, was ich machen kann, wäre ich sehr dankbar!

by SoSci Survey (308k points)
Wenn Sie Ihre Frage editieren und den PHP-Code ergänzen, den Sie verwenden, dann kann ich gerne weiterhelfen.
by s008008 (185 points)
Vielen Dank für Ihre Mühe! Ich habe den PHP-Code ergänzt.

Außerdem suche ich noch nach einer Lösung, wie ich bei der Antwortprüfung die Option „Ich möchte auf dieser Seite keine weiteren Angaben machen“ einbinden kann. Bei der Standard-Antwortprüfung gibt es ja diese Möglichkeit und ich würde sie auch gerne hier nutzen. Falls Sie mir auch hier weiterhelfen können, wäre ich Ihnen sehr dankbar!

1 Answer

0 votes
by SoSci Survey (308k points)

In diesen Zeilen...

  foreach (array('B201', 'B202', 'B203', 'B204') as $question) {
    if (value(id($question, $item)) == 2) {
      $any = true;  // Min. ein Kreuzchen gesetzt
    }
  }

Prüfen Sie, ob die Eingabefelder (offene Eingabe oder Kästchen) den Wert 2 haben. Diesen erzielt man bei der offenen Eingabe nur, wenn man eine "2" einträgt. Daher ist Zeile 2 auch nicht als fehlend markiert.

Ändern Sie diesen Teil bitte wie folgt:

  foreach (array('B201', 'B202', 'B203') as $question) {
    if (trim(value(id($question, $item))) != '') {
      $any = true;  // Min. ein Kreuzchen gesetzt
    }
  }
  // Kästchen
  if (value(id('B204', $item)) == 2) {
    $any = true;  // Min. ein Kreuzchen gesetzt
  }

Hier wird nun für die ersten drei Spalten geprüft, ob dort irgend etwas steht (legen Sie als Eingabebeschränkung noch fest, dass man nur Zahlen eintragen darf!) und darunter, ob das Kästchen angekreuzt wurde.

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

...