0 votes
in SoSci Survey (dt.) by s278251 (140 points)

Ich brauche bei folgendem Szenario Support;

Ich habe zwei mal 24 Texte (Sätze) aus denen ich, in Abhängigkeit von der Bedingung, auf einer Seite im Fragebogen, 10 zufällig ausgesuchte präsentieren möchte. Ich habe es bislang mit Urnen probiert, indem ich die Texte in eine Tabelle übertragen habe, um diese dann in die Datenbank zu laden. Das hat leider nicht funktioniert. Wenn ich den PHP-Code der unter "Datenbank für Inhalte" gestellt wurde, benutze, erscheint die Fehlermeldung: Für den Schlüssel p22 liegen in der Datenbank keine Daten vor.

Allerdings ist die erste Spalte der Tabelle die ich in die Datenbank geladen habe gefüllt mit den Schlüsseln p1-p24. Die Datei ist als .csv abgespeichert.
Eine weitere Fehlermeldung die angezeigt wird lautet;
Fehler im Fragebogen: Trying to access array offset on false
Zeile: 8

In Zeile 8 steht: < h2 >'.$inhalt[0].'< /h2 >

Bin ich hier auf dem richtigen Weg und wie kann ich diese beiden Probleme lösen?
Liebste Grüße

by SoSci Survey (327k points)
Ob Sie auf dem richtigen Weg sind, kann ich ohne Kenntnis Ihres PHP-Codes schwer sagen. Aber wenn die Datenbank behauptet, dass sie für p22 keinen Inhalt findet, dann hat womöglich schon beim Import etwas nicht funktioniert. Was wird denn angezeigt, wenn Sie die "Datenbank für Inhalte" unter "Spezialfunktionen" aufrufen?
by s278251 (140 points)
Mittlerweile habe ich das Schlüssel Problem lösen können, es lag tatsächlich daran, dass die Datei falsch abgespeichert wurde. Mit der Urne bin ich leider trotzdem nicht weitergekommen, weil mir immer nur ein Text angezeigt wurde, anstatt 10.
Hier ist der Code und die Debug Info:

code
urnDraw('beschreibung_positiv', 'IV01',);
$key = 'p'.value('IV01_01');  // Ein "a" vor die Zahl schreiben
$inhalt = dbGet($key);

html('
  <h2>'.$inhalt[0].'</h2>
');

debug
[Information]    Interview gestartet (neue Nummer 127)
[Information]    Der Fragebogen qnr2 im Projekt msclohr wird verwendet
[Verarbeitung]    Erstelle Seite 10 in Fragebogen qnr2
[Information]    Antwort auf IV01_01 = 18
[Information]    Folgende Kombination wurde aus Urne "beschreibung_positiv" gezogen und in "IV01" gespeichert: 18
[Information]    value("IV01_01") = 18

Ich habe nun einen Zufallsgenerator erstellt und für jeden Text auch eine Text Variable (VN01-VN24). Den Zufallsgenerator habe ich so eingestellt, dass er pro Runde 10 Zettel zieht. Allerdings erscheint im Fragebogen immer nur ein Text. Die Debug Infos sind folgende:

[Information]    Interview gestartet (neue Nummer 126)
[Information]    Der Fragebogen qnr2 im Projekt msclohr wird verwendet
[Verarbeitung]    Erstelle Seite 8 in Fragebogen qnr2
[Inhalt]    Erstelle Frage VN26
[Information]    Vom Zufallsgenerator VN26 wurden folgende Codes gezogen: 3, 9, 23, 18, 10, 6, 19, 8, 2, 12
[Information]    value("VN26_CP") = 10
[Information]    value("VN26_CP") = 10
[Information]    value("VN26_CP") = 10
[Information]    value("VN26_CP") = 10
[Information]    value("VN26_CP") = 10
[Information]    value("VN26_CP") = 10
[Information]    value("VN26_CP") = 10
[Information]    value("VN26_CP") = 10
[Information]    value("VN26_CP") = 10
[Information]    value("VN26_CP") = 10
[Inhalt]    Zeige Text VN10


Beide Varianten führen leider nicht zu meinem Ziel, 10 Texte aus der Auswahl zufällig auf einer Seite anzuzeigen.
Was kann ich tun?

1 Answer

0 votes
by SoSci Survey (327k points)

Mit der Urne bin ich leider trotzdem nicht weitergekommen, weil mir immer nur ein Text angezeigt wurde, anstatt 10.

Die Urnen-Funktion ist nur für wenige Anwendungsfälle die erste Wahl. Für die meisten Fälle ist die Weiterentwicklung, der Zufallsgenerator, deutlich besser geeignet. Allerdings scheinen Sie ohnehin bereits Urne und Zufallsgenerator zu verwenden.

Nehmen Sie das urnDraw() erstmal heraus, das brauchen Sie nicht.

Was Sie brauchen, sind die 10 Variablen von VN26 - im einfachsten Fall können Sie die Texte wie folgt anzeigen lassen:

for ($i=1; $i<=10; $i++) {
  $varID = id('VN26', $i);  // Findet den Variablennamen, z.B. VN26x1

  // Hier Ihr Code, nur das value() ist abgeändert
  $key = value($varID);
  $inhalt = dbGet($key);
  html('
    <h2>'.$inhalt[0].'</h2>
  ');
  
}
by s278251 (140 points)
Das hat funktioniert, tausend Dank!!
by s278251 (140 points)
Es hat sich noch eine weitere Frage ergeben:

Ich habe diese zwei Sets von 24 Sätzen, die einen positiv, die anderen negativ. Diese möchte ich auf zwei (erste Bedingung) oder drei (zweite Bedingung) aufeinanderfolgenden Seiten präsentieren. Dabei soll kein Satz doppelt erscheinen. Außerdem soll die Reihenfolge in der die Sätze aufgelistet werden, zufällig sein. Das heisst hier gibt es zwei Bedingungen innerhalb derer die Information darüber welche Zettel bereits gezogen wurden, über mehrere Seiten hinweg transportiert werden muss. Zur Zeit benutze ich Zufallsgeneratoren, im unteren Beispiel VN27 und VP26. Allerdings werden durch meinen Code die Sätze nicht durchmischt und doppeln sich auch auf aufeinanderfolgenden Seiten. Wahrscheinlich ,weil ich auf der nächsten Seite neue Zufallsgeneratoren erstellt habe, die wieder neu auf die Sätze zugreifen.
Zu Beginn des Fragebogens weise ich die Teilnehmenden mittels Zufallsgenerator(MG17) einer der fünf verschiedenen Gruppen zu. Zwei davon sind in der ersten Bedingung und drei davon sind in der zweiten Bedingung.
Hier ist mein bisheriger Code:

if (value('MG17') == 1) {
  text('MG20');
} if (value('MG17') == 2) {
  text('MG18');
} if (value('MG17') == 3) {
  text('MG20');
} if (value('MG17') == 4) {
  text('MG19');
} if (value('MG17') == 5) {
  text('MG18');
}



for ($i=1; $i<=5; $i++) {
  $varID = id('VN27', $i);  // Findet den Variablennamen, z.B. VN26x1

 $key = 'n'.value($varID);
  $inhalt = dbGet($key);
  html('
    <h2>'.$inhalt[0].'</h2>
  ');
  
}

for ($i=1; $i<=5; $i++) {
  $varID = id('VP26', $i);  // Findet den Variablennamen, z.B. VN26x1

 $key = 'p'.value($varID);
  $inhalt = dbGet($key);
  html('
    <h2>'.$inhalt[0].'</h2>
  ');
  
}

Wie sorge ich nun dafür, dass die Sätze sich auf nachfolgenden Seiten nicht doppeln, ihre Reihenfolge zufällig ist und die Sätze in normaler Schriftgröße angezeigt werden? Aktuell werden die Sätze noch größer dargestellt als der restliche Text.
Vielen Dank für Ihre Hilfe!
by SoSci Survey (327k points)
> Allerdings werden durch meinen Code die Sätze nicht durchmischt und doppeln sich auch auf aufeinanderfolgenden Seiten

Für das Mischen gibt es zwei Möglichkeiten. Entweder Sie verwenden shuffle() in Verbindung mit registerVariable() und isset(), oder Sie verwenden einen dritten Zufallsgenerator, der sich ausschließlich um die Reihenfolge kümmert. Im einfachsten Fall enthält dieser die 10 Variablen der beiden Zufallsgeneratoren, und zieht jede Runde alle 10 Codes.

> if (value('MG17') == 1)

Die Funktion Ihres ersten Code-Blocks kann ich nicht nachvollziehen. Die unteren beiden Blöcke sollten alle 10 gezogenen Texte - erst die positiven, dann die negativen (oder andersherum) einfach nur untereinander auf einer Seite anzeigen.
by s278251 (140 points)
>Für das Mischen gibt es zwei Möglichkeiten. Entweder Sie verwenden shuffle() in Verbindung mit registerVariable() und isset(), oder Sie verwenden einen dritten Zufallsgenerator, der sich ausschließlich um die Reihenfolge kümmert. Im einfachsten Fall enthält dieser die 10 Variablen der beiden Zufallsgeneratoren, und zieht jede Runde alle 10 Codes.

Wie kann ich dafür sorgen, dass die gezogenen Zettel aus der Datenbank nicht nochmal auf einer darauffolgenden Seite gezogen werden?

Wie würde ein Code für diesen dritten Zufallsgenerator aussehen?

>Die Funktion Ihres ersten Code-Blocks kann ich nicht nachvollziehen. Die unteren beiden Blöcke sollten alle 10 gezogenen Texte - erst die positiven, dann die negativen (oder andersherum) einfach nur untereinander auf einer Seite anzeigen.

Dies ist auch der Fall, allerdings möchte ich diese in einer zufälligen Reihenfolge angezeigt werden (gemischt positiv und negativ), und nicht auf nachfolgenden Seiten für den selben Probanden nochmal angezeigt werden. Wie würde ein Code hierfür aussehen?
by SoSci Survey (327k points)
> Wie kann ich dafür sorgen, dass die gezogenen Zettel aus der Datenbank nicht nochmal auf einer darauffolgenden Seite gezogen werden?

Wenn man dem Zufallsgenerator sagt, dass man pro Interview mehrere Codes ziehen möchte, achtet er darauf, dass kein Code doppelt gezogen wird.

> Wie würde ein Code für diesen dritten Zufallsgenerator aussehen?

Das wären einfach die Zahlen 1 bis 10, und Sie legen fest, dass Sie 10 Codes pro Interview ziehen möchten. Wie das dann in eine Reihenfolge umgesetzt wird, sollten wir in einer neuen Frage klären, wo mehr Platz ist, und wo Sie auch den schon vorhandenen Code posten.

Ich würde übrigens empfehlen, dass Sie im Zufallsgenerator gleich die kompletten Kennungen der Datenbank-Einträge ablegen (mit führendem "p" oder "n"), das macht das Ausspielen deutlich einfacher.

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

...