0 votes
in Methoden-Fragen by s105330 (330 points)

Hallo,

wir haben momentan ein Problem mit einem unserer PHP-Filter im Fragebogen.

Und zwar möchten wir in einem Pre-Screening alle Teilnehmenden, die weniger als 3 negative Lebensereignisse hatten rausfiltern. Daher zählen wir alle Antworten auf Fragen zu Lebensereignissen, die mit 3 (=negativ) beantwortet wurden.

Hier der PHP-Code, den wir hierfür nutzen:

$life_event = array(
  'LI28_01' => 3,
  'LI28_02' => 3,
  'LI28_03' => 3,    
  'LI29_01' => 3,
  'LI29_02' => 3,
  'LI29_03' => 3,      
  'LI30_01' => 3,
  'LI30_02' => 3,
  'LI30_03' => 3,  
  'LI31_01' => 3,
  'LI31_02' => 3,
  'LI31_03' => 3,
  'LI32_01' => 3,
  'LI32_02' => 3,
  'LI32_03' => 3,
  'LI33_01' => 3,  
  'LI33_02' => 3, 
  'LI33_03' => 3, 
  'LI34_01' => 3,  
  'LI34_02' => 3,
  'LI34_03' => 3,
  'LI35_01' => 3, 
  'LI35_02' => 3, 
  'LI35_03' => 3,  
  'LI36_01' => 3,
  'LI36_02' => 3,
  'LI36_03' => 3,
  'LI37_01' => 3,
  'LI37_02' => 3,
  'LI37_03' => 3,
  'LI38_01' => 3, 
  'LI38_02' => 3,
  'LI38_03' => 3, 
  'LI39_01' => 3,  
  'LI39_02' => 3, 
  'LI39_03' => 3, 
  'LI40_01' => 3, 
  'LI40_02' => 3,  
  'LI40_03' => 3,   
  'LI41_01' => 3,
  'LI41_02' => 3,
  'LI41_03' => 3,
  'LI42_01' => 3,
  'LI42_02' => 3,
  'LI42_03' => 3,
  'LI43_01' => 3,  
  'LI43_02' => 3,  
  'LI43_03' => 3,  
  'LI44_01' => 3,  
  'LI44_02' => 3,  
  'LI44_03' => 3,  
  'LI45_01' => 3,  
  'LI45_02' => 3,  
  'LI45_03' => 3,  
  'LI46_01' => 3,
  'LI46_02' => 3,
  'LI46_03' => 3,
  'LI47_01' => 3,
  'LI47_02' => 3,
  'LI47_03' => 3,
  'LI48_01' => 3,  
  'LI48_02' => 3,
  'LI48_03' => 3,
  'LI49_01' => 3, 
  'LI49_02' => 3,  
  'LI49_03' => 3,   
  'LI50_01' => 3,  
  'LI50_02' => 3,  
  'LI50_03' => 3,  
  'LI51_01' => 3,
  'LI51_02' => 3,
  'LI51_03' => 3,
  'LI52_01' => 3,
  'LI52_02' => 3,
  'LI52_03' => 3,
  'LI53_01' => 3,  
  'LI53_02' => 3, 
  'LI53_03' => 3, 
  'LI54_01' => 3,
  'LI54_02' => 3,
  'LI54_03' => 3,
);
 
// Initialising counter variable
$counter_le = 0;
 
// Check all the items in a loop
foreach ($life_event as $variable=>$correct) {
    // get participant's answer
  $answer = value($variable);
    // check if it is 3
  if ($answer == $correct) {
    $counter_le++;
  }
}

Anschließend steuern wir dann mit folgendem Filter, auf welche Seite die Teilnehmenden als nächstes geschickt werden. Außer der Summe an negativen Lebensereignissen befinden sich noch andere Kriterien im Filter, welche keine Probleme bereiten. Nur Teilnehmende mit mindestens drei negativen Lebensereignissen (und anderen Kriterien) schaffen es auf die nächste Seite; ansonsten werden sie auf eine Seite gelenkt, die ihnen mitteilt, dass sie nicht für die Studie geeignet sind.

if(getLanguage() == 'heb'
&& value('AB02_01') > 17 
&& value('AB02_01') < 28 
&& value('SD14') == 3      
or value('SD14') == 2      
&& value('XX09') == 1
&& value('XX10') < 3 
&& $sum_ghq > 37 
&& $counter_le > 2) {

goToPage('MRIpsych');

} 

elseif((getLanguage() == 'ger' 
        ||getLanguage() == 'dut' 
        ||getLanguage() == 'pol'
        ||getLanguage() == 'eng')
    && value('AB02_01') > 17 
    && value('AB02_01') < 26 
    && value('SD14') == 3      
    or value('SD14') == 2      
    && value('XX09') == 1
    && value('XX10') < 3 
    && $sum_ghq > 37 
    && $counter_le > 2) {

    goToPage('MRIpsych');

} 

else {

    goToPage('NotEligible');
}

Aus irgendeinem Grund werden allerdings auch Teilnehmende auf die nächste Fragebogenseite geleitet, die weniger als drei negative Lebensereignisse hatten und somit im Filter eigentlich hätten ausgeschlossen werden müssen.

Haben Sie eine Idee, woran das liegen könnte? Ist irgendwas in dem Filter oder der Berechnung der Anzahl negativer Lebensereignisse falsch programmiert?

Vielen herzlichen Dank!

1 Answer

+1 vote
by SoSci Survey (304k points)
selected by s105330
 
Best answer

Aus irgendeinem Grund werden allerdings auch Teilnehmende auf die nächste Fragebogenseite geleitet, die weniger als drei negative Lebensereignisse hatten und somit im Filter eigentlich hätten ausgeschlossen werden müssen.

Sie haben den PHP-Code für die Zählung und den Filter ins selbe Feld "PHP-Code" geschrieben, ja?

Lassen Sie sich als erstes einmal ausgeben, wie viele negative Lebensereignisse Ihr Code überhaupt zählt:

debug($counter_le);

Sehen Sie sich weiterhin die Debug-Information an, um die Ergebnisse für die diversen value() zu prüfen.

Und ganz wichtig - ich vermute, dass Ihr Filter deshalb nicht funktioniert. Das logische Und (&&) hat eine höhere Priorität als das logische Oder (||). Das ist wie in Mathe bei Punkt-vor-Strich. Erstmal werden alle && ausgewertet. Und dann die || bzw. or (die or kommen noch später).

Ich erster Filter - ander geschrieben - macht also wahrscheinlich nicht das, was Sie sich wünschen:

if (
  (
    getLanguage() == 'heb'
    && value('AB02_01') > 17 
    && value('AB02_01') < 28 
    && value('SD14') == 3      
  ) or (
    value('SD14') == 2      
    && value('XX09') == 1
    && value('XX10') < 3 
    && $sum_ghq > 37 
    && $counter_le > 2
  )
) {
by s105330 (330 points)
Vielen Dank für Ihre hilfreiche Antwort!

Das heißt, wenn die ersten Bedingungen bis SD14=2 stimmten wurden die anderen Bedingungen zu XX09, XX10, $sum_ghq und $counter_le gar nicht mehr abgefragt und die Teilnehmenden sofort auf die nächste Seite geleitet?

Behebt es das Problem, wenn ich den Filter folgendermaßen ändere?:

if(getLanguage() == 'heb'
    && value('AB02_01') > 17
    && value('AB02_01') < 28
    && (value('SD14') == 3     
    or value('SD14') == 2 )     
    && value('XX09') == 1
    && value('XX10') < 3
    && $sum_ghq > 37
    && $counter_le > 2) {
    
    goToPage('MRIpsych');

}


Vielen herzlichen Dank!
by SoSci Survey (304k points)
Ja, damit würden Sie erst das OR und dann die umgebenden UNDs auswerten.
by s105330 (330 points)
Perfekt, ich danke Ihnen!

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

...