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

Hallo,

ich versuche gerade den Quoten-Stopp und das Screen-Out bzw. die Verknüpfung der Redirects in dem Fragebogen zu überprüfen.
Wenn ich mich über den grünen Playbutton in "Fragebogen zusammensetzen" durch die Fragen klicke werde ich automatisch an den Panelservice geleitet, obwohl die Quoten ja noch nicht voll sein sollten, weil der Fragebogen noch gar nicht öffentlich ist.
Kann es sein, dass das immer passiert, weil der Fragebogen noch nicht freigeschalten ist, oder liegt das Problem in meinen PHP-Codes? Ich habe mich bei diesen an der Vorlage aus dem Handbuch orientiert. (Eine Frage dennoch zu den Codes: Kann ich beim Alter z.B. "18 - 34" eingeben? Oder muss hier immer mit </>/= gearbeitet werden?)

Die PHP-Codes habe ich so auf die darauffolgende Seite gegeben:

$quotaAge = [
  1 => 247,  
  2 => 232,  
  3 => 521   
];
$quotaGender = [
  1 => 509,  
  2 => 491   
];
$quotaEducation = [
  1 => 697,
  2 => 137,
  3 => 166
];
 $quotaResidence = [
  1 => 200,
  2 => 800, 
];


// Geschlecht wird direkt ausgelesen
$gender = value('SD01');
//Bildung
$education = value ('SD10');
if ($education = 10) {
$educationGroup = 1;
} elseif ($education = 1) {
$educationGroup = 1;
} elseif ($education = 2) {
$educationGroup = 1;
} elseif ($education = 3) {
$educationGroup = 1;
} elseif ($education = 4) {
$educationGroup = 2;
} elseif ($education = 5) {
$educationGroup = 2;
} elseif ($education = 6) {
$educationGroup = 2;
} elseif ($education = 7) {
$educationGroup = 3;
} elseif ($education = 8) {
$educationGroup = 3;
} elseif ($education = 9) {
$educationGroup = 3;
} 

// Das Alter wird umkodiert
$age = value('SD02');
if ($age = 18 - 34) {
  $ageGroup = 1;
} elseif ($age = 35 -49) {
  $ageGroup = 2;
} elseif ($age >= 50) {
  $ageGroup = 3;
}

// Ost/West
$residence = value('SD19');
if ($residence = 1) {
  $residenceGroup = 2;
} elseif ($residence = 2) {
  $residenceGroup = 2;
} elseif ($residence = 3) {
  $residenceGroup = 1;
} elseif ($residence = 4) {
  $residenceGroup = 1;
} elseif ($residence = 5) {
  $residenceGroup = 2;
} elseif ($residence = 6) {
  $residenceGroup = 2;
} elseif ($residence = 7) {
  $residenceGroup = 2;
} elseif ($residence = 8) {
  $residenceGroup = 1;
} elseif ($residence = 9) {
  $residenceGroup = 2;
} elseif ($residence = 10) {
  $residenceGroup = 2;
} elseif ($residence = 11) {
  $residenceGroup = 2;
} elseif ($residence = 12) {
  $residenceGroup = 2;
} elseif ($residence = 13) {
  $residenceGroup = 1;
} elseif ($residence = 14) {
  $residenceGroup = 1;
} elseif ($residence = 15) {
  $residenceGroup = 2;
} elseif ($residence = 16) {
  $residenceGroup = 1;
}

// Abruf der vorliegenden Fälle für diese Merkmalsausprägung
$casesAge    = statistic('count', 'SD22_01', $ageGroup);
$casesGender = statistic('count', 'SD23_01', $gender);
$casesEducation = statistic('count', 'SD24_01', $educationGroup);
$casesResidence = statistic('count', 'SD25_01', $ResidenceGroup);

 // Screenout
if (!array_key_exists($ageGroup, $quotaAge) || !array_key_exists($educationGroup, $quotaEducation)) {
redirect('https://www.panelservice.com/ps/se.ashx?s=6C2369B275393EA2&pid=mf21098&int=so&eid=%reference%');
}


// Auslesen der Quoten für die angegeben Merkmale
$maxPerAge    = $quotaAge[$ageGroup];
$maxPerGender = $quotaGender[$gender];
$maxPerEducation = $quotaEducation[$educationGroup];
$maxPerResicence = $quotaResidence[$residenceGroup];
 
// Quotenstopp
if (($casesAge >= $maxPerAge) || ($casesGender >= $maxPerGender)||($casesEducation >= $maxPerEducation) || ($casesResidence >= $maxPerResidence)) {
redirect('https://www.panelservice.com/ps/se.ashx?s=6C2369B275393EA2&pid=mf21098&int=qf&eid=%reference%');
}

auf der vorletzten Seite des Fragebogens:

put('SD22_01', $ageGroup);
put('SD23_01', $gender);
put('SD24_01', $educationGroup);
put('SD25_01', $residenceGroup);

und den Complete-Redirect danach.

Vielen lieben Dank schonmal für die Hilfe!

1 Answer

0 votes
by SoSci Survey (302k points)

Kann es sein, dass das immer passiert, weil der Fragebogen noch nicht freigeschalten ist,

Nein. Höchstwahrscheinlich passt etwas im Code noch nicht.

Um das Problem einzugrenzen, kommentieren Sie die Redirects bitte einmal aus und setzen Sie stattdessen ein html() ein:

if (!array_key_exists($ageGroup, $quotaAge) || !array_key_exists($educationGroup, $quotaEducation)) {
    // redirect('https://www.panelservice.com/ps/se.ashx?s=6C2369B275393EA2&pid=mf21098&int=so&eid=%reference%');
   // html('Redirect Screenout');
}

Und dann fügen Sie noch ein debug() ein:

$maxPerAge    = $quotaAge[$ageGroup];
$maxPerGender = $quotaGender[$gender];
$maxPerEducation = $quotaEducation[$educationGroup];
$maxPerResicence = $quotaResidence[$residenceGroup];
debug($maxPerAge);
debug($maxPerGender);
debug($maxPerEducation);
debug($maxPerResicence);
debug($casesAge);
// u.s.w.

Wenn Sie jetzt mit dem gelben Pfeil im Debug-Modus starten, sollten Sie das Problem sehr schnell eingrenzen können.

by s190930 (110 points)
Vielen Dank für die Hilfe.
Leider verstehe ich dennoch nicht wo das Problem liegt. Selbst wenn ich die PHP-Codes aus dem Handbuch verwende (natürlich mit angepassten Variablennamen) werde ich direkt abgewiesen, auch wenn die Quote nicht voll sein kann, oder kein Screen-Out stattfinden dürfte.
Ich gebe die drei PHP-Codes aus der Anleitung für unverbundene Quoten auf die Seite, die auf die Items folgt (Fehlt hier noch was? Bzw. sind es mehr/weniger als die drei PHP-Codes (Definition der Quoten, Merkmale auslesen und umkodieren, Zählung der vorliegenden Fälle) auf dieser Seite?). Die put () Befehle für die internen Variablen auf die vorletzte Seite des Fragebogens. Die internen Variablen habe ich lediglich erstellt, dort nichts verändert uns sie auch nicht auf eine Seite des Fragebogens gezogen. Wo kann das Problem noch liegen?
by SoSci Survey (302k points)
> Leider verstehe ich dennoch nicht wo das Problem liegt.

Und genau dafür hatte ich die o.g. Modifikationen vorgeschlagen. Damit wir möglichst schnell herausfinden, an welcher Stelle es hakt. Was zeigt die Debug-Information denn an, wenn Sie die debug() einpflegen und die redirect() erstmal auskommentieren?

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

...