0 votes
in SoSci Survey (dt.) by s150779 (305 points)

Hallo,

In meinem Projekt gibt es individuelle Fehlermeldungen je nach Fragentyp, d.h. jeweils für Einfachnennungen, Offene Fragen und Skalen. Dementsprechend habe ich auf fast allen Seiten mit PHP-Code gearbeitet, z.B.:

if (value('FR08_1') < 1 ) { markFail('FR08_1'); repeatPage('LTScale'); }

Das funktioniert grundsätzlich auch ganz gut. Nur habe ich zwei Probleme:

  1. ist das nicht kompatibel mit Ausweichkategorien. D.h. aktuell wird die Seite auch wiederholt, wenn die Person eine der Ausweichkategorien anklickt, weil im Code < 1 steht. Wie kann ich den Code anpassen, dass man mit den Ausweichkategorien weiterkommt?

  2. Filterführung: Wenn die Frage FR08 aufgrund von Filterführung übersprungen werden soll, steckt man als ausfüllende Person fest, da das System das Überspringen scheinbar als missing, d.h. als < 1 versteht.

LG

1 Answer

0 votes
by SoSci Survey (328k points)

nicht kompatibel mit Ausweichkategorien

Kein Problem - bei einer Auswahl bekommen Sie bei fehlender Antwort eine -9

if (value('FR08_1') == -9) {
  markFail('FR08_1');
  repeatPage('LTScale');
}

Bei offenen Fragen müssten Sie die zusätzliche Variable mit dem "DK" prüfen - zusätzlich zum Eingabefeld.

Wenn die Frage FR08 aufgrund von Filterführung übersprungen werden soll, steckt man als ausfüllende Person fest

Entweder Sie filtern beides - prüfen also nur auf eine fehlende Antwort, wenn die Frage angezeigt wurde, was Sie anhand des vorigen Filters ja prüfen können. Oder Sie prüfen auf die -9 (wenn es eine Auswahlfrage ist) ... das "nicht abgefragt" wird als leerer String von value() berichtet und beim Vergleich mit einer Zahl wie eine 0 interpretiert.

by s150779 (305 points)
Danke für die Antwort. Beim ersten Punkt, die Kompatibilität mit Ausweichkategorien, habe ich mich womöglich missverständlich ausgedrückt. Mir ging es darum, dass das repeatPage nur dann greift, wenn die Person die Frage leer lässt (also keine Kategorie ankreuzt); die Person darf natürlich weiter, wenn sie a) eine inhaltliche Angabe gemacht hat b) die Ausweichkategorien gewählt hat. Bei meinem ursprünglichen Code mit Value < 1 konnte man nicht weiter, wenn man die Ausweichkategorie (-9) gewählt hat, was nicht Sinn der Sache ist.

In Ihrem Code bekommt die Person eine Fehlermeldung, wenn sie eine Ausweichkategorie gewählt hat. Ich habe nun eine wenig elegante, aber scheinbar funktionierende Lösung gefunden, indem alle Antwortkategorien aufzähle, inkl. Ausweichkategorien, die man anklicken darf:

if ((value('FR03_01') != 1) AND (value('FR03_01') != 2) AND (value('FR03_01') != 3) AND (value('FR03_01') != 4) AND (value('FR03_01') != 5) AND (value('FR03_01') != 6) AND (value('FR03_01') != 7) AND (value('FR03_01') != 8) AND (value('FR03_01') != 9) AND (value('FR03_01') != 10) AND (value('FR03_01') != 11) AND (value('FR03_01') != -1) AND (value('FR03_01') != -9))
{   
  markFail('FR03_01');          
  repeatPage('LTScale');    
}


Beim zweiten Punkt, der Filterführung, habe ich noch keine Lösung gefunden. Nochmal die Problematik: F1 hat den Filter auf Antwortkategorie 1, dass F2 angezeigt werden soll, sonst wird zu Frage F3 gesprungen. Frage F2 (Offene) hat eine individuelle Antwortprüfung via repeatPage, sodass die F2 nicht leer gelassen werden darf.
Der Effekt: Antwortet man bei F1 etwas anderes als 1, soll die F2 übersprungen werden, aber die individuelle Antwortprüfung via repeatPage von F2 greift, sodass man nicht über F1 hinwegkommt.

"prüfen also nur auf eine fehlende Antwort, wenn die Frage angezeigt wurde, was Sie anhand des vorigen Filters ja prüfen können." -> wie tue ich das?

Danke schon mal für die Hilfe!
by SoSci Survey (328k points)
Zum ersten: Da scheint die 8 zu fehlen - ist das Absicht? Und ich bin nicht sicher, ob das !=-9 am Ende den Filter nicht ad absurdum führt. Aber Wenn es bei Ihnen mit allen Antworten wungeschmäß funktioniert, können Sie es natürlich so machen.

> Beim zweiten Punkt, der Filterführung, habe ich noch keine Lösung gefunden.

Sie schreiben:

>  F1 hat den Filter auf Antwortkategorie 1, dass F2 angezeigt werden soll

Verwenden Sie das as Filter um Ihre Antwortprüfung:

if (value('F1') == 1) {
  if (value('F2') < 1) {
    markFail('F2');
    repeatPage();
  }
}
by s150779 (305 points)
Vielen Dank für die rasche Antwort, sie hat mich von dem Schlauch geführt, auf dem ich gestanden bin.

Ihre ursprüngliche Lösung

 if (value('FR08_1') == -9) {
  markFail('FR08_1');
  repeatPage('LTScale');
}

funktioniert perfekt, ich habe -9 fälschlicherweise nicht als missing, sondern als Ausweichkategorie aufgefasst -.-

Auch der Lösungsansatz für die Filterführung funktioniert!

Vielen Dank!

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

...