0 votes
in SoSci Survey (dt.) by s100302 (315 points)
edited by SoSci Survey

Liebes soscisurvey-Team,

könnt ihr mir einen Gefallen tun und folgenden Code prüfen? Ich denke, ich habe es etwas umständlich programmiert. Es geht um eine Frage mit Mehrfachauswahl (11 Optionen, jeweils 1=nicht ausgewählt, 2=ausgewählt). Ich will für verschiedene Bedingungen eine Reihenfolge im Fragebogen festlegen.

Hier der Code (vielen vielen Dank schon einmal!):

if (value ('SD08_01')==2 and value ('SD08_02')==2 and (value ('SD08_03')==1 
and value ('SD08_04')==1 and value ('SD08_05')==1 and value ('SD08_06')==1 
and value ('SD08_07')==1 and value ('SD08_08')==1 and value ('SD08_09')==1 
and value ('SD08_10')==1 and value ('SD08_11')==1));{ 
setPageOrder ('erf, wb, fachwP, fachwT, sicherheitP, sicherheitT, filterexp');
}
//Reihenfolge, wenn Option 1 und 2 und keine der restlichen Optionen

if (value ('SD08_01')==2 and value ('SD08_02')==1 and (value ('SD08_03')==2 
or value ('SD08_04')==2 or value ('SD08_05')==2 or value ('SD08_06')==2 
or value ('SD08_07')==2 or value ('SD08_08')==2 or value ('SD08_09')==2 
or value ('SD08_10')==2 or value ('SD08_11')==2));{ 
setPageOrder ('erf, wb, fachwP, sicherheitP, startPP-endePP, end');
}
//Reihenfolge, wenn Option 1 und nicht Option 2 und mindestens eine der restlichen Optionen

if (value ('SD08_01')==1 and value ('SD08_02')==2);{
setPageOrder ('erf, wb, fachwT, sicherheitT, startT-endeT, end');
}
//Reihenfolge, wenn nicht Option 1 und Option 2 (egal, wie viele der anderen Optionen)

if (value ('SD08_01')==2 and value ('SD08_02')==1 and (value ('SD08_03')==1 
and value ('SD08_04')==1 and value ('SD08_05')==1 and value ('SD08_06')==1 
and value ('SD08_07')==1 and value ('SD08_08')==1 and value ('SD08_09')==1 
and value ('SD08_10')==1 and value ('SD08_11')==1));{ 
setPageOrder ('erf, wb, fachwP, sicherheitP, startP-endeP, end');
}
//Reihenfolge, wenn Option 1 und nicht Option 2 und keine der restlichen Optionen

if (value ('SD08_01')==2 and value ('SD08_02')==2 and (value ('SD08_03')==2 
or value ('SD08_04')==2 or value ('SD08_05')==2 or value ('SD08_06')==2
or value ('SD08_07')==2 or value ('SD08_08')==2 or value ('SD08_09')==2 
or value ('SD08_10')==2 or value ('SD08_11')==2));{ 
setPageOrder('erf, wb, fachwP, fachwT, sicherheitP, sicherheitT, filterpp');
}
//Reihenfolge, wenn Option 1 und Option 2 und mindestens eine der restlichen Optionen

if (value ('SD08_01') ==1 and value ('SD08_02') ==1);{
goToPage('gesp');
}
//Reihenfolge, wenn nicht Option 1 und nicht Option 2 
by SoSci Survey (330k points)
Nun, Sie müssten für eine hilfreiche Antwort bitte beschreiben, welche Antworten Sie gegeben haben - und was dann passiert und was nicht.

Da Sie AND und OR vermischen noch ein wichtiger Hinweis: AND geht vor OR (https://www.php.net/manual/de/language.operators.precedence.php) - so ähnlich wie das Punkt-vom-Strich aus dem Mathe-Unterricht. Heißt: Eventuell müssen Sie noch ein paar Klammern setzen.
by s100302 (315 points)
Ok, ja das mit den Klammern habe ich ausprobiert - geht trotzdem nicht.
Egal, was ich klicke, ich lande immer bei der Seite 'gesp', es wird also immer damit umgegangen, als ob ich weder 1 noch 2 geklickt hätte.

1 Answer

0 votes
by SoSci Survey (330k points)

Egal, was ich klicke, ich lande immer bei der Seite 'gesp', es wird also immer damit umgegangen, als ob ich weder 1 noch 2 geklickt hätte.

Ah, das war der entscheidende Hinweis :D

Gut, zugegeben, es ist nur ein Semikolon, welches Ihren Code zunichte macht. Und zwar hier:

if (value ('SD08_01') ==1 and value ('SD08_02') ==1);{
goToPage('gesp');
}

Dafür muss man wissen, dass hinter einem IF nicht unbedingt eine geschweifte Klammer stehen muss - es kann auch direkt ein Befehl kommen. Das ist aber schlechter Stil, weil fehleranfällig.

In Ihrem Fall kommt gar kein Befehl - und der wird mit einem Semikolon abgeschlossen. Da steht also eigentlich:

if (value ('SD08_01') ==1 and value ('SD08_02') ==1);
{
goToPage('gesp');
}

Und ob das goToPage() nun in Klammern steht oder nicht, ist PHP egal. Also steht da:

if (value ('SD08_01') ==1 and value ('SD08_02') ==1);
goToPage('gesp');

Weil das IF ja nichts macht, bleibt also übrig:

goToPage('gesp');

Deshalb springt der Fragebogen immer auf die Seite "gesp". Programmieren ist manchmal gemein...

by s100302 (315 points)
Vielen vielen Dank, jetzt geht es!

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

...