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

Liebes Support-Team,

zunächst eine generelle Frage: Ich verwende Sosci Survey über einen uniinternen Server. Ich habe keinen Weg gefunden, mich mit meinem dort registrierten Nutzernamen + Passwort anzumelden, um auch den Online-Support nutzen zu können - deswegen jetzt (schon wieder) ein Zweitaccount. Sollte der Support mit externem-Server-Account theoretisch nutzbar sein?

Und hier mein Problem: Für ein Projekt mit zwei Interventionsarmen und fünf Messzeitpunkten habe ich viele verschiedene Fragebögen angelegt. Im ersten Fragebogen wird das Geschlecht erfasst und es erfolgt eine Randomisierung zur Interventions- oder Kontrollgruppe. Das Geschlecht benötige ich in den nachfolgenden Fragebögen zum Vorlegen geschlechtsspezifischer Fragebögen. Die Zuteilung und das Geschlecht werden in der Datenbank für Inhalte abgespeichert.
Während in den nachfolgenden Fragebögen der Zugriff auf die gespeicherte Zuteilung und die entsprechende Zuweisung zu IG/KG korrekt funktioniert, erhalte ich bei dem Zugriff auf das Geschlecht eine Fehlermeldung: "Trying to access array offset on value of type bool"

Der PHP-Code zur Speicherung der Geschlechtsangabe im ersten Fragebogen lautet:

$data = array(
  value('SD01', 'label'),
  value('SD02_01')           //diese Variable ist für Frage unwichtig
);
$key = 'SX-'.reference();  
dbSet($key, $data);

Und in den nachfolgenden Fragebögen:

$key = 'SX-'.reference();
$data = dbGet($key);

if ($data[0] == 'weiblich') {  
  setNextPage('Fragebogen_w');
} elseif ($data[0] == 'männlich') { 
  setNextPage('Fragebogen_m');
} elseif ($data[0] == 'divers') { 
  setNextPage('Fragebogen_d');
} 

In der Datenbank sind die Referenz, Geschlecht (in Spalte 0) und Randomisierung korrekt gespeichert.
Über jeden Lösungsvorschlag bin ich dankbar!
LG

1 Answer

0 votes
by SoSci Survey (370k points)

Sollte der Support mit externem-Server-Account theoretisch nutzbar sein?

Nein, der Account auf dem Uni-Server gilt nur für selbigen. Wir denken darüber nach, für Hochschulen, die SoSci Survey entgeltlich einsetzen, einen direkten Login zu ermöglichen. Allerdings war die Nachfrage danach bisher sehr gering.

Während in den nachfolgenden Fragebögen der Zugriff auf die gespeicherte Zuteilung und die entsprechende Zuweisung zu IG/KG korrekt funktioniert, erhalte ich bei dem Zugriff auf das Geschlecht eine Fehlermeldung: "Trying to access array offset on value of type bool"

Diese Fehlermeldung kommt daher, weil dbGet() den Eintrag (noch) nicht findet, und daher false liefert. Das ist der "type bool" Wert, bei dem Sie nicht auf Array-Elemente zugreifen können.

Während in den nachfolgenden Fragebögen der Zugriff auf die gespeicherte Zuteilung und die entsprechende Zuweisung zu IG/KG korrekt funktioniert

An welcher Stelle funktioniert es denn nicht? Ich lese Ihre Frage so, dass ich oben nur den funkionierenden Code sehe?

Wie stellen Sie denn sicher, dass die Personen über alle 5 Wellen hinweg den richtigen Link mit der individuellen Referenz (r=) bekommen?

by s361067 (120 points)
Der PHP-Code, den ich oben angegeben habe, funktioniert nicht. Das Speichern in der Datenbank für Inhalte scheint aber zu funktionieren, deswegen weiß ich nicht, wo der Fehler liegt. Den Code für die Speicherung der Randomisierung habe ich nicht gepostet, weil er funktioniert. Hier ist er:

Im ersten Fragebogen:

$key = 'RD-'.reference();
$rd_w = value('R001', 'label');
$rd_m = value('R002', 'label');
$rd_d = value('R003', 'label');

$rand = array(
    'R001' => $rd_w,
    'R002' => $rd_m,
    'R003' => $rd_d
);

dbSet($key, $rand);

In den nachfolgenden Fragebögen (hier Beispiel für den Zuteilungsfragebogen zum 2. Messzeitpunkt):

$key = 'RD-'.reference();
$rand = dbGet($key);
$rd_w = $rand[0];
$rd_m = $rand[1];
$rd_d = $rand[2];

if (
  ($rd_w == 'IG1') ||
  ($rd_m == 'IG1') ||
  ($rd_d == 'IG1')
){
  multiLevelDown('IG2');
}
elseif (
  ($rd_w == 'KG1') ||
  ($rd_m == 'KG1') ||
  ($rd_d == 'KG1')
){
  multiLevelDown('KG2');
}
by s361067 (120 points)
Wie stellen Sie denn sicher, dass die Personen über alle 5 Wellen hinweg den richtigen Link mit der individuellen Referenz (r=) bekommen? --> Wir arbeiten mit einem externen Panel-Anbieter zusammen, dieser verschickt die 5 Einladungen.
by SoSci Survey (370k points)
Okay, ich gehe davon aus, dass Sie beim Testen auch eine Referenz einstellen, indem Sie ein geeignetes r= im Link ergänzen.

> Das Speichern in der Datenbank für Inhalte scheint aber zu funktionieren

Das ist schonmal gut. Dann prüfen Sie bitte als nächstes ob der Abruf funktioniert. Versuchen Sie im ersten Fragebogen, wo Sie die Daten benötigen, einmal folgendes:

$key = 'RD-'.reference();
$rand = dbGet($key);
html($key);
html($rand);

Was wird hier beim Aufruf (mit der passenden Referenz im Link) anzeigt?
by s361067 (120 points)
"Der Befehl html() erwartet als Argument einen String (Text). Strings müssen stets von Anführungszeichen umschlossen sein."

Ich vermute, das Problem könnte darin liegen, dass der Panelanbieter mit statischen Links arbeiten möchte...? Gibt es dafür eine Lösung, oder sollte ich besser dynamische Links (mit r=) anfordern?
by SoSci Survey (370k points)
Zum Testen der grundsätzlichen Funktionalität brauchen Sie den Panel-Anbieter ja nicht, sondern sie können einen beliebigen Code an das r= anhängen.

> Ich vermute, das Problem könnte darin liegen, dass der Panelanbieter mit statischen Links arbeiten möchte...?

Der Panel-Anbieter wird eine ID für den Teilnehmer mitliefern müssen, sonst können Sie die Daten aus den einzelnen Erhebungswellen ja nicht einander zuordnen.
by s361067 (120 points)
Ich habe mit r=12345 getestet. In der Datenbank wurde der Schlüssel korrekt gespeichert, und im nachfolgenden Fragebogen wird mir bei

$key = 'RD-'.reference();
$rand = dbGet($key);
html($key);
html($rand);

zurückgegeben:

Der Befehl html() erwartet als Argument einen String (Text). Strings müssen stets von Anführungszeichen umschlossen sein.
by SoSci Survey (370k points)
Arbeiten Sie auf www.soscisurvey.de oder auf einem lokalen Hochschul-Server?

Zumindest der erste HTML-Aufruf sollte RD-12345 im Fragebogen ausgeben. Sie können dort optional noch einen Absatz ergänzen:

html('<p>Key: '.$key.'</p>');
by s361067 (120 points)
Auf einem Hochschul-Server.

Jetzt wurde

Key: RD-12345

zurückgegeben.
by s361067 (120 points)
edited by s361067
Für Geschlecht funktioniert es auch:
Key: SX-12345

Edit: allerdings nur im nachfolgenden Fragebogen, nicht in dem untergeordneten Fragebogen. Dort wird einfach nur hochgezählt (z.B. SX-15).

Ich versuche jetzt, die Daten mit multiLevelDown() an den untergeordneten Fragebogen zu übergeben. Kann ich Daten weitergeben, die in zwei verschiedenen Schlüsseln gespeichert sind? In meinem Fall die Randomisierung in RD und das Geschlecht in SX?
by SoSci Survey (370k points)
Okay, jetzt kommen wir der Sache näher :)

> Auf einem Hochschul-Server.

Sagen Sie den Verantwortlichen mal Bescheid, dass sie auf die aktuelle Programmversion 3.8.03 aktualisieren sollen. Seit Version 3.8.00 zeigt html() auch den Inhalt von Arrays an, weil das bei der Fehlersuche sehr hilfreich ist.

>  nicht in dem untergeordneten Fragebogen

Sie arbeiten mit einer Multi-Level-Struktur? Das liegt daran, dass die Referenz da nicht übergeben wird. Übergeben Sie sie im multiLevelDown() explizit und nehmen Sie sie im untergeordneten Fragebogen mittels multiLevelData() entgegen.

> Kann ich Daten weitergeben, die in zwei verschiedenen Schlüsseln gespeichert sind?

Sie können die Daten entweder direkt im übergeordneten Fragebogen abrufen und gesammel als Array in multiLevelDown() übergeben oder Sie übergeben einfach die Referenz und erledigen die Abfrage dann im untergeordneten Fragebogen.

Speichern sie die Werte auf alle Fälle im untergeordneten Fragebogen nochmal mit put() als interne Variablen - das spart Ihnen viel Zeit in der Auswertung.
by s361067 (120 points)
Danke für die Hinweise!
Meine Hochschule hat heute von 3.7.06 auf 3.8.03 aktualisiert.

Die Referenz und die Randomisierung habe ich mit multiLevelDown() an den untergeordneten Fragebogen übergeben. Bei

$key = 'RD-'.reference();
$rand = dbGet($key);
html($key);
html($rand);

wird mir jetzt im untergeordneten Fragebogen "RD-RD-12345" zurückgegeben (besser als "RD-15", zumindest).

Das Geschlecht habe ich versucht, im untergeordneten Fragebogen in einer internen Variable (SD32_01) zu speichern und dann in den geschlechtsspezifischen Fragen anzuwenden. Hier muss ich aber einen Fehler einprogrammiert haben und mir kommt mein Weg auch etwas umständlich vor:

Erste Seite untergeordneter Fragebogen:

$rand = multiLevelData();
$rd_w = $rand[0];
$rd_m = $rand[1];
$rd_d = $rand[2];

if (
  ($rd_w == 'IG1') ||
  ($rd_w == 'KG1')
){
  put('SD32_01', 'weiblich');
}
elseif (
  ($rd_m == 'IG1') ||
  ($rd_m == 'KG1')
){
  put('SD32_01', 'männlich');
}
elseif (
  ($rd_d == 'IG1') ||
  ($rd_d == 'KG1')
){
  put('SD32_01', 'divers');
}

Seite im untergeordneten Fragebogen vor den Filterfragen:

if (value('SD32_01') == 'weiblich') {
  setNextPage('Fragebogen_w');
} elseif (value('SD32_01') == 'männlich') {
  setNextPage('Fragebogen_m');
} elseif (value('SD32_01') == 'divers') {
  setNextPage('Fragebogen_d');
} else {
  setNextPage('Fragebogen_d');
}

Ich lande immer bei "else". Wo könnte der Fehler liegen?
by SoSci Survey (370k points)
Wie sieht denn Ihr multiLevelDown() aus - und was kommt im untergeordnetne Fragebogen genau an?

$rand = multiLevelData();
debug($rand);
by s361067 (120 points)
multiLevelDown() im übergeordneten Fragebogen:

$key = 'RD-'.reference();
$rand = dbGet($key);
$rd_w = $rand[0];
$rd_m = $rand[1];
$rd_d = $rand[2];

if (
  ($rd_w == 'IG1') ||
  ($rd_m == 'IG1') ||
  ($rd_d == 'IG1')
){
  multiLevelDown('IG4', $key, $rand);
}
elseif (
  ($rd_w == 'KG1') ||
  ($rd_m == 'KG1') ||
  ($rd_d == 'KG1')
){
  multiLevelDown('KG4', $key, $rand);
}

Und bei

$rand = multiLevelData();
debug($rand);

erhalte ich im untergeordneten Fragebogen:

Debug-Information für $rand:
$rand = RD-12345 (string)

Das Speichern vom Geschlecht in der internen Variable funktioniert nicht:

Die Variable SD32_01 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.
by SoSci Survey (370k points)
Die Funktion multiLevelDown() gibt nur den zweiten Parameter (in Ihrem Fall $key) an den untergeordneten Fragebogen weiter. Die einfachste Lösung wäre demnach...

... im übergeordneten Fragebogen

multiLevelDown('IG4', $key);   // das $rand können sie hier weglassen

... um untergeordneten Fragebogen:

$key = multiLevelData();
$rand = dbGet($key);
$rd_w = $rand[0];
$rd_m = $rand[1];
$rd_d = $rand[2];
by s361067 (120 points)
Das hat funktioniert! Vielen Dank!

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

...