0 votes
in SoSci Survey (dt.) by s206623 (160 points)
edited by s206623

Sehr geehrte Damen und Herren,

ich habe ein Problem mit meinem PHP Code für die Randomisierung meiner Bilder.
Ich habe alles entsprechend der Anleitung gemacht (inklusive dem Anlegen einer IV um nach dem Randomisieren das Ergebnis festzuhalten, dennoch wird mir eine Fehlermeldung angezeigt:
"Bitte beachten Sie, dass die von random() oder shuffle() erzeugten Zufallswerte nicht automatisch im Datensatz gespeichert werden. Zum Speichern können Sie ggf. die Funktion put() verwenden." (obwohl ich dies ja bereits getan habe).
Mein Code sieht nämlich folgendermaßen aus:

// Liste der Bilder definieren

$bilder = [
  1 => 'AIF1.png',
  2 => 'AIF2.png',
  3 => 'AIF3.png',
  4 => 'AIF4.png',
  5 => 'AIF5.png',
  6 => 'AIF6.png',
  7 => 'AIF7.png',
  8 => 'AIF8.png',
  9 => 'AIF9.png',
  10 => 'AIF10.png',
  11 => 'AIF11.png',
  12 => 'AIF12.png',
  13 => 'AIF13.png',
  14 => 'AIF14.png',
  15 => 'AIF15.png',
  16 => 'AIF16.png',
  17 => 'AIF17.png',
  18 => 'AIF18.png',
  19 => 'AIF19.png',
  20 => 'AIF20.png',
  21 => 'AIF21.png',
  22 => 'AIF22.png',
  23 => 'AIF23.png',
  24 => 'AIF24.png',
  25 => 'AIF25.png',
  26 => 'AIF26.png',
  27 => 'AIF27.png',
  28 => 'AIF28.png',
  29 => 'AIF29.png',
  30 => 'AIF30.png',
  31 => 'AIF31.png',
  32 => 'AIF32.png',
  33 => 'AIF33.png',
  34 => 'AIF34.png',
  35 => 'AIF35.png',
  36 => 'AIF36.png',
  37 => 'AIF37.png',
  38 => 'AIF38.png',
  39 => 'AIF39.png',
  40 => 'AIF40.png',
  41 => 'AIF41.png',
  42 => 'AIF42.png',
  43 => 'AIF43.png',
  44 => 'AIF44.png',
  45 => 'AIF45.png',
  46 => 'AIF46.png',
  47 => 'AIF47.png',
  48 => 'AIF48.png',
  49 => 'AIF49.png',
  50 => 'AIF50.png',
  51 => 'AIF50.png'
];

if (!isset($stimuli)) {

$stimuli = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];

shuffle($stimuli);

putList('FF03', $stimuli);

registerVariable($stimuli);
}
 
// In jedem Durchlauf einen anderen Eintrag aus $stimuli verwenden

$bildID = loopPage($stimuli);

$dateiname = $bilder[$bildID];
html('
    <div style="text-align: center; margin: 2em 0">
        <img src="" alt="" style="max-width: 100%">
    </div>
');

Zum besseren Verständnis: mein Ziel ist es diese 51 Bilder (und später 51 weitere Bilder auf der nächsten Seite) randomisiert zu präsentieren und zu jedem Bild die gleiche Frage beantworten zu lassen.

Über Ihre Rückmeldung und Hilfe wäre ich sehr dankbar.

Liebe Grüße

1 Answer

0 votes
by SoSci Survey (328k points)

dennoch wird mir eine Fehlermeldung angezeigt:
"Bitte beachten Sie, dass die von random() oder shuffle() erzeugten Zufallswerte nicht automatisch im Datensatz gespeichert werden.

Diese Information ist auch korrekt. Nicht automatisch. Die Hinweis-Funktion in SoSci Survey ist nicht so schlau, dass sie anhand des Kontextes erkennt, dass Sie putList() verwenden, um die Reihenfolge zu speichern. Daher erscheint der Hinweis weiterhin.

Sofern alles wunschgemäß funktioniert, müssen Sie also nichts ändern.

Ansonsten würde ich eine andere Anleitung empfehlen: Fragen rotieren - nur dass Sie statt der Frage-Kennungen die Bildnamen im Zufallsgenerator eintragen. Dies scheint mir wesentlich einfacher als die Lösung mit shuffle() und einer internen Variable.

by s206623 (160 points)
Danke für  die schnelle Antwort. Ich habe es jetzt wie geraten mit Fragen rotieren umgesetzt, indem ich die Bilder durch ihren HTML-Code im Zufallsgenerator angelegt habe. Die Bilder werden somit an sich auch angezeigt, aber es werden sämtliche Fehlercodes im Hintergrund gemeldet (Die Frage mit der Kennung , gibt es im Projekt nicht. usw.). Auch die Implementierung der Frage, die zu jedem Bild angezeigt wird funktioniert nicht. Dabei habe ich mich auch ganz normal an den PHP-Code der Infoseite gehalten (mit entsprechenden Anpassungen der Variablennamen).

Können Sie mir da eventuell nochmal weiterhelfen?
by SoSci Survey (328k points)
> Auch die Implementierung der Frage, die zu jedem Bild angezeigt wird funktioniert nicht.

Es kommt ein wenig darauf an, was das für eine Frage ist. Wenn es z.B. in Item in einer Skalenfrage ist, dann sieht die optimale Lösung anders aus als wenn es jeweils eine eigene Frage ist.

Und wenn Sie 50 Stimuli abfragen (erwarten sie wirklich, dass das irgend jemand konzentriert bearbeiten kann?), sollten Sie auch rechtzeitig überlegen, ob Sie die Daten "nebeneinander" (wide-format) wollen oder nicht gleich per Multi-Level-Struktur im long-format (siehe https://www.soscisurvey.de/help/doku.php/de:create:multilevel).

Die einfachste aber zugleich auch am wenigsten elegante Lösung: 50 Kopien der Frage anlegen und das Bild direkt in der "Erklärung" der Frage einbauen.

Die m.E. eleganteste Lösung: Eine Multi-Level-Struktur, welche die Daten gleich "untereinander" im Datensatz speichert.
by s206623 (160 points)
Nochmals vielen Dank! Es soll unter jedem Bild eine Frage vom "Polaritätentyp" beantwortet werden (ja die 51, insgesamt dann sogar 102 Bilder sollen geratet werden --> ich implementiere das Projekt für jemand anderes).
Da es jetzt mit den Bildern im Zufallsgenerator gar nicht mehr funktioniert, habe ich ihren Tipp umgesetzt und die Frage 50 Mal kopiert und das Bild in die Beschreibung eingefügt. Um dennoch eine randomisierte Reihenfolge dieser Bilder zu generieren, habe ich den Zufallsgenerator dazu genutzt, die Fragen zu randomisieren. Dies ist jedoch nicht möglich/funktioniert nicht.

Gibt es da noch eine andere einfach Lösung diese zu rotieren. Oder können Sie mir, jetzt wo sie den Fragentyp wissen, noch einen anderen Tipp geben?

Nochmals vielen Dank!
by SoSci Survey (328k points)
> Dies ist jedoch nicht möglich/funktioniert nicht.

Warum nicht?

> eine Frage vom "Polaritätentyp"

Ein Item daraus oder mehrere?
by s206623 (160 points)
Das weiß ich leider nicht, die Fragen werden nicht eingeblendet und das Experiment springt sofort zum Ende.


Das ist eine Frage mit mehreren Items.
by SoSci Survey (328k points)
>  die Fragen werden nicht eingeblendet und das Experiment springt sofort zum Ende

Dann müssten sie (am besten in einer neuen Frage, der Übersicht halber) bitte einmal den verwendeten PHP-Code und die Debug-Information der Seite posten. Das sollte sich schnell aufklären lassne.

> Das ist eine Frage mit mehreren Items.

Die Musterlösung wäre m.E. dann nach wie vor die Multi-Level-Struktur. Die 50 Kopien der Frage wären die Ausweichlösung, aber das werden ziemlich viele Variablen für die Auswertung, und mit 50 Kopien zu jonglieren ist schon fehleranfällig. Man stelle sich vor, am Ende muss eine Beschriftung geändert werden - das müsste man dann 50-mal machen.
by s206623 (160 points)
Bezüglich der einfacheren Variante der Kopien:
1) Meine Debug-Infos lauten:
[Information]    Interview gestartet (neue Nummer 63)
[Information]    Der Fragebogen base im Projekt test370585 wird verwendet
[Verarbeitung]    Erstelle Seite 6 in Fragebogen base
[Inhalt]    Erstelle Frage FF04
[Information]    Vom Zufallsgenerator FF04 wurden folgende Codes gezogen: 13, 25, 41, 36, 48, 40, 45, 20, 7, 17, 27, 47, 24, 4, 44, 6, 2, 8, 3, 5, 14, 35, 38, 21, 43, 23, 18, 16, 51, 26, 34, 11, 12, 15, 30, 22, 42, 19, 49, 31, 37, 28, 29, 32, 33, 50, 1, 46, 9, 10, 39
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 7
[Verarbeitung]    Erstelle Seite 7 in Fragebogen base
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr.
[Verarbeitung]    Erstelle die letzte Seite des Fragebogens

Ich habe den Zufallsgenerator auf der Seite eingefügt, da dieser ja die einzelnen Fragen enthält, diese wiederum in ihrer Beschreibung die jeweiligen Bilder enthalten und diese anzeigen müssten, wenn diese vom ZG gezogen werden.

Bezüglich der Multi-Level-Modell:
Ich habe mir die Seite angeschaut, aber mir wird leider nicht richtig klar, wie der Versuchsaufbau mittels dieser Methode umgesetzt werden soll.
Wäre das dann bezogen auf das Beispiel 1 umzusetzen ("Einfache Lösung)?. Der PHP-Code ist ja auf ein sehr spezifisches Beispiel bezogen. Und uich möchte ja alle Bilder bewerten lassen und nicht nur ausgewählte o.Ä. (wie im Beispiel.
Danke nochmal vielmals für die Hilfe!
by SoSci Survey (328k points)
> [Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 7

Soweit so gut ... welchen PHP-Code verwenden Sie denn auf Seite 7, um die Fragen anzuzeigen?  Falls Sie keinen verwenden, wäre das hier ein möglicher:

$fragen = valueList('FF04');
$frage = loopPage(array_values($fragen));
question($frage);

> Und uich möchte ja alle Bilder bewerten lassen und nicht nur ausgewählte o.Ä. (wie im Beispiel.

Sie können im Zufallsgenerator ja einstellen, dass dort alle Werte gezogen werden. Das multiLevelDown() ersetzt mehr oder weniger das loopPage(). Es ruft einen anderen Fragebogen in jeder Runde mit einer anderen Information (z.B. mit einem anderen Bildnamen) auf.
by s206623 (160 points)
Vielen Dank für den PHP-Code, ich habe genau diesen nun auf Seite 6 eingesetzt (auf der Seite des Zufallsgenerators). Doch leider funktioniert es immer noch nicht.
Folgende Fehlemerldung wird angezeigt: "Im Befehl question() wurde keine Frage-Kennung angegeben." --> Wenn der PHP-Code vor dem ZG platziert wird. Das gleiche passiert, wenn ich diesen auf der nächsten Seite platziere.

Wird er danach angegeben gibt es folgende Fehlermeldung:
"Die Frage mit der Kennung 34 gibt es im Projekt nicht." Das wird dann für jede Frage angezeigt.

Wissen Sie eventuell woran das liegen könnte?

Genau, im ZG habe ich es so eingestellt, dass 51 Zettel gezogen werden.

Vielen Dank!
by SoSci Survey (328k points)
Bitte platzieren Sie oben auf der Seite den Zufallsgenerator und darunter den PHP-Code.

Berichten Sie außerdem bitte, was nun in der Debug-Information angezeigt wird.
by s206623 (160 points)
Genau, andersrum habe ich es auch bereits versucht:

Die zugehörigen Debug-Informationen lauten:

[Information]    Interview gestartet (neue Nummer 87)
[Information]    Der Fragebogen base im Projekt test370585 wird verwendet
[Verarbeitung]    Erstelle Seite 6 in Fragebogen base
[Inhalt]    Erstelle Frage FF04
[Information]    Vom Zufallsgenerator FF04 wurden folgende Codes gezogen: 16, 28, 13, 26, 17, 29, 35, 31, 1, 5, 24, 11, 7, 2, 44, 20, 41, 6, 32, 46, 39, 18, 48, 40, 8, 51, 43, 37, 45, 23, 15, 10, 4, 12, 33, 3, 49, 30, 19, 22, 9, 42, 21, 36, 38, 27, 14, 50, 34, 25, 47
[Information]    loopPage() wiederholt die Seite 6 nun 51 mal, beginnend mit dem Wert 16

Es wird folgende Fehlermeldung angezeigt:
Fehler im Fragebogen (Seite 6)
"Die Frage mit der Kennung 17 gibt es im Projekt nicht." Dies wird für jede Frage angezeigt.

Danke für die schnelle Rückmeldung!
by SoSci Survey (328k points)
Das sieht schon sehr gut aus.

Ersetzen Sie bitte diese Zeile ...

$fragen = valueList('FF04');

noch wie folgt:

$fragen = valueList('FF04', NULL, 'label');
by s206623 (160 points)
Vielen Dank, jetzt hat es funktioniert!
by s206623 (160 points)
Entschuldigung, ich muss mich jetzt doch nochmal melden.
Und zwar geht es um die zufällige Zuweisung zu dem ersten Bilderblock durch Zufallsgenrator 1 (ZG01) oder zum zweiten Bilderblock (weitere 51 Bilder) durch Zufallsgenrator 2 (ZG02). Beide Blöcke habe ich auf zwei unterschiedlichen Seiten positioniert mit dem entsprechenden PHP-Code.

Zuvor habe ich einen weiteren Zufallsgenrator mit folgendem PHP-Code implementiert
1) Zufallsgenerator (ZG04) mit 2 Optionen (nur 1 Zettel ziehen)
2) PHP Code mit folgendem Inhalt:
if (value('ZG04') == 1) {
  question('ZG01');
} elseif (value('ZG04') == 2) {
  question('ZG02');
}

Dennoch werden immer beide Blöcke abgespielt und nicht nur der eine ausgeloste Block. Woran könnte das liegen?

Vielen Dank und einen schönen Abend!
by SoSci Survey (328k points)
Haben Sie die Fragen/Elemente ZG01 und ZG02 vielleicht zusätzlich zum PHP-Code noch auf die Seite gezogen? Was sagt denn die Debug-Information?
by s206623 (160 points)
Nein, die Elemente habe ich nicht noch zusätzlich auf der Seite platziert. Nur den ZG und den entsprechenden genannten PHP-Code:

Die Debug-Infos sehen wie folgt aus:
[Information]    Interview gestartet (neue Nummer 111)
[Information]    Der Fragebogen base im Projekt test370585 wird verwendet
[Verarbeitung]    Erstelle Seite 3 in Fragebogen base
[Inhalt]    Erstelle Frage ZG04
[Information]    Vom Zufallsgenerator ZG04 wurden folgende Codes gezogen: 2
[Information]    value("ZG04") = 2
[Information]    value("ZG04") = 2
[Inhalt]    Erstelle Frage ZG02
[Information]    Vom Zufallsgenerator ZG02 wurden folgende Codes gezogen: 37, 12, 49, 33, 3, 19, 40, 5, 45, 17, 23, 21, 48, 38, 43, 29, 47, 10, 11, 2, 20, 8, 30, 6, 9, 31, 25, 16, 39, 50, 44, 15, 34, 46, 42, 35, 14, 13, 24, 4, 27, 22, 1, 36, 32, 7, 26, 41, 51, 18, 28
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 4
[Verarbeitung]    Erstelle Seite 4 in Fragebogen base
[Inhalt]    Erstelle Frage ZG01
[Information]    Vom Zufallsgenerator ZG01 wurden folgende Codes gezogen: 28, 5, 3, 25, 51, 26, 38, 18, 23, 32, 36, 15, 40, 24, 30, 6, 2, 46, 22, 50, 35, 1, 44, 37, 13, 21, 49, 16, 34, 41, 17, 12, 31, 8, 29, 10, 42, 19, 14, 20, 33, 9, 45, 47, 7, 48, 39, 43, 27, 11, 4
[Information]    loopPage() wiederholt die Seite 4 nun 51 mal, beginnend mit dem Wert FF36
[Inhalt]    Erstelle Frage FF36

Ich hoffe das hilft
by SoSci Survey (328k points)
Es scheint so, dass ZG01 auf Seite 4 im Fragebogen platziert wurde - oder dass dort nochmal PHP-Code steht. Was haben Sie denn auf Seite 4?

Generell scheint es mir sinnvoll, dass Sie den Code mit loopPage() auch direkt auf Seite 3 platzieren - dort können Sie ja durch den IF-Filter auch gleich den richtigen Zufallsgenerator abfragen.
by s206623 (160 points)
Hallo!

genau,

ich habe es bisher so gemacht wie wir es oben besprochen haben.
Auf Seite 4 habe ich den ersten Zufallsgenerator (ZG01) mit dem entsprechenden PHP-Code gesetzt.
Auf Seite 5 habe ich den zweiten Zufallsgenerator (ZG02) mit dem entsprechenden PHP-Code gesetzt.

Ich habe dann ja insgesamt 2 PHP-Codes zu den entsprechen Zufallsgeneratoren.
Sollen die dann beide dort auf Seite 3 platziert werden? und soll der If-Filter davor einfach beibehalten werden (ohne die ZG´s auf dieser Seite zu platzieren).
Das habe ich nämlich auch bereits versucht und das funktioniert nicht.

Danke!
by SoSci Survey (328k points)
Okay, aber es scheint so, dass Sie mittels eines dritten Zufallsgenerators ZG04 entscheiden, welcher der beiden Zufallsgeneratoren (als erstes? als einziger?) verwendet wird?

> Ich habe dann ja insgesamt 2 PHP-Codes zu den entsprechen Zufallsgeneratoren.

Wie sieht denn der PHP-Code unter dem ersten Zufallsgenerator aus? Denn im Moment scheint dieser keine Ausgabe zu erzeugen ... sodass SoSci Survey direkt zur nächsten Seite weiter springt.
by s206623 (160 points)
Ja, genau der Zufallsgenerator auf Seite 3 (ZG04) soll auslosen, ob man zum ersten Bilderblock und ZG01 zugeordnet wird ODER zu dem zweiten Bilderblock und ZG02. Das heißt man soll nur einem dieser beiden Blocks/Zufallsgeneratoren zugeordnet werden und diese Bilder bewerten.

Bisher habe ich es so gemacht:

Auf Seite 3:
ZG04 platziert und folgenden PHP-Code:
if (value('ZG04') == 1) {
  question('ZG01');
} elseif (value('ZG04') == 2) {
  question('ZG02');
}

Auf Seite 4:
ZG01 platziert und folgenden PHP-Code:
$fragen = valueList('ZG01', NULL, 'label');
$frage = loopPage(array_values($fragen));
question($frage);

Auf Seite 5
ZG02 platziert und folgenden PHP-Code:
$zeigen = valueList('ZG02', NULL, 'label');
$zeige = loopPage(array_values($zeigen));
question($zeige);

Mir wird aber auch gerade klar, dass wen beispielsweise ZG01 ausgelost wird, dann ja trotzdem später einfach aufgrund der Seitenreihenfolge die Bilder folgen, die in ZG02 gespeichert sind.

Deswegen ist dort ein Denkfehler, gibt es da eine einfachere Möglichkeit?
by SoSci Survey (328k points)
> Das heißt man soll nur einem dieser beiden Blocks/Zufallsgeneratoren zugeordnet werden und diese Bilder bewerten.

Dann kommt alles auf eine Seite. Und den IF-Filter oben würde ich dann gleich doppelt verwenden:

if (value('ZG04') == 1) {
  question('ZG01');
  $fragen = valueList('ZG01', NULL, 'label');
} elseif (value('ZG04') == 2) {
  question('ZG02');
  $fragen = valueList('ZG02', NULL, 'label');
}

Jetzt ist die korrekte Abfolge in der Variable $fragen - sehen Sie mal nach, ob das der Fall ist:

debug($fragen);

Und der Code von Seite 4 kommt auf Seite 3 unter obigen Code:

$frage = loopPage(array_values($fragen));
question($frage);

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

...