0 votes
in SoSci Survey (dt.) by s130803 (420 points)

Hallo,

ich habe ein Problem, bei dem ich nicht weiterkomme und hoffe, dass Sie mir helfen können.

Auf meiner Fragebogenseite habe ich eine Mehrfachauswahl (EX06_02; 'Auswahlkästchen' für die Aussage "Ich möchte spenden") und einen Slider (EX07_01; "Wie viel möchten Sie spenden?"). Wenn die Mehrfachauswahl ausgewählt wird, wird der Slider über JS dynamisch eingeblendet. Zusätzlich habe ich über PHP auf der Seite eingestellt, dass die Mehrfachauswahl vorausgewählt ist und der Slider stadndardmäßig auf dem höchsten Wert steht. Jetzt wüde ich gerne implementieren, dass eine individuelle Fehlermeldung angezeigt wird, wenn Teilnehmende beim Slider k.A. auswählen, während die Mehrfachauswahl noch ausgewählt ist. Das funktioniert wunderbar, wenn der preset PHP Code nicht auf der Seite ist, aber nicht mehr wenn er dort steht. Liegt das daran, dass durch den repeatPage-Befehl die PHP-Voreinstellung wieder geladen wird? Im Fragebogen selber werden die Werte nicht erneut ausgewählt.
Haben Sie eine Idee, wie ich das fixen kann?

Vielen Dank!

by SoSci Survey (327k points)
> Das funktioniert wunderbar, wenn der preset PHP Code nicht auf der Seite ist, aber nicht mehr wenn er dort steht.

Auf welchen Seiten haben Sie denn welchen PHP-Code platziert?
by s130803 (420 points)
Auf der Seite mit den Auswahlmöglichkeiten diesen:
if ((value('EX13') == 3)){
 preset('EX06_02', 2);
 preset('EX07_01', 5);
}

und auf der Seite die darauf folgt diesen:
  if ((value('EX06_02') == 2) and (value('EX07_01') == -9) or (value('EX07_01') == -1)) {
    markFail('EX07_01');
    repeatPage('EX17');
  }
by SoSci Survey (327k points)
Das sieht soweit alles korrekt aus.

Wenn ich Sie korrekt verstehe ist der Ablauf wie folgt:

1. Man markiert die Mehrfachauswahl (EX06_02),
2. stellt den Schiebregler von 5 (Ihre Vorauswahl) auf -1 (Ausweichoption)
3. klickt auf Weiter ...

... und dann erscheint trotzdem keine Warnung?

Warum bieten Sie denn eigentlich eine Ausweichoption auf dem Schieberegler an, wenn Sie diese dann doch nicht zulassen?

Und könnten Sie, wenn es ungefähr so ist, wie ich es verstanden habe, bitte auch noch die Debug-Information von "der Seite die darauf folgt" posten? Danke.
by s130803 (420 points)
Vielen Dank schon mal für Ihre Antwort.

Der von Ihnen beschriebene Ablauf ist nicht ganz korrekt. Man kommt auf die Seite, die Mehrfachauswahl ist bereits markiert und der Schieberegler ist auf 5 eingestellt. Nun könnte es sein, dass Teilnehmende den Schieberegler auf -1 stellen, da sie lieber nicht spenden möchten, aber womöglich übersehen, dass sie auch einfach die Mehrfachauswahl deaktivieren könnten. Darauf möchte ich sie mit der Fehlermeldung dann hinweisen.

Der Ablauf ist also:
1. Mehfachauswahl ist per Default aktiviert
2. Schieberegler ist auf 5 voreingestellt
3. Teilnehmende stellen Schieberegler auf -1 und klicken weiter
4. Fehlermeldung kommt, dass sie bitte die Mehrfachauswahl abwählen sollen
5. Durch abgewählte Mehrfachauswahl verschwindet Schieberegler
6. Teilnehmende klicken auf weiter und kommen zur nächsten Seite

Momentan kommt bei Punkt 6 immer noch die Fehlermeldung wie bei Punkt 4.

Hier das ganze als Pre-Test Link: https://www.soscisurvey.de/B2Elmi3/?act=UoOQiIhLD9HKJ6vd3zQL8uW0

Vielen Dank schon mal.

1 Answer

0 votes
by SoSci Survey (327k points)
selected by s130803
 
Best answer

Danke für die Erklärung, nun kann ich das Problem nachvollziehen :)

Und damit sehe ich auch den Fehler. Der liegt hier:

if ((value('EX06_02') == 2) and (value('EX07_01') == -9) or (value('EX07_01') == -1)) {

Genauer gesagt fehlen zwei Klammern. Sie meinen das hier:

if ((value('EX06_02') == 2) and ((value('EX07_01') == -9) or (value('EX07_01') == -1))) {

Ja, genau. Suchbild. Auflösung: Ich habe die hinteren beiden Bedingungen, die mittels "or" verknüpft sind in eine Klammer gesetzt, also:

if (
    (value('EX06_02') == 2) and (
        (value('EX07_01') == -9) or
        (value('EX07_01') == -1)
    )) {

Warum? Weil in PHP (und vielen anderen Programmiersprachen) das "Und" stärker bindet als das "Oder". Wie bei Punkt-vor-Strich in Mathe. Der Filter hat also erst überprüft, ob die Auswahloption markiert war und der Schieberegler -9 lieferte. Und dann nochmal, ob die Ausweichoption ausgewählt war. Und letzteres traf ja weiterhin zu.

Die Klammer prüft nun erstmal das "Oder" und dann erst das "Und".

Es ginge übrigens auch einfacher:

if ((value('EX06_02') == 2) and (value('EX07_01') < 0)) {
by s130803 (420 points)
Und wieder mal bin ich absolut begeistert von Ihrem Support. Vielen Dank für die tolle Erklärung und Unterstützung. Ein Platz in der Danksagung meiner Dissertation ist Ihnen sicher :)

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

...