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

0 votes

Hi,
ich hatte vor drei Tagen schon einmal zu "kombinierten Fragen" eine Frage gestellt.
Leider habe ich die Antwort nicht verstanden :(.
Deshalb möchte ich einen weiteren Anlauf starten und - um es etwas anschaulicher zu machen - habe ich einen Sreenshot des Fragebogens angehängt.
Wie müsste der PHP-Code denn lauten? Ich würde mich riesig über Hilfe freuen!!

Kurzzusammenfassung des Problems:
Ich möchte einstellen, dass die Vpns alle Felder ausfüllen müssen, unter der Bedingung, dass sie in der ersten Spalte "ja" ankreuzen. Ansonsten dürfen sie zur nächsten Frage wandern.

Liebe Grüße

in SoSci Survey (dt.) by s089494 (180 points)

1 Answer

0 votes

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.

by SoSci Survey (89.7k points)
Hej,
vielen lieben Dank!!
Wir haben es verstanden und erfolgreich eingebaut!!
Super :-)
Liebe Grüße
...