0 votes
in SoSci Survey (dt.) by s156483 (125 points)
edited by s091203

Hallo zusammen,

ich arbeite an einem Fragebogen, bei dem ich eine Umfrage zu 3 verschiedenen Produkten mache. Jeder Proband soll dabei die Fragen zu einem der Produkte beantworten, die er aktuell besitzt. Ich brauche also eine Randomisierung aus einer variablen Urne (theoretisch kann der Proband ja 1 von 3, 2 von 3 oder alle drei Produkte haben, soll aber nur zu einem den gesamten Fragebogen beantworten).

Auf Seite 1 frage ich ab, welche Produkte der Kunde besitzt. Davon möchte ich dann zu einem weitere Fragen stellen. Dazu möchte ich von den Seiten 2-4 eine (zufällig aus den Antworten des Probanden gezogene) Seite anzeigen.

Ab Seite 5 werden die weiteren Seiten dann immer gleich durchlaufen, allerdings sollen einzelne Textboxen produktspezifisch eingeblendet werden. Das funktioniert mit der Filterfunktion in den Frageeinstellungen, allerdings kann ich diese nicht in PHP nachbilden. Die Filterfunktion kann aber leider nicht filtern und randomisieren.

Aktuell versuche ich, mit diesem Code, von der Startseite zu einer produktspezifischen Seite zu springen und im weiteren Verlauf nur gezielt einzelne Texte einzublenden. Das funktioniert leider nicht wie geplant. Gibt es PHP-Befehle, um Seiten und Texte im weiteren Fragebogenverlauf komplett auszublenden? Und kann ich eine PHP-Funktion quasi beim Blättern zur nächsten Seite ausführen, oder brauche ich in meinem oben beschriebenen Beispiel noch eine neue Seite 2, die die Randomisierung macht und danach zu den Produktseiten weiterleitet?

Vielen Dank

$prod = random_items(value('A205'),1);
if($prod == 1){
goToPage('TPL');
question('A011');
} elseif($prod == 2){
question('A012');
goToPage('MTPL');
} elseif($prod == 3){
question('A013');
goToPage('HOME');
}

1 Answer

0 votes
by SoSci Survey (330k points)
selected by s156483
 
Best answer

Aktuell versuche ich, mit diesem Code, von der Startseite zu einer produktspezifischen Seite zu springen

Lassen Sie das mit dem Springen ... das macht es nur unnötig kompliziert. Blenden Sie einfach abhängig von der Zufallsziehung die passende(n) Frage(n) ein.

Und überlegen Sie sich, ob SoSci Survey die Ziehung so ausgleichen soll, dass von allen produkten nach Möglichkeit gleich viele Leute befragt werden. Das ist mit einem Zufallsgenerator möglich:

show('RG01', ['filter' => getItems('A205', 'is', 2)]);

Aber dann bekommen Leute von wenig genutzten Produkten fast zwangsläufig diese Produkte zugeteilt. Das kann unerwünscht sein. Wenn Sie das nicht möchten und lieber ungleich große Gruppen haben, dann stellen Sie im Zufallsgenerator (hier im Beispiel 'RG01') eine zufällig Ziehung statt der Gleichverteilung ein.

Ach ja, hier noch der Filter:

$prod = value('RG01');
if ($prod == 1) {
  question('A011');
} elseif($prod == 2) {
  question('A012');
} elseif($prod == 3) {
  question('A013');
}

Das können Sie auf der nächsten Seite wiederholen, um eine zweite Frage abhängig vom Produkt anzuzeigen.

by s156483 (125 points)
Vielen Dank für die Erklärung. Ich habe meinen Fragebogen gemäß ihrem Tipp so umgestellt, dass ich nicht mehr springen muss. Stattdessen soll aus den auf Seite 1 angegebenen Produkten auf Seite 2 eines ausgewählt und dazu eine Reihe von Fragen angezeigt werden.

Mein Code auf Seite zwei (wo auch der Random Generator platziert ist), sieht jetzt wie folgt aus:

show('A206', ['filter' => getItems('A205', 'is', 2)]);

$prod = value('A206');
if ($prod == 1) {
// MTPL
  question('A011');
  question('A301');
  question('A302');
  question('A303');
  question('A304');
  question('A305');
} elseif($prod == 2) {
// TPL
  question('A012');
  question('A401');
  question('A402');
  question('A403');
  question('A404');
  question('A405');
} elseif($prod == 3) {
// HOME
  question('A013');
  question('A501');
  question('A502');
  question('A503');
  question('A504');
  question('A505');
}

Dabei ist 'A205' die Multiple-Choice Frage, aus deren Antworten der Random Generator ('A206') die Ziehung vornehmen soll. Die Ziehung soll im Ergebnis gleichgroße Klassen bekommen. Aktuell zieht der Random Generator immer Produkt 1, selbst wenn ich das gar nicht unter A205 als Antwort genutzt habe. Woran liegt das? Ehrlich gesagt kann ich nicht nachvollziehen, was in dieser Codezeile passiert:
show('A206', ['filter' => getItems('A205', 'is', 2)]);

Müsste ich das Ergebnis von show() nicht in irgendeiner Variablen speichern? Und gehe ich richtig, dass diese Zeile eine Ziehung aus A206 mit einem Filter basierend auf A205 macht? Oder gibt diese Zeile immer das Element mit dem Index 2 aus A205 zurück?
by SoSci Survey (330k points)
> Aktuell zieht der Random Generator immer Produkt 1, selbst wenn ich das gar nicht unter A205 als Antwort genutzt habe. Woran liegt das?

Haben Sie drei Zettel in den Zufallsgenerator gelegt?

Arbeiten Sie auf www.soscisurvey.de oder auf einen Hochschul-Server?

> Ehrlich gesagt kann ich nicht nachvollziehen, was in dieser Codezeile passiert

Die Funktion getItems() - s. Anleitung - sucht die ausgewähllten Optionen aus Frage A205 heraus. Ob da richtig funktioniert, können Sie mit folgenden Zeilen testen:

$items = getItems('A205', 'is', 2);
debug($items);

Mit den eckigen Klammern wird dann ein Array (s. Anleitung) definiert, welches nur den einen Eintrag "filter" hat und als Wert für diesen Eintrag die Liste der ausgewählten Optionen.

Dieses Arrray wird als Parameter an die Funktion show() übergeben. show() ist im Prinzip dasselbe wie question(), nur dass die Funktion zusätzliche Optionen erlaubt. In dem Fall zum Beispiel den Filter für den Zufallsgenerator.

Posten Sie gerne auch die Debug-Information von der Seite mit dem PHP-Code: https://www.soscisurvey.de/help/doku.php/de:create:debugging
by s156483 (125 points)
Ich bin auf unserem Hochschulserver, die Domain lautet survey.unibw.de. Kann das zu Fehlern führen?

Laut den Debuginformationen funktionier getItems. debug($items) gibt die erhofften Werte zurück. Allerdings scheint der Filter nicht im Random Generator anzukommen.

Um besser zu debuggen habe ich den Code wie folgt umgestellt:

$items = getItems('A205', 'is', 2);
debug($items);
show('A206', ['filter' => $items]);

$prod = value('A206');
debug($prod);

So sehe ich sowohl die Antworten in A205 als auch die Zufallszahl, die A206 errechnet. Die Variable $prod ist dabei nicht auf $items beschränkt.
by SoSci Survey (330k points)
> Ich bin auf unserem Hochschulserver, die Domain lautet survey.unibw.de. Kann das zu Fehlern führen?

Zu Fehlern nicht, aber die Funktion zum Filtern des Zufallsgenerators haben wir erst vor wenigen Monaten implementiert.

Wenn Sie diese nutzen möchten (was in Ihrem Design durchaus hilfreich ist), dann müssten Sie entweder den IT-Verantwortlichen Ihres Servers um ein Update bitten (dafür soll er/sie eine kurze Mail an info@soscisurvey.de schreiben) oder Ihr Projekt auf www.soscisurvey.de umziehen.
by s156483 (125 points)
Vielen Dank, unser Uniserver läuft in der Tat auf einer älteren Programmversion. Habe mein Projekt umgezogen und Ihre Lösung funktioniert prima!

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

...