0 votes
in SoSci Survey (dt.) by s137973 (240 points)
edited by SoSci Survey

Sehr geehrtes SoSci-Team,

Ich möchte die Zufriedenheit mit den Lehrenden abfragen. Dazu können die Studierenden ein bis 6 Lehrende auswählen (Items/Zeilen) und auf einer Skala von 1 bis 5 bewerten (Spalten).

Das sind die 6 Variablen dazu:

DL04_01undefined
%input:DL05%

DL04_02undefined
%input:DL06%

DL04_03undefined
%input:DL07%

DL04_04undefined
%input:DL08%

DL04_05undefined
%input:DL09%

DL04_06undefined
%input:DL10%

1 = vollkommen zufrieden
5 = überhaupt nicht zufrieden
-1 = kann ich nicht beurteilen
-9 = nicht beantwortet

Nun folgen zwei weitere Fragen. Da es bis zu 6 Lehrenden sein können, habe ich die Frage jeweils 6 mal erstellt.
Mit diesem PHP-Befehl erscheinen die Namen der Lehrenden dann in den unten stehenden Fragen:

replace('%DL05%', 'DL05', 'response');
replace('%DL06%', 'DL06', 'response');
replace('%DL07%', 'DL07', 'response');
replace('%DL08%', 'DL08', 'response');
replace('%DL09%', 'DL09', 'response');
replace('%DL10%', 'DL10', 'response');

Eine Variante wird eingeblendet, wenn 3,4 oder 5 angekreuzt wurden. Folgende Variablen:

DL11_01
DL12_01
DL13_01
DL14_01
DL15_01
DL16_01

Die andere, wenn 1 oder 2 angekreuzt wurden. Folgende Variablen:

DL17_01
DL18_01
DL19_01
DL20_01
DL21_01
DL22_01

Andernfalls, wenn nichts oder die Ausweichoption (-9) angekreuzt wurden, soll die Frage nicht erscheinen.
Hab folgenden PHP-Befehl erstellt:

if ((value('DL04_01') == 3) or (value('DL04_01') == 4) or (value('DL04_01') == 5)){
  question('DL11_01');
} else if ((value('DL04_01') == 1) or (value('DL04_01') == 2)){
  question('DL17_01');
} else 
if ((value('DL04_02') == 3) or (value('DL04_02') == 4) or (value('DL04_02') == 5)){
  question('DL12_01');
} else if  ((value('DL04_02') == 1) or (value('DL04_02') == 2)){
  question('DL19_01');
}else
if ((value('DL04_03') == 3) or (value('DL04_03') == 4) or (value('DL04_03') == 5)){
  question('DL13_01');
} else if  ((value('DL04_03') == 1) or (value('DL04_03') == 2)){
  question('DL20_01');
}else
if ((value('DL04_04') == 3) or (value('DL04_04') == 4) or (value('DL04_04') == 5)){
  question('DL14_01');
} else if  ((value('DL04_04') == 1) or (value('DL04_04') == 2)){
  question('DL21_01');
}else
if ((value('DL04_05') == 3) or (value('DL04_05') == 4) or (value('DL04_05') == 5)){
  question('DL15_01');
} else if  ((value('DL04_05') == 1) or (value('DL04_05') == 2)){
  question('DL21_01');
}else
if ((value('DL04_06') == 3) or (value('DL04_06') == 4) or (value('DL04_06') == 5)){
  question('DL16_01');
} else if ((value('DL04_06') == 1) or (value('DL04_06') == 2)){
  question('DL22_01');
}else{
goToPage('base12');
}

Hatte schon einige Variationen ausprobiert. Es kommen unterschiedliche Fehlermeldungen oder keine Meldungen, aber trotzdem nicht ganz wie gewünscht. Komme nicht weiter und brauche Hilfe.

Mit freundlichen Grüßen

by SoSci Survey (328k points)
Das sind ziemlich viele Informationen, aber ich verstehe ehrlich gesagt weder genau die Situation noch die Fragestellung...

Gehen wir das Ganze einmal Schritt für Schritt durch. Wo fragen Sie Namen (?) der Lehrer/innen ab? DL05 bis DL10?

Und was möchten Sie damit als erstes (!) machen und welche Fehlermeldung (genauer Wortlaut) erscheint dabei? Bitte ergänzen Sie Ihre Frage auch um die Debug-Information, welche auf der Seite mti dem Fehler angezeigt wird.
by s137973 (240 points)
OK, ich versuche es anders.

Ich habe ein Frage (DL04) mit 6 Items (DL04_01 bis DL04_06) und einer Skala von 1 bis 5.
Wenn bei dem Item DL04_01 der Wert 3,4 oder 5 angekreuzt wurden, soll die Frage (DL11_01) erscheinen.
Wenn bei dem Item DL04_01 der Wert 1 oder 2 angekreuzt wurden, soll die Frage (DL17_01) erscheinen.

usw.

Ist der Item bei der Frage DL04 leer geblieben, z.B. DL04_6 sollen auch die Items in den beiden anderen Fragen DL11_06 und DL17_06 ausgeblendet werden.

Hier mein PHP-Befehl:

if ((value('DL04_01') == 3) or (value('DL04_01') == 4) or (value('DL04_01') == 5)){
  question('DL11_01');
} elseif ((value('DL04_01') == 1) or (value('DL04_01') == 2)){
  question('DL17_01');
}else{
goToPage('base12');
}

if ((value('DL04_02') == 3) or (value('DL04_02') == 4) or (value('DL04_02') == 5)){
  question('DL11_02');
}elseif  ((value('DL04_02') == 1) or (value('DL04_02') == 2)){
  question('DL17_02');
}else{
goToPage('base12');
}

if ((value('DL04_03') == 3) or (value('DL04_03') == 4) or (value('DL04_03') == 5)){
  question('DL11_03');
}elseif  ((value('DL04_03') == 1) or (value('DL04_03') == 2)){
  question('DL17_03');
}else{
goToPage('base12');
}

if ((value('DL04_04') == 3) or (value('DL04_04') == 4) or (value('DL04_04') == 5)){
  question('DL11_04');
} elseif  ((value('DL04_04') == 1) or (value('DL04_04') == 2)){
  question('DL17_04');
}else{
goToPage('base12');
}

if ((value('DL04_05') == 3) or (value('DL04_05') == 4) or (value('DL04_05') == 5)){
  question('DL11_05');
} elseif  ((value('DL04_05') == 1) or (value('DL04_05') == 2)){
  question('DL17_05');
}else{
goToPage('base12');
}

if ((value('DL04_06') == 3) or (value('DL04_06') == 4) or (value('DL04_06') == 5)){
  question('DL11_06');
} elseif ((value('DL04_06') == 1) or (value('DL04_06') == 2)){
  question('DL17_06');
}else{
goToPage('base12');
}

Problem: es erscheinen beide Fragen mit je 6 Items. Es wird also nichts ausgeblendet oder sortiert. D.h. unabhängig von der Skala, erscheint das Item in beiden Fragen. Obwohl, wenn die Werte für eine Frage zustimmen, die andere ausgeblendet werden soll.

Ich hoffe, das ist jetzt verständlicher

Gruß

1 Answer

0 votes
by SoSci Survey (328k points)

Danke, jetzt wird es klarer. Sie verwenden (im ersten Filter) folgenden PHP-Code:

if ((value('DL04_01') == 3) or (value('DL04_01') == 4) or (value('DL04_01') == 5)){
  question('DL11_01');
} elseif ((value('DL04_01') == 1) or (value('DL04_01') == 2)){
  question('DL17_01');
} else{
  goToPage('base12');
}

Prinzipiell alles gut ... nur das goToPage() stört. Denn wenn dieser Teil des Filters aktiv wird, dann springt SoSci Survey auf der Stelle sofort auf die Seite "base12". Alle anderen Filter werden dann ignoriert. Lassen Sie diesen Teil einfach in jedem Filter weg:

if ((value('DL04_01') == 3) or (value('DL04_01') == 4) or (value('DL04_01') == 5)){
  question('DL11_01');
} elseif ((value('DL04_01') == 1) or (value('DL04_01') == 2)){
  question('DL17_01');
}

Problem: es erscheinen beide Fragen mit je 6 Items.

Das passiert vermutlich (daher fragte ich nach der Debug-Information) deshalb, weil Sie die Fragen nicht nur mittels question() aufrufen, sondern auch nochmal in die Seite gezogen haben. Falls das der Fall ist: Entfernen Sie ale Fragen aus der Seite, lassen Sie nur den PHP-Code dort.

by s137973 (240 points)
Danke für schnelle Rückmeldung.

Hab nun Folgendes zu stehen:

if ((value('DL04_01') == 3) or (value('DL04_01') == 4) or (value('DL04_01') == 5)){
  question('DL11_01');
} elseif ((value('DL04_01') == 1) or (value('DL04_01') == 2)){
  question('DL17_01');}

if ((value('DL04_02') == 3) or (value('DL04_02') == 4) or (value('DL04_02') == 5)){
  question('DL11_02');
}elseif  ((value('DL04_02') == 1) or (value('DL04_02') == 2)){
  question('DL17_02');}

if ((value('DL04_03') == 3) or (value('DL04_03') == 4) or (value('DL04_03') == 5)){
  question('DL11_03');
}elseif  ((value('DL04_03') == 1) or (value('DL04_03') == 2)){
  question('DL17_03'); }

if ((value('DL04_04') == 3) or (value('DL04_04') == 4) or (value('DL04_04') == 5)){
  question('DL11_04');
} elseif  ((value('DL04_04') == 1) or (value('DL04_04') == 2)){
  question('DL17_04');}

if ((value('DL04_05') == 3) or (value('DL04_05') == 4) or (value('DL04_05') == 5)){
  question('DL11_05');
} elseif  ((value('DL04_05') == 1) or (value('DL04_05') == 2)){
  question('DL17_05');}

if ((value('DL04_06') == 3) or (value('DL04_06') == 4) or (value('DL04_06') == 5)){
  question('DL11_06');
} elseif ((value('DL04_06') == 1) or (value('DL04_06') == 2)){
  question('DL17_06');}

Das Problem bleibt bestehen, dass die Items nicht sortiert werden:
Also, wenn DL04_01 Wert 1 hat, dann soll Item DL11_01 eingeblendet, aber das Item DL17_01 ausgeblendet werden.

Ich glaube ich muss diese Funktionen "ausblenden" fest im Befehl definieren. Weiß aber nicht, wie.
by SoSci Survey (328k points)
Ach ... ich habe Ihre Frage und den Code gelesen - und dabei überlesen, dass es um die Items geht, nicht um die Frage.

Versuchen Sie es hiermit:

$itemsDL11 = [];
$itemsDL17 = [];
foreach (getItems('DL04', 'all') as $itemID) {
  $val = value(id('DL04', $itemID));
  if (($val == 3) || ($val == 4) || ($val == 5))  {
    $itemsDL11[] = $itemID;
  } else if (($val == 1) || ($val == 2))  {
    $itemsDL17[] = $itemID;
  }
}
question('DL11', $itemsDL11);
question('DL17', $itemsDL17);

Auf den ersten Blick ein wenig anspruchsvoll - aber eigentlich nicht schlimm. Sie erstellen hier zwei Listen mit den Items, die Sie anzeigen möchten, und zeigen diese dann.

Falls Sie die Items in der Reihenfolge der Original-Items zeigen möchten, können Sie auch Ihren Code verwenden - müssen dann aber das Item Separat schreiben. Statt

question('DL11_01');

also

question('DL11', 1);
by s137973 (240 points)
Riesen Dank! Es hat geklappt. Einfach toll!!!!!!!!!!!!!!!!!

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

...