0 votes
in SoSci Survey (dt.) by s132297 (120 points)

Hallo zusammen,

ich habe in SoSci-Survey einen übergeordneten Fragebogen programmiert, der zwei untergeordnete Fragebögen enthält. Die Teilnehmenden bekommen direkt zu Beginn der Befragung zufällig einen der beiden untergeordneten Fragebögen zugewiesen. Dazu verwende ich im übergeordneten Fragebogen die PHP-Funktion „multiLevelDown()“. Meine Frage hierzu: Sollte der Redirect-Link auf der vorletzten Seite der beiden untergeordneten Fragebögen oder auf der des übergeordneten Fragebogens eingefügt werden?

Zudem habe ich eine Frage zu den Platzhaltern im Redirect-Link: Der Panel-Anbieter, mit dem ich zusammenarbeite, hat mir einen Redirect-Link mit zwei Beispiel-Platzhaltern zugeschickt, die ich durch andere Platzhalter ersetzen soll. Da ich ja mit der „multiLevelDown()“-Funktion arbeite, müsste der PHP-Code mit dem Redirect-Link auf der vorletzten Seite des Fragebogens laut SoSci-Survey-Benutzerhandbuch wie folgt aussehen:

redirect('https://www.panelanbieter.de/complete?xyz=ABCDEF&uid='.multiLevelData());

Den Platzhalter "%reference%" kann ich ja dann nicht verwenden, habe ich das richtig verstanden? Füge ich dann bei den beiden Beispiel-Platzhalter im Redirect-Link jeweils die Funktion "multiLevelData()" ein?

Außerdem bat mich der Panel-Anbieter, dass ich für jede Person zwei IDs erfassen, speichern und diese bei der Rückleitung an ihn übermitteln soll. Was muss ich dafür konkret tun? Reicht es aus, den Redirect-Link in das Befragungsprojekt einzubauen oder sind weitere Schritte erforderlich?

Vielen Dank im Voraus!

1 Answer

0 votes
by SoSci Survey (327k points)

Sollte der Redirect-Link auf der vorletzten Seite der beiden untergeordneten Fragebögen oder auf der des übergeordneten Fragebogens eingefügt werden?

Beides ist möglich. Falls Sie im untergeordneten Fragebogen weiterleiten, müssen Sie den Teilnehmercode vom über- in den untergeordneren Fragebogen übergeben.

Füge ich dann bei den beiden Beispiel-Platzhalter im Redirect-Link jeweils die Funktion "multiLevelData()" ein?

Das kommt darauf an, was Sie in multiLevelDown() genau übergeben - aber ja, wenn das nur die Referenz ist, würde es so funktionieren.

Außerdem bat mich der Panel-Anbieter, dass ich für jede Person zwei IDs erfassen, speichern und diese bei der Rückleitung an ihn übermitteln soll.

Dann brauchen Sie erstmal eine Frage "Gerät und übermittelte Variablen", um die beiden Parameter einzulesen, dann übergeben Sie beide mittels multiLevelDown() als Array, und zerlegen selbiges für den Redirect wieder. Posten Sie gerne Ihren PHP-Code, wenn Sie an einer Stelle nicht weiterkommen.

by s132297 (120 points)
Vielen Dank für die Antwort!

Der Panel-Anbieter bat mich über die beiden URL-Parameter "ID" und "state" pro Person zwei IDs zu erfassen. Ich habe nun also eine Frage "Gerät und übermittelte Variablen" erstellt und sie auf die erste Seite des übergeordneten Fragebogens geschoben. Nun bin ich aber etwas ratlos, wie ich weiter vorgehen muss.  

Im übergeordneten Fragebogen verwende ich aktuell auf der ersten Seite den PHP-Code:
$qnr = value('ZG01', 'label');
multiLevelDown($qnr, reference());

Dieser Code sorgt ja dafür, dass die Teilnehmer einen der beiden untergeordneten Fragebögen zufällig zugeteilt bekommen und die Teilnahmecodes an die beiden untergeordneten Fragebögen durchgereicht werden. Nun weiß ich allerdings nicht genau, wie ich den Redirect-Link des Panel-Anbieters auf der vorletzen Seite des Fragebogens einzubinden habe. Also hab ich das richtig verstanden, dass ich in dem Redirect-Link dann an die beiden Beispiel-Platzhalter (für "ID" und "state") einfach nur die Funktion "multiLevelData()" jeweils einsetze?
by SoSci Survey (327k points)
> Nun bin ich aber etwas ratlos, wie ich weiter vorgehen muss.  

Stellen Sie in der Frage ein, wie die beiden Parameter heißen, die Sie übergeben bekommen. Und dann testen Sie erstmal, ob das im Datensatz ankommt, wenn Sie Ihren Fragebogen-Link mit den beiden Parametern (s. https://www.soscisurvey.de/help/doku.php/de:survey:url) aufrufen.

> Im übergeordneten Fragebogen verwende ich aktuell auf der ersten Seite den PHP-Cod

Nehmen wir mal an, Ihre beiden Variablen mit den beiden Codes heißen DV09_RV1 und DV09_RV2. Dann würde der Code so aussehen:

multiLevelDown($qnr, [
  'v1' => value('DV09_RV1'),
  'v2' => value('DV09_RV2')
]);

Und im untergeordneten Fragebogen:

$data = multiLevelData();
redirect('https://...?a='.$data['v1'].'&b='.data['v2']);
by s132297 (120 points)
Vielen Dank für die Antwort!

Habe ich das richtig verstanden, dass ich in dem Fragebogen-Link, den ich an den Panel-Anbieter übermittel, die beiden Parameter ergänzen muss? Also angenommen der Link zu meinem Fragebogen lautet: https://s2survey.net/Beispiel-Projekt/
Wie müsste der Link zum Fragebogen dann aussehen?


Der PHP-Code in meinem übergeordneten Fragebogen sieht jetzt übrigens so aus:

$qnr = value('ZG01', 'label');

multiLevelDown($qnr, [
  'v1' => value('G001_RV1'),
  'v2' => value('DG001_RV2')
]);


und in den beiden untergeordneten Fragebögen auf der vorletzten Seite des Fragebogens habe ich jeweils folgenden PHP-Code eingefügt:

$data = multiLevelData();
redirect('https://...?list=1&ID='.$data['v1'].'&state='.data['v2']);

Ist das so korrekt und wird das den Anforderungen des Panel-Anbieters (über die URL-Parameter "ID" und "state" pro Person  zwei IDs erfassen, speichern und diese bei der Rückleitung an ihn übermitteln) gerecht?
by SoSci Survey (327k points)
> Wie müsste der Link zum Fragebogen dann aussehen?

Zum Beispiel

https://s2survey.net/Beispiel-Projekt/?a=<Parameter1>&b=<Parameter2>

Das "a" und "b" ist frei wählbar, also z.B. auch "id" und "state", wenn Sie ohnehin mehr als einen Parameter brauchen (sonst wäre das "r" meine Empfehlung, weil das automatisch gespeichert wird).

> Der PHP-Code in meinem übergeordneten Fragebogen sieht jetzt übrigens so aus:

Verwenden Sie zwei Fragen "Gerät und übermittelte Variablen", um die beiden Werte einzulesen? Eine würde reichen und wäre eleganer.

> Ist das so korrekt

Probieren Sie es aus. Laden Sie den Link mit zwei Parametern, klicken sie im Debug-Modus direkt zur Seite mit dem Redirect, und prüfen Sie, auf welche URL weitergeleitet wird, und ob die beiden Parameter in der URL enthalten sein.
by s132297 (120 points)
edited by s132297
> Verwenden Sie zwei Fragen "Gerät und übermittelte Variablen", um die beiden Werte einzulesen?

Nein, ich verwende nur eine Frage. Habe ich da beim PHP-Code was falsch gemacht?

> Probieren Sie es aus.

Ich habe den Link mit den beiden Parametern ausprobiert und den Fragebogen testweise einmal ausgefüllt. Die beiden Variablen "ID" und "state" werden mir im Datensatz angezeigt. Allerdings stehen die erhobenen Daten nicht in der Zeile mit der Panel-ID, sondern in der Zeile darunter. Durch multiLevelDown() wird im Datensatz ein weiterer Fall erzeugt, in welchem die Daten aus dem untergeordneten Fragebogen gespeichert werden. Ist das so richtig? Oder sollten die erhobenen Daten eigentlich in der Zeile stehen, in der auch die Panel-ID steht?

Ich werde zwar am Ende der Befragung auf die Seite des Anbieters umgeleitet, allerdings steht dann nicht mehr die Test-Kennung in der Adresszeile des Browsers und ich erhalte eine Fehlermeldung (Letzteres ist ja laut Benutzerhandbuch kein Problem). Mich wundert aber, dass die Test-Kennung dort nicht mehr in der URL angezeigt wird...

Wäre der Link zum Fragebogen mit den beiden Parametern so korrekt?: https://www.soscisurvey.de/Beispiel-Projekt-2024/?ID=xxx&state=statevalue
by SoSci Survey (327k points)
> Nein, ich verwende nur eine Frage. Habe ich da beim PHP-Code was falsch gemacht?

Sie verwenden im PHP-Code einmal die Variable G001_RV1 und einmal DG001_RV2, was auf den ersten Blick nach 2 unterschiedlichen Fragen aussieht.

> Allerdings stehen die erhobenen Daten nicht in der Zeile mit der Panel-ID, sondern in der Zeile darunter.

Ja, es ist normal, dass eine Multi-Level-Struktur mehrere Datensätze pro Teilnehmer:in erzeugt.

> Mich wundert aber, dass die Test-Kennung dort nicht mehr in der URL angezeigt wird...

Entweder es funktioniert nicht korrekt - oder Sie werden vom Anbieter direkt weitergeleitet. Ersetzen sie testweise das

redirect('https://...?list=1&ID='.$data['v1'].'&state='.data['v2']);

mal durch ein

html('<pre>');
html('https://...?list=1&ID='.$data['v1'].'&state='.data['v2']);
html('</pre>');
pageStop();

In der zweiten Zeile tauschen Sie nur das redirect durch html, der Rest ist für eine bessere Darstellung. Dann sehen Sie, welche URL verwendet wird.

> Wäre der Link zum Fragebogen mit den beiden Parametern so korrekt?

Sieht gut aus, ja.
by s132297 (120 points)
> Sie verwenden im PHP-Code einmal die Variable G001_RV1 und einmal DG001_RV2, was auf den ersten Blick nach 2 unterschiedlichen Fragen aussieht.

Das ist mein Fehler, ich habe mich verschrieben. Der Code sieht eigentlich so aus:
$qnr = value('ZG01', 'label');
$data = [
    'ID'  => value('G001_RV1'),
    'state' => value('G001_RV2'),
];
multiLevelDown($qnr, $data);

> In der zweiten Zeile tauschen Sie nur das redirect durch html, der Rest ist für eine bessere Darstellung. Dann sehen Sie, welche URL verwendet wird.

Mir wird zwar der Link zum Fragebogen angezeigt, aber ohne meine Testkennung, die ich für die beiden Parameter "ID" und "state" einsetze.

Also angenommen der Link zum Fragebogen wäre dieser: https://www.soscisurvey.de/Beispiel-Projekt-2024/?ID=xxx&state=statevalue   

Dann habe ich da zwei Beispiel-Kennungen eingetragen wie:
https://www.soscisurvey.de/Beispiel-Projekt-2024/?ID=12345&state=12345   

und den Fragebogen ausgefüllt.

Wenn ich dann am Ende des Fragebogens auf die Seite des Panel-Anbieters geleitet werde, steht in der URL der Redirect-Link, den mir der Panel-Anbieter zugeschickt hat so: https://...list=1&ID=&state=
by SoSci Survey (327k points)
Okay, dann passt noch etwas nicht. Wie sieht dnn Ihr Code im untergeordneten Fragebogen genau aus? Wenn er aussieht wie im Muster oben, nur mit angepassten Schlüsseln...

$data = multiLevelData();
redirect('https://...?list=1&ID='.$data['ID'].'&state='.$data['state']);

Dann ergänzen Sie bitte noch ein debug(), um mehr Details zu sehen:

$data = multiLevelData();
debug($data);
redirect('https://...?list=1&ID='.$data['ID'].'&state='.$data['state']);
by s132297 (120 points)
Ich habe versucht, den Code so ins Befragungsprojekt einzubinden, wie es mir hier im Verlauf dargestellt wurde. Allerdings führte dies zu einer Fehlermeldung. Ich habe mich daher an das SoSci-Survey -Benutzerhandbuch "Zufallsauswahl für Fragebögen" --> "Zusammenspiel mit externen Panels" gehalten. Das hat nun dazu geführt, dass - wenn ich den Fragebogen testweise ausfülle - ich am Ende zumindest schon mal zum Panel-Anbieter weitergeleitet werde und mir die beiden Variablen "ID" und "state" im Datensatz angezeigt werden. Aber wie gesagt, leider werden die Test-Kennungen dann nicht in der URL angezeigt.

Mein PHP-Code im übergeordneten Fragebogen sieht so aus:
$qnr = value('ZG01', 'label');
$data = [
    'ID'  => value('G001_RV1'),
    'state' => value('G001_RV2'),
];
multiLevelDown($qnr, $data);


Und das ist der Redirect Link, den ich am Ende auf der vorletzten Seite in beide untergeordneten Fragebögen eingebunden habe:
 
$data = multiLevelData();
redirect('https://....?list=1&ID='.value('G001_RV1').'&state='.value('G001_RV2'));

Ansonsten habe ich keine weiteren PHP-Codes eingebunden.
by SoSci Survey (327k points)
Knapp dran - nur können sie auf value('G001_RV1') im Redirect nicht zurückgreifen, weil Sie da ja in einem anderen Datensatz sind, wo diese Variablen noch gar nicht mit Werten belegt wurden. Stattdessen verwenden Sie $data, wo Sie die beiden Werte als Array übergeben haben.

$data = multiLevelData();
redirect('https://...?list=1&ID='.$data['ID'].'&state='.$data['state']);

Wenn Sie dann einen Fehler gemeldet bekommen, posten Sie diesen gerne.
by s132297 (120 points)
edited by s132297
Ich habe de Redirect-Link nun so angepasst, wie Sie es mir erklärt haben und die Test-Kennungen werden nun in der URL angezeigt, wenn ich zum Panel-Anbieter weitergeleitet werde.

Vielen Dank für die Hilfe!

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

...