0 votes
in SoSci Survey (dt.) by s136815 (550 points)
edited by SoSci Survey

Hallo zusammen,
bei einer Frage habe ich viele Antwortitems, die auf mehreren Seiten angezeigt werden und alle rotieren sollen. Zusätzlich soll auf der letzten Seite unter dem letzten (rotierten) Item noch eine offene Frage (MI37) erscheinen, was auch funktioniert.
Nun möchte ich allerdings verhindern, dass es zu einer erneuten Rotation kommt, wenn der Befragte auf "zurück" klickt. Dazu habe ich folgenden PHP-Code geschrieben:

if (!isset($itemsMI36)) {
$itemsMI36 = getItems('MI36', 'all');
shuffle($itemsMI36);
$itemsMI36 = array_chunk($itemsMI36, 12);
registerVariable($itemsMI36);
}

$i = loopPage(count($itemsMI36));
if ($i == count($itemsMI36) - 1) {
  question('MI36', $itemsMI36[$i], 'spacing=4');
  question('MI37');  // Das offene Eingabefeld
} else {
  question('MI36', $itemsMI36[$i]);
}

Demnach müsste das erneute Rotieren verhindert werden mit dem Befehl isset. Beim Anklicken von "zurück" kommt es allerdings zu einem erneuten Rotieren.
Was muss ich ändern um das zu verhindern?
Viele Grüße und vielen Dank im Voraus.

1 Answer

0 votes
by SoSci Survey (306k points)
selected by s136815
 
Best answer

Demnach müsste das erneute Rotieren verhindert werden mit dem Befehl isset.

Ja - und es sieht auch alles korrekt aus.

Könnten Sie bitte ganz oben und unter dem isset()-IF-Block jeweils folgende Zeile ergänzen:

debug($itemsMI36);

Wenn die Items tatsächlich neu rotiert werden, dann sollte das in der Debug-Information ersichtlich sein. Wenn ja, dann posten Sie bitte die komplette Debug-Information, die Sie bekommen (rechts oben). Danke.

by s136815 (550 points)
Hallo,
den PHP-Code habe ich wie folgt ergänzt:
debug($itemsMI36);
if (!isset($itemsMI36)) {
$itemsMI36 = getItems('MI36', 'all');
shuffle($itemsMI36);
$itemsMI36 = array_chunk($itemsMI36, 12);
registerVariable($itemsMI36);
}
debug($itemsMI36);

$i = loopPage(count($itemsMI36));
if ($i == count($itemsMI36) - 1) {
  question('MI36', $itemsMI36[$i], 'spacing=4');
  question('MI37');  // Das offene Eingabefeld
} else {
  question('MI36', $itemsMI36[$i]);
}
Das Ergebnis:
debug-Info:
[Information]    Interview gestartet (neue Nummer 520)
[Information]    Der Fragebogen FbBk1 im Projekt kult-aesth-BA-BK wird verwendet
[Verarbeitung]    Erstelle Seite 30 in Fragebogen FbBk1
[Inhalt]    Erstelle Frage MI95
debug()    Inhalt: Keine Daten (null)
debug()    Inhalt: 0[Array], 1[Array], 2[Array], 3[Array]
[Information]    30 / loop.S30 /
[Information]    loopPage() wiederholt die Seite 30 nun 4 mal, beginnend mit dem Wert 0
[Inhalt]    Erstelle Frage MI36

Die Rotation ist immer noch vorhanden; und:
beim Testen der Frage erscheint auf allen Seiten folgendes:

Hinweis (Seite 30)
Debug-Information für $itemsMI36:
Keine Daten (null)
Hinweis (Seite 30)
Debug-Information für $itemsMI36:
0[Array], 1[Array], 2[Array], 3[Array]

und auf der letzten Seite (Seite 4) noch folgende Fehlermeldung:

Fehler im Fragebogen (Seite 30)
Im PHP-Code trat ein Fehler auf.

Fehler im Fragebogen: Die PHP-Variable $itemsMI36 wurde verwendet, in diesem PHP-Code aber noch nicht definiert (sie enthält noch keinen Wert).

PHP-Code

001 namespace s2survey\questionnaire\environment;
002
003 debug($itemsMI36);
004 if (!isset($itemsMI36)) {
005 $itemsMI36 = getItems('MI36', 'all');
006 shuffle($itemsMI36);

Ich freue mich auf Ihre Rückmeldung.
Viele Grüße
by SoSci Survey (306k points)
> beim Testen der Frage erscheint auf allen Seiten folgendes:

> Debug-Information für $itemsMI36:
> Keine Daten (null)
> Debug-Information für $itemsMI36:
> 0[Array], 1[Array], 2[Array], 3[Array]

Schlecht ... da bedeutet, dass die Variable $itemsMI36 verloren geht. Das erklärt dann auch, weshalb neu gemischt wird.

Nochmal zur Sicherheit: (1) Den PHP-Code (oben) haben Sie direkt aus dem Fragebogen kopiert, es können also keine Schreibfehler im Fragebogen sein, die wir hier nicht sehen? (2) Der komplette PHP-Code steht in einer PHP-Code Box? (3) Auf der Fragebogen-Seite ist außer diesem PHP-Code keinerlei weiterer Inhalt?
by s136815 (550 points)
ja, der PHP-Code ist direkt aus dem Fragebogen kopiert und dieser steht in einer PHP-Box. Auf der Fragebogenseite ist vor der PHP-Box noch eine Überschrift als "einfacher Text" vorangestellt mit der Kennung MI95.
by SoSci Survey (306k points)
Wären Sie damit einverstanden, dass ich einen Administrator-Login für das Befragungsprojekt erstelle und mir das Problem direkt ansehe? Wenn ja: Wie heißt das Projekt bitte und auf welcher Seite des Fragebogens steht der Code?
by s136815 (550 points)
ja gerne. Das Projekt heißt "Kulturell-ästhetische Bildung in der Beruflichen Bildung", der Fragebogen heißt "[FbBk1] Fragebogen BK käBA2 und der Code steht auf Seite 30.
by SoSci Survey (306k points)
Ich habe in dem PHP-Code nochmal die debug()-Zeilen ergänzt. Wenn ich ab Seite 30 starte und teste, dann klappt es problemlos. Beim ersten Mal wird NULL/array angezeigt (mit der Fehlermeldung unten), nach dem Klick auf "Weiter" dann array/array und es wird nicht erneut gemischt.

Könnten Sie das bitte auch nochmal testen - bei Start ab Seite 30 - und mir mitteilen, ob Sie das soweit bestätigen können?
by s136815 (550 points)
sorry für die späte Rückmeldung.
Beim Testen ab Seite 30 erscheinen die zwei Debug-Info-Kästchen und auf Seite 1 unter den Items die Fehlermeldung. Nach dem Klick auf "weiter" erscheinen dann nur noch die Debug-Infos "Array...", genau so wie bei Ihnen, aber es wird weiter fröhlich gemischt - auf der ersten Seite und wenn ich alle vier Seiten durchteste, auch bei allen anderen Seiten.
by SoSci Survey (306k points)
Ich habe die genauen Liste des Arrays nochmal geprüft - und die passen. Aber jetzt kann ich auch nachvollziehen, was nicht passt.

Die Lösung ist ganz einfach. Sie haben in der Frage MI38 unter "Antwortoptionen" -> "Einstellungen" -> "Reihenfolge" eingetragen, dass die Items zufälig gemischt werden sollen. Wenn Sie das deaktivieren, dann bleibt auch die Reihenfolge innerhalb der Seite stabil.
by s136815 (550 points)
ja, so funktioniert es einwandfrei (Frage MI36). Vielen Dank für Ihren super Support und Ihre Geduld.

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

...