0 votes
in SoSci Survey (dt.) by s154695 (485 points)

Guten Abend,

in meinem Fragebogen sollen die Teilnehmenden bei einer offenen Nennung die Namen von drei Kolleg:innen angeben.
Von diesen drei Antworten soll eine dann im weiteren Verlauf des Fragebogens randomisiert als Platzhalter eingefügt werden. Wie ich den Platzhalter grundsätzliche setze weiß ich, allerdings habe ich noch keinen Ansatz gefunden, wie ich das mit der Randomisierung in diesem Fall umsetzen kann.

Können Sie mir hier weiterhelfen?

Vielen Dank im Voraus und viele Grüße!

by SoSci Survey (327k points)
Nach welcher Regel möchten Sie denn randomisieren? Einfach die drei Namen mischen und auf drei Zufallsgeneratoren verteilen?

Das erreichen Sie relative einfach mittels valueList() und shuffle().
by s154695 (485 points)
Genau, einfach die drei Namen mischen und zufällig einen davon ziehen.

Wenn ich versuche, einen PHP-Code mit shuffle() zu erstellen, kommt folgender Warnhinweis:

Warnung: Im PHP-Code wurde die Variablen-Funktion $shuffle() verwendet. Das ist nicht erlaubt.

Warnung: Der PHP-Code enthält Funktionen oder PHP-Elemente, die nicht für die Verwendung im Fragebogen freigegeben wurden. Falls Sie der Meinung sind, dass die monierten Konstrukte ungefährlich sind, setzen Sie sich bitte mit dem Administrator in Kontakt!


Gibt es eine Alternative? Oder mache ich etwas falsch?
by SoSci Survey (327k points)
Sie haben ein Dollar-Zeichen vor die Funktion shuffle() geschrieben. Dollars sind für Variablen, Funktionen werden ohne geschrieben.

Posten Sie gerne mal Ihren PHP-Code, dann kann ich konstruktive Tipps geben.
by s154695 (485 points)
Tatsache.
Sonderlich weit bin ich noch nicht:

     $values = valueList('FS01', 'free');
     shuffle ($values);

Wenn ich es richtig verstanden habe, rufe ich so für alle Items der Frage FS01 (in der die Namen der Kolleg:innen genannt werden) die freien Antworten ab und mische diese. Ist das richtig? Wenn ja: wie kann ich jetzt etwas aus dieser Liste ziehen?

1 Answer

+1 vote
by SoSci Survey (327k points)
selected by s154695
 
Best answer

wie kann ich jetzt etwas aus dieser Liste ziehen?

$values = valueList('FS01');
shuffle ($values);

Wenn Sie möchten, können Sie erstmal prüfen, ob die Liste passt:

debug($values);

Und wenn alles passt, können Sie das einfach in Platzhalter schreiben:

replace('%name1%', $values[0]);
replace('%name2%', $values[1]);
replace('%name3%', $values[2]);

Diese Platzhalter können Sie dann an beliebiger Stelle im weiteren Fragebogen verwenden.

by s154695 (485 points)
Vielen Dank für Ihre Hilfe!
Wird den angebenenen Namen immer zufällig ein Wert 0, 1 oder 2 zugeordnet? Oder entspricht die erste Angabe immer dem Wert 0, die zweite dem Wert 1 usw.?

Und wenn ich den Code so einbaue, erhalte ich leider folgende Fehlermeldung:

"free as specified in function valueList() is no valid definition or list of items."

und folgende Notice:
"Debug information for $values:
Array (no elements at all)"
by SoSci Survey (327k points)
Ja, lassen Sie das 'free' bitte weg, das ist hier falsch.

Erstens ist 'free' nur für Fragen relevant, die geschlossene und offene Fragenm kombinieren (https://www.soscisurvey.de/help/doku.php/de:create:functions:value). Und zweitens müsste es hier auf den dritten Parameter:  valueList('FS01', NULL, 'free');
by s154695 (485 points)
Ah, wieder was dazu gelernt, vielen Dank!

Das setzen eines Platzhalters funktioniert allerdings noch nicht.

Mit dem Code
  replace('%name%', $values[0]);

erhalte ich folgende Fehlermeldungen:
There are not enough parameters for the function replace(). 2 parameters are essential for proper processing. Please refer to the user manual for further details.

There is an error in the PHP code:

Questionnaire Error: The PHP variable $values has been used but the variable is yet undefined (the variable has no value).

PHP code

001 namespace s2survey\questionnaire\environment;
002
003
004 replace('%name%', $values[0]);
005 return 'ok';

Questionnaire Error: Trying to access array offset on value of type null
line: 4

PHP code

001 namespace s2survey\questionnaire\environment;
002
003
004 replace('%name%', $values[0]);
005 return 'ok';
by SoSci Survey (327k points)
> There are not enough parameters for the function replace()

Das ist eine Folge dieses Problems:

> Trying to access array offset on value of type null, line: 4

Das besagt nämlich, dass $value noch keine Liste enthält, sondern noch nichts. Was zeigt denn debug($values) an, wenn Sie es direkt unter dieser Zeile platzieren?

$values = valueList('FS01');

Und was, wenn Sie das nochmal unter dem shuffle() platzieren?
by s154695 (485 points)
> Was zeigt denn debug($values) an, wenn Sie es direkt unter dieser Zeile platzieren?

Debug information for $values:
FS01x01A, FS01x02B, FS01x03C

> Und was, wenn Sie das nochmal unter dem shuffle() platzieren?
Debug information for $values:
0B, 1A, 2C
by SoSci Survey (327k points)
Das sieht gut aus. Ich vermute, Sie haben als Namen einfach "A", "B" und "C" eingetragen?

Der Code mit dem replace() steht im selben PHP-Code direkt unter dem valueList() und shuffle() ?
by s154695 (485 points)
Das war der Fehler - sie waren nicht im selben PHP-Code, nur auf der selben Seite. Vielen Dank!
Der Platzhalter erschient nun richtig in den entsprechenden Fragen. Allerdings taucht trotzdem folgende Fehlermeldung auf:

Variable $values[0] is unknown to this project (see listing of variables). Therefore no result can be retrieved.

Wie lässt diese sich lösen?
by SoSci Survey (327k points)
Das klingt danach, dass Sie irgendwo so etwas wie

value('$values[0]') geschrieben haben?! Wenn Sie nochmal Ihren kompletten PHP-Code posten möchten, kann ich mich gerne genauer dazu äußern.
by s154695 (485 points)
Vielen Dank! Genau, der Ausdruck kommt in der Vorbereitung des Platzhalters für folgende Wellen vor:

$values = valueList('FS01');
debug($values);
shuffle ($values);
debug($values);

//Replace name for this questionnaire
replace('%name%', $values[0]);
debug($values);

//preparation colleague name following waves
$key = value('C101_01');
$data = array(
  value('$values[0]')
);
dbSet($key, $data);
by SoSci Survey (327k points)
Alles klar ... ersetzen Sie das bitte wie folgt:

//preparation colleague name following waves
$key = value('C101_01');
dbSet($key, $values);

Oder wenn Sie wirklich nur den ersten Namen brauchen, dann...

//preparation colleague name following waves
$key = value('C101_01');
dbSet($key, $values[0]);

Was Sie gemacht hatten war, dass Sie mit der Funktion value() den Wert einer Variablen im Datensatz mit dem Namen '$values[0]' abrufen wollten. Mehr zu unterschiedlichen Variablen s. https://www.soscisurvey.de/help/doku.php/de:create:variables
by s154695 (485 points)
Perfekt, vielen Dank für die Unterstützung :-)
Jetzt funktioniert es.

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

...