0 votes
in SoSci Survey (dt.) by s257237 (110 points)

Hallo zusammen,

in meiner Studie habe ich 4 Audiodateien, die randomisiert auf die Probanden verteilt werden sollen. Danach sollen sie eine Frage zu den Audiodateien beantworten. Bei dieser Frage ist jeweils für 2 Videos die identische Antwort die richtige. Wenn die Person die falsche Antwort gegeben hat, soll sie von dem Fragebogen ausgeschlossen werden, ansonsten soll es weiter gehen.

Ich habe das Problem, dass der von mir programmierte PHP-Code nur fallweise funktioniert.

Wenn die Antwort falsch beantwortet wird, werden mir beispielsweise beide Fragen (also die, die zum Ausschluss von der Studie führt und die Frage, die bei richtiger Antwort folgen würde, auf einer Seite angezeigt; siehe Screenshot). Ich weiß hier leider keine Lösung, bzw nicht wo mein Fehler bei der PHP-Programmierung liegt.

Hier mein Code:

if ((value('ST02') == 1) or (value('ST02') == 2) and (value('MC01')==1)) { // soll bedeuten, wenn die Person die Randomisierung 1 hat oder 2 hat und bei der MC 01 Frage die Antwort 1 antwortet, soll es weiter gehen mit Frage MC 02
  question('MC02');
}  if ((value('ST02') == 3) or (value('ST02') == 4) and (value('MC01')==2)) {
  question('MC02');// soll bedeuten, wenn die Person die Randomisierung 3 oder 4 hat und bei der MC 01 Frage die Antwort 2 gibt, soll es weiter gehen mit der Frage zu MC 02.
} else {
question ('AB01');
} // ansonsten soll es zum Ausschluss der Studie kommen und zur Frage AB 01 gehen. !!

Es wäre so super, wenn ihr mir hier helfen könntet, ich verzweifle langsam.

DANKE

1 Answer

0 votes
by SoSci Survey (327k points)

Ein Klassiker, denke ich: Und zwar hat and eine höhere Priorität als or.

 ((value('ST02') == 1) or (value('ST02') == 2) and (value('MC01')==1))

Hier wird also zunächst geprüft, ob ST02 den Wert 2 hat und MC01 den Wert 1. Und wenn nicht, dann wird noch geprüft, ob ST02 den Wert 1 hat. Ein paar Klammern um das or helfen:

 (
     ((value('ST02') == 1) or (value('ST02') == 2)) and
     (value('MC01')==1)
 )
by s257237 (110 points)
Hallo und vielen Dank für die schnelle Antwort. Es klingt sehr logisch und hat auch teilweise geholfen. Leider habe ich aber nach wie vor bei 2 Fällen ( das wäre einmal, wenn ST02=1 und MC01=1 ist, also eine richtige Antwort gegeben wurde, zum anderen wenn ST02=2 und MC01=1 also auch hier die richtige Antwort gegeben wurde) das Problem, dass ich dann auch die Abschlusseite (AB01) angezeigt wird (siehe Screenshot oben), obwohl es ja lediglich bei richtiger ANtwort eine Weiterleitung zu MC02 geben soll.

Hier vielleicht eine Idee, woran das liegen könnte (die Klammern um "or" habe ich schon ergänzt)
by SoSci Survey (327k points)
Einen zweiten Fehler, den ich im Code noch sehe: Nach dem ersten Filter kommt ein IF und kein ELSEIF.

Das heißt: Auch wenn der erste Filter greift, wird der zweite nochmal komplett durchlaufen. Und wenn die zweite Bedingung nicht zutrifft, dann wird der ELSE-Teil ausgeführt.

Wenn das Problem damit nicht gelöst ist, posten Sie bitte nochmal den aktuellen Code und (!) die Debug-Information von einem der beschriebenen Fälle: https://www.soscisurvey.de/help/doku.php/de:create:debugging

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

...