0 votes
in SoSci Survey (dt.) by s093381 (215 points)
edited by SoSci Survey

Hallo liebes Team,

es geht um eine Mehrfachauswahl, bei der ich bereits eingerichtet habe, dass wenn mehrere Items ausgewählt werden, per Zufall eine

ich habe eine Auswahlfrage mit Mehrfachauswahl. Es handelt sich um eine Liste mit 12 Marken.

Je nachdem welche Marke(n) ausgewählt wurde(n) (also Option 2) taucht in der nächsten Frage die wahrgenommene Marke (bei Mehrfachauswahl zufällig eine der wahrgenommenen Marken) in den Items als Text auf.

Jetzt hätte ich aber gerne noch, dass wenn Item 10 und ein oder mehrere andere angeklickt werden auf jeden Fall die Frage zu Item 10 (also RE10) kommt. Wie mache ich das?

Hier mein momentaner Text

$itemliste = getItems('M102','min', 2);  // Relevante Items ermitteln
shuffle($itemliste); // Liste mischen
// Fragen zu den Items definieren
$fragen = array(
  1 => 'RE01',
  2 => 'RE02',
  3 => 'RE03',
  4 => 'RE04',
  5 => 'RE05',
  6 => 'RE06',
  7 => 'RE07',
  8 => 'RE08',
  9 => 'RE09',
  10 => 'RE10',
  11 => 'RE11',
  12 => 'RE12'
);
$anzahl = count($itemliste); // So viele Elemente können erfragt werden
if ($anzahl == 0) {
  goToPage('next'); // Nichts genutzt? Dann gleich weiter!
}
if ($anzahl > 1) {
  $anzahl = 1; // Maximal zwei Polprofile abfragen
}
if ($anzahl == 10) {
question ('RE10');
}

for ($i=0; $i<$anzahl; $i++) {
  $item_kenn = $itemliste[$i]; // Einer der genutzten Dienste (1 bis 6)
  $frage_kenn = $fragen[$item_kenn];  // Die entspr. Frage
  question($frage_kenn);  // Frage stellen
}

das mit

if ($anzahl == 10) {
question ('RE10');
}

klappt nicht...

Liebe Grüße
Anna

1 Answer

0 votes
by SoSci Survey (326k points)

Der Knackpunkt liegt hier in der Reihenfolge:

if ($anzahl > 1) {
  $anzahl = 1; // Maximal zwei Polprofile abfragen
}
if ($anzahl == 10) {
  question ('RE10');
}

Falls die Anzahl 10 ist, dann sorgt der erste Filter dafür, dass sie fortan nur noch 1 ist. Und der zweite Filter, der nach einer 10 sucht, muss zwangsläufig ins Leere laufen.

by s093381 (215 points)
Wenn ich das ganze umdrehe, klappt es auch nicht... es kommt immer die Frage zu dem Item, das in der Liste oberhalb des anderen ausgewählten Items stand....

Ist $anzahl == 10 hier überhaupt richtig? Müsste es nicht $item == 10 heißen? Ich will ja, dass Frage RE10 kommt wenn das Item 10 angeklickt wird.
by SoSci Survey (326k points)
Ich hatte es so verstanden, dass Sie die Frage bei 10 gewählten Items anzeigen möchten.

Für Ihre Falll schreiben Sie einfach einen anderen Filter:

if (value('M102_10') == 2) {
  question ('RE10');
}
by s093381 (215 points)
Mein Text ordnet ja schon den entsprechenden Auswahlmöglichkeiten die passende Frage zu. Wenn mehrere Möglichkeiten angekreuzt werden, wird nur eine der passenden Fragen zufällig angezeigt.

Jetzt geht es aber darum, dass wenn in den gewählten Auswahlmöglichkeiten die Antwort 10 enthalten ist, auf jeden Fall die Frage passend zu Item 10 angezeigt werden soll.

Ist das verständlich?

Liebe Grüße
Anna
by SoSci Survey (326k points)
Dann packen Sie den Rest des Codes einfach in den ELSE-Teil des o.g. Filters - der soll also nur ausgeführt werden, wenn M103_10 nicht den Code 2 hat.
by s093381 (215 points)
Ok, das klingt logisch,so sieht mein Text jetzt aus:



if (value('M102_10') == 2) {
  question ('RE10');
}

$itemliste = getItems('M102','min', 2);  // Relevante Items ermitteln
shuffle($itemliste); // Liste mischen
// Fragen zu den Items definieren
$fragen = array(
  1 => 'RE01',
  2 => 'RE02',
  3 => 'RE03',
  4 => 'RE04',
  5 => 'RE05',
  6 => 'RE06',
  7 => 'RE07',
  8 => 'RE08',
  9 => 'RE09',
  10 => 'RE10',
  11 => 'RE11',
  12 => 'RE12'
);

$anzahl = count($itemliste); // So viele Elemente können erfragt werden
if ($anzahl == 0) {
  goToPage('next'); // Nichts genutzt? Dann gleich weiter!
}
elseif ($anzahl > 1) {
  $anzahl = 1; // Maximal zwei Polprofile abfragen
}


for ($i=0; $i<$anzahl; $i++) {
  $item_kenn = $itemliste[$i]; // Einer der genutzten Dienste (1 bis 6)
  $frage_kenn = $fragen[$item_kenn];  // Die entspr. Frage
  question($frage_kenn);  // Frage stellen
}




Nur leider kommt jetzt wenn man Item 10 anklickt, die passende Frage zweimal untereinander. Das liegt daran, dass in meinem array ja die 10 nochmal zugeordnet wird. Lösche ich die Anweisung zu 10 aus dem array kommen allerdings folgende Fehlermeldungen:

Im Befehl question() wurde keine Frage-Kennung angegeben.

Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Undefined offset: 10
Zeile: 33

PHP-Code

030
031 for ($i=0; $i<$anzahl; $i++) {
032   $item_kenn = $itemliste[$i];
033   $frage_kenn = $fragen[$item_kenn];  
034   question($frage_kenn);  
035 }
036 return 'ok';
by s093381 (215 points)
Liebes Team,

ich will nicht stressen, aber es wäre sehr wichtig für mich, dieses Problem noch heute zu lösen...
Ich habe selber nochmal romprobiert aber ich komme einfach nicht drauf :(

Liebe Grüße
Anna
by SoSci Survey (326k points)
Ich empfehle, dass Sie den Code ein wenig umstellen - und die Auswahl des passenden Items aus der List (am Ende war auch noch unnötig kompliziert und ein wenig fehlerhaft):

$itemliste = getItems('M102','min', 2);  // Relevante Items ermitteln

$anzahl = count($itemliste); // So viele Elemente können erfragt werden
if ($anzahl == 0) {
  goToPage('next'); // Nichts genutzt? Dann gleich weiter!
}

if (value('M102_10') == 2) {
  question ('RE10');
} else {
  shuffle($itemliste); // Liste mischen
  // Fragen zu den Items definieren
  $fragen = array(
    1 => 'RE01',
    2 => 'RE02',
    3 => 'RE03',
    4 => 'RE04',
    5 => 'RE05',
    6 => 'RE06',
    7 => 'RE07',
    8 => 'RE08',
    9 => 'RE09',
    10 => 'RE10',
    11 => 'RE11',
    12 => 'RE12'
  );
  $item = $itemsliste[0];
  question($fragen[$item]);  // Frage stellen
}
by s093381 (215 points)
Vielen, vielen Dank!

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

...