0 votes
in SoSci Survey (dt.) by s080530 (130 points)
edited by SoSci Survey

Lieber Support

Ich habe ein Problem mit der Programmierung der Quoten. Leider wird jeder gefiltert, egal welche Werte man in den vorherigen Fragen angegeben hat (also via Link weggeleitet).

Es handelt sich um eine verbundene Quote mit den drei Variablen $ageGrp, $gender und $nation.

$ageGrp = 1 (unter 18) soll zurückgeleitet werden.

Alle anderen sollen mitmachen können, insofern die Quote noch nicht voll ist (hier Anzahl 84). Und hier scheint es ein Problem zu geben, da leider jede Kombination schlussendlich weggeleitet wird.

(Ausprägungen: Geschlecht: 0,1 / Nation: 1,2,3 / Altersgruppe: 1,2,3,4)

Mein Code sieht so aus:

// Merkmale auslesen
$ageGrp = value('QU01');
$gender = value('SD01');
$nation = value('SD15');
 
// Evtl. Screenout
if (($ageGrp = 1) && ($nation = 1)){
  redirect('https://mingle.respondi.com/s/1042528/ospe.php3?c_0002=0&return_tic=%Respondi_Tic%', true);
}
if (($ageGrp = 1) && ($nation = 2)){
  redirect('https://mingle.respondi.com/s/1042480/ospe.php3?c_0002=0&return_tic=%Respondi_Tic%', true);
}
if (($ageGrp = 1) && ($nation = 3)){
  redirect('https://mingle.respondi.com/s/1042507/ospe.php3?c_0002=0&return_tic=%Respondi_Tic%', true);
}
 
// Kennung für die demografische Zelle erstellen
$demID = $ageGrp.'-'.$gender.'-'.$nation;

// Obergrenzen definieren
$limits = array(
  '2-1-1' => 84,
  '2-1-2' => 84,
  '2-1-3' => 84,
  '2-2-1' => 84,
  '2-2-2' => 84,
  '2-2-3' => 84,  
  '3-1-1' => 84,
  '3-1-2' => 84,
  '3-1-3' => 84,
  '3-2-1' => 84,
  '3-2-2' => 84,
  '3-2-3' => 84,
  '4-1-1' => 84,
  '4-1-2' => 84,
  '4-1-3' => 84,
  '4-2-1' => 84,
  '4-2-2' => 84,
  '4-2-3' => 84
);
 
// Abgeschlossene Fragebögen zählen
$n = statistic('crosscount', array('QU01', 'SD01', 'SD15'), array($ageGrp, $gender, $nation));
 
// Quoten prüfen
if (($n > $limits[$demID]) && ($nation = 1)) {
  redirect('https://mingle.respondi.com/s/1042528/ospe.php3?c_0002=2&return_tic=%Respondi_Tic%', true);
}
if (($n > $limits[$demID]) && ($nation = 2)) {
  redirect('https://mingle.respondi.com/s/1042480/ospe.php3?c_0002=2&return_tic=%Respondi_Tic%', true);
}
if (($n > $limits[$demID]) && ($nation = 3)) {
  redirect('https://mingle.respondi.com/s/1042507/ospe.php3?c_0002=2&return_tic=%Respondi_Tic%', true);
}

Sehen Sie, wo der Fehler liegt?

1 Answer

+1 vote
by SoSci Survey (305k points)

Sehen Sie, wo der Fehler liegt?

Ja. Es ist ein klassischer Anfängerfehler beim Programmieren. Und das nicht, weil Anfänger es icht könnten, sondern weil die Programmiersprachen hier un-intuitiv sind.

Technisch will man beim Programmieren unterschieden zwischen dem Zuweisen eines Wertes zu eienr Variable (passiert mit einem einfachen Gleichheitszeichen) und dem Vergleichs-Operator (das ist dann ein doppeltes Gleichheitszeichen).

Sie schreiben im Filter:

if (($ageGrp = 1) && ($nation = 1)) {

Was passiert? PHP Schreibt den Wert 1 in die Variable $ageGrp und gleich nochmal in $nation, und dann wird das Ergebnis (jeweils 1) als true oder false interpretiert. Die Lösung ist dann natürlich ein zweites Gleichheitszeichen:

if (($ageGrp == 1) && ($nation == 1)) {

Hiermit wird nicht mehr zugewiesen, sondern verglichen.

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

...