0 votes
in SoSci Survey (dt.) by s086520 (110 points)
edited by SoSci Survey

Hallo,

eigentlich wollte ich (wie einige andere auch) einfach die Zufallsauswahl für meine vier verschiedenen Fragebögen nutzen. Diese wurde ja nun abgeschaltet. Deshalb wollte ich es nun mit der Randomisierung versuchen.

Dazu bin ich wie in der Beschreibung vorgegangen, hatte nur dann Probleme den PHP-Code aufzustellen. Kurz zur Erklärung meines Fragebogens: Die Fragen und Bausteine sind an sich in allen 4 Fragebögen gleich, sie unterscheiden sich nur in einer Bilddatei. Und ich möchte eben eine der vier Bilddateien zufällig bei den Teilnehmern anzeigen lassen.
Dazu habe ich zunächst einmal die Zufallsgenerator-Frage erstellt und sie 'Data Security Version' genannt. Die von mir festgelegte Kennung ist 'DV' und die von SosciSurvey selbst generierte 'DV01'. Dann habe ich innerhalb dieser Frage folgende Zettel festgelegt:

1 = Hohes_Rating_Geringer_DS_v2-min.jpg
2 = Hohes_Rating_Voller_DS_v2-min.jpg
3 = Niedriges_Rating_Geringer_DS_v2-min.jpg
4 = Niedriges_Rating_Voller_DS_v2-min.jpg

Anschließend habe ich auf der Seite im Fragebogen, wo das Bild angezeigt werden soll erst die Zufallsgenerator-Frage eingefügt und danach diesen PHP-Code:

$code = value('DV01');
if($code == 1); {
} else {
$bilder = array(
2 => 'Hohes_Rating_Voller_DS_v2-min.jpg',
3 => 'Niedriges_Rating_Geringer_DS_v2-min.jpg',
4 => 'Niedriges_Rating_Voller_DS_v2-min.jpg'
);
$bild - $bilder[$code];
html('
    <div style="margin: 3em; text-align: center">
      <img src="'.$bild.'" alt="" />
    </div>
  ');
}

Leider habe ich dann folgende Fehlermeldung angezeigt bekommen:

Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Befehl oder String (Text) nicht abgeschlossen
Hinter einem Befehl wie z.B. question() steht kein Strichpunkt oder
ein String (Text in Anführungszeichen) ist nicht abgeschlossen oder
im String selbst kommt ein Anführungszeichen vor, z.B. html('Mach's besser!'); – in diesem Fall stellen Sie dem Anführungszeichen einen Backslash () voran.
Möglicherweise stimmen die öffnenenden und schließenden geschweiften Klammern für Anweisungsblöcke auch nicht überein.

PHP-Code
001 namespace s2survey\questionnaire\environment;
002
003 $code = value('DV01');
004 if($code == 1); {
005 } else {
006 $bilder = array(
007 2 => 'Hohes_Rating_Voller_DS_v2-min.jpg',
008 3 => 'Niedriges_Rating_Geringer_DS_v2-min.jpg',

Ich bin mir auch nicht sicher, ob das überhaupt der richtige Code ist, weil ich ja keine Kontrollgruppe habe, die kein Bild angezeigt bekommt. Nur leider habe ich sonst in den Anleitungen keinen passenderen Code gefunden.

Ich hoffe, Sie können mir bei der Erstellung des PHP-Codes weiterhelfen. Ich habe leider wirklich absolut keine Ahnung vom Progammieren und verstehe deswegen echt nichts davon...

Vielen Dank im Voraus!

1 Answer

0 votes
by SoSci Survey (305k points)

Es ist nur eine Kleinigkeit: Der Strichpunkt zwischen IF und geschweifter Klammer muss weg:

if($code == 1) {

Außerdem müsste hier ein Gleichheitszeichen statt dem Minus stehen:

$bild = $bilder[$code];

Und wenn Sie sich das Leben einfacher machen möchten, ändern sie den Code wie folgt:

if (value('DV01') != 1) {
  html('
    <div style="margin: 3em; text-align: center">
      <img src="'.value('DV01', 'label').'" alt="" />
    </div>
  ');
}

Denn den Dateinamen haben Sie ja bereits im Zufallsgenerator stehen.

by s086520 (110 points)
Jetzt hat es funktioniert! Vielen Dank für die schnelle Hilfe!

Es gibt nur noch ein Problem:

Als ich die Bilddatei vorher manuell in die verschiedenen Fragebögen gezogen habe, wurden Sie in der richtige Größe und mittig angezeigt. Wenn ich dies aber nun über die Randomisierung mache, wird die Bilddatei überdimensional groß und rechtsbündig im Fragebogen angezeigt... Kann ich das noch irgendwo einstellen oder wie muss ich hier nun vorgehen?
by SoSci Survey (305k points)
Wenn das Bild überdimensional groß ist, haben Sie es vor dem Hochladen evtl. nicht web-tauglich vorbereitet: https://www.soscisurvey.de/help/doku.php/de:create:images - das sollten Sie auf jeden Fall nochmal genauer kontrollieren.

Ansonsten können Sie das Bild natürlich auch jetzt im Browser skalieren lassen:

<img src="'.value('DV01', 'label').'" alt="" style="max-width: 100%;" />

Wenn das nicht klappt, posten Sie gerne einen Pretest-Link direkt (!) zur betroffenen Seite.
by s086520 (110 points)
Also ich habe mir eben die Infos unter dem Link durchgelesen und denke mein Bild ist webtauglich bearbeitet.

Und den Code, den Sie eingefügt haben, sollte ich als HTML-Baustein unter den PHP-Code setzen beim Fragebogen zusammenstellen oder? Das habe ich getan, aber dann wurde mir leider gar kein Bild mehr angezeigt beim Pretest...

Hier einmal der Pretest-Link zu der betroffenen Seite:

https://www.soscisurvey.de/Masterthesis_Hauptfragebogen/index.php?i=S9SGGOOBREOG&rnd=NJQM

Und so sah es vorher aus, als ich das Bild als Baustein direkt eingefügt habe:

https://www.soscisurvey.de/Masterthesis_Hauptfragebogen/index.php?i=ALAIW29YM00I&rnd=FJAO
by SoSci Survey (305k points)
Die Vorher-Version sieht (jetzt zumindest) gut aus.

Aber eigentlich war meine Empfehlung, dass Sie nur die <img>-Zeile in ihrem vorherigen Code austauchen. Gesamt also:

if (value('DV01') != 1) {
  html('
    <div style="margin: 3em; text-align: center">
      <img src="'.value('DV01', 'label').'" alt="" style="max-width: 100%;" />
    </div>
  ');
}

Und wenn Sie gerne etwas mehr Platz hätten, lassen Sie im <div> noch den "margin" weg bzw. ändern Sie zu: "margin: 3em 0; ...
by s086520 (110 points)
So hat es geklappt, danke!

Ich habe es nun auf 120% angepasst, weil das Bild sonst sehr klein ist. nur leider wird das Bild dann rechtszentriert angezeigt. Gibt es irgendeine Möglichkeit, wie ich das Bild mittiger zentrieren kann?
by SoSci Survey (305k points)
> Ich habe es nun auf 120% angepasst,

Nein, bitte nicht :D

Entfernen Sie stattdessen den Rand, den Sie mit "margin" einfügen bzw. sorgen Sie dafür, dass dieser nur vertikal verwendet wird, nicht horizontal.

if (value('DV01') != 1) {
  html('
    <div style="margin: 3em 0; text-align: center">
      <img src="'.value('DV01', 'label').'" alt="" style="max-width: 100%;" />
    </div>
  ');
}
by s086520 (110 points)
Super, jetzt ist es so, wie ich es haben wollte! Vielen, vielen Dank für die Hilfe und Geduld! :)
by s086520 (110 points)
Leider gibt es doch noch ein Problem... Ich wollte jetzt 4 Mal den Pretest-Link testen, um zu sehen, ob wirklich alle 4 Bilder angezeigt werden. Die ersten 3 Mal hat alles funktioniert und es wurden mir unterschiedliche Bilder angezeigt. Leider wurde mir beim 4. Test gar kein Bild angezeigt. Woran liegt das?
by SoSci Survey (305k points)
> Leider wurde mir beim 4. Test gar kein Bild angezeigt. Woran liegt das?

Genau das haben Sie im Filter mit dem IF geschrieben: Bei Kondition 1 soll kein Bild gezeigt werden, nur wenn (value('DV01') != 1)

Da Sie das oben geschrieben hatten, habe ich es einfach übernommen. Ich ging von einer Kontrollgruppe aus. Wenn das nicht intendiert war, werfen Sie das IF raus:

  html('
    <div style="margin: 3em 0; text-align: center">
      <img src="'.value('DV01', 'label').'" alt="" style="max-width: 100%;" />
    </div>
  ');
by s086520 (110 points)
Okay, danke!

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

...