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

Hallo

Für eine mehrwellige Befragung, sollte Soscisurvey im dritten Fragebogen auf die Antwort aus dem zweiten Fragebogen zurückgreifen. Dies funktioniert meines Wissens mit "Datenbank für Inhalte". Da wir nicht mit Serienmails arbeiten, können die Fragebögen nicht damit verbunden werden. Nun habe ich versucht, die Fragebögen über die Kennung r (also reference) zu verbinden.

Wir erheben also im zweiten Fragebogen einen Wert (Variable PB04). Diesen Werte möchte ich zusammen mit der Teilnehmerkennung REF in die Datenbank für Inhalte schreiben.

$person = array(  
value ('PB04')
);
dbSet (reference(), $person);

Und im dritten Fragebogen möchte ich dann diese Infos aus der Datenbank holen.
Zuerst die Teilnehmernummer setzen:

$key = reference();

Und dann den Wert auslesen und der Variable $person zuweisen

$person = dbGet($key);

Nun mein Problem: Soscisurvey zeigt mir die Warnung an: "In der Funktion dbSet() wurde kein gültiger Datenbank-Schlüssel angegeben"

Kann man reference nicht verwenden?

Vielen Dank im Voraus!!!

1 Answer

0 votes
by SoSci Survey (304k points)

Kann man reference nicht verwenden?

Doch, kann man - aber nur, wenn eine Referenz (Kennung) für das laufende Interview vorliegt. Das heißt, das Interview muss über einen Link mit r=... gestartet worden sein.

Zum Testen können Sie die Referenz im Debug-Modus entweder oben setzen (Variable "REF") oder Sie können den Link nach dem Aufruf 10 Sekunden lang ergänzen.

by s083911 (110 points)
Vielen Dank für die schnelle Rückmeldung.
Ich habe nun gemerkt, dass nicht die Referenz das Problem ist, sondern die Variable PB04. Diese wird nicht in der Datenbank für Inhalte gespeichert. Am Code sehe ich keinen Fehler oder übersehe ich etwas?
by SoSci Survey (304k points)
Ich denke schon, dass die Referenz das Problem ist, wenn die o.g. Fehlermeldung erscheint. Was wird denn angezeigt, wenn Sie folgende Zeile ergänzen:

html('<p>Referenz: '.reference().'</p>');

Sowohl beim Speichern wie auch beim Abruf der Inhalte...
by s083911 (110 points)
Vielen Dank für die schnelle Antwort.

Es erscheint noch immer dieselbe Fehlermeldung, nur wird nun wird die Referenznummer im Fragebogen angezeigt, wenn ich einen Fragebogenlink teste.
by SoSci Survey (304k points)
> Es erscheint noch immer dieselbe Fehlermeldung

Beim dgSet() oder beim dgGet()?

Wenn beim dbGet(), dann überprüfen Sie unter "Spezielles" -> "Datenbank für Inhalte" bitte einmal, ob ein entsprechender Eintrag gespeichert wurde. Sonst müssen wir erstmal den Teil mit dbSet() zum Laufen bekommen.
by s083911 (110 points)
Bei beiden. In der Datenbank für Inhalte wird die Kennung (Ref) unter dem Namen "Schlüssel" gespeichert. Die Variable PB04, welche eigentlich unter dem Namen "person" gespeichert werden sollte, wird unter dem Namen "0" gespeichert.
by SoSci Survey (304k points)
> In der Datenbank für Inhalte wird die Kennung (Ref) unter dem Namen "Schlüssel" gespeichert.

Sie hatten "Schlüssel" als Referenz im Link angegeben? Oder woher stammt das "Schlüssel"?
by s083911 (110 points)
Der Link sieht folgendermassen aus: https://www.soscisurvey.de/Namedesfragebogens/?q=zweiterTeil&r=test1&tic=224

r ist die Kennung.
by SoSci Survey (304k points)
In der Datenbank für Inhalte sehen Sie einen Schlüssel "test1"? Und wie lautet die Fehlermeldung genau?

Leider geben Sie in Ihren Fragen immer nur abstrakte Beschreibungen und Beispiel-Daten. Etwa diesen ungültigen Demo-Link. Insofern kann ich nur raten, welche Informationen Sie mir vorenthalten (z.B. den vollständigen PHP-Code und die komplette Fehlermeldung für einen bestimmten Link) und woran es hängt...
by s083911 (110 points)
Genau, in der Datenbank für Inhalte steht unter Schlüssel "test1" und ausserdem ist dort der Wert der Variable PB04 eingetragen.

Hier die vollständigen php Codes:

Im ersten Fragebogen (Link: https://www.soscisurvey.de/partc/?q=partc1&r=test1&tic=223) fragen wir die Variable PB04 ab, welche wir für die folgenden Fragebögen brauchen:
//Variable PB04 ->  1 == 'Frau', 2 == 'Mann'

//Diese Werte wollen wir zusammen mit der Teilnehmerkennung REF in die Datenbank für Inhalte schreiben.

$person = value('PB04');
dbSet (reference(), $person);

//Hier sollte in der Datenbank also nun für jeden Teilnehmer 1 oder 2 stehen. Und das tut es auch. allerdings wird die 1 oder 2 unter der Überschrift "0" gespeichert und nicht unter "person".

Hier kommt die Fehlermeldung: In der Funktion dbSet() wurde kein gültiger Datenbank-Schlüssel angegeben.

Im nächsten Fragebogen (Link: https://www.soscisurvey.de/partc/?q=partc2&r=test1&tic=224) wollen wir uns die Infos aus der Datenbank holen.
//Erstmal die Teilnehmernummer setzen.

$key = reference();

//und dann den Wert 1 oder 2 auslesen und der Variablen $person zuweisen

$person = dbGet($key);

Hier kommt die Fehlermeldung: In der Funktion dbGet() wurde kein gültiger Datenbank-Schlüssel angegeben.

Sowie natürlich folgende: Die Variable PB04 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.
by SoSci Survey (304k points)
> allerdings wird die 1 oder 2 unter der Überschrift "0" gespeichert und nicht unter "person".

Das ist soweit korrekt - die Inhalte (wenn mehr als ein Wert angegeben ist) werden als indiziertes Array gespeichert, also unter 0, 1, 2, ...

$key = reference();
//und dann den Wert 1 oder 2 auslesen und der Variablen $person zuweisen
$person = dbGet($key);

> Hier kommt die Fehlermeldung: In der Funktion dbGet() wurde kein gültiger Datenbank-Schlüssel angegeben.

Und wenn Sie inmitten dieses PHP-Codes noch das html('<p>REF='.$key.'</p>') ergänzen, dann wird der korrekte Schlüssel "test1" angezeigt? Und beide Fragebögen sind auch im selben Befragungsprojekt, ja?
by s083911 (110 points)
Vielen Dank für Ihre Antwort.

Ja, beide Fragebögen sind im gleichen Befragungsprojekt.

Ja, wenn ich html('<p>REF='.$key.'</p>') im PHP-Code ergänze, wird im Fragebogen "REF=test1" angezeigt.

Die Meldung " In der Funktion dbGet() wurde kein gültiger Datenbank-Schlüssel angegeben" erscheint aber nach wie vor.
by s004788 (100 points)
Man sollte nicht vergessen, $person auch für den Rest des FB verfügbar zu machen. Sonst ist die Variable nur für den Codeteil verfügbar.

registerVariable($person);
 
Ausserdem muss in der Folge auch diese Variable $ person angesprochen werden und nicht (mehr) PB04. Also im Folgenden:

if ($person[0] == 1) {
  replace('%Person%', 'Dominik');
} elseif ($person[0] == 2){
  replace('%Person%', 'Stefanie');
}

usw.

Grüsse, AF
by SoSci Survey (304k points)
Nur zur Sicherheit: Das html() und das dbGet() stehen im selben PHP-Code?

Wären Sie einverstanden, dass ich einen Administrator-Login für Ihr Befragungsprojekt einrichte, und mir das Problem direkt ansehe? Die Fehlermeldung wird nur angezeigt, wenn der Parameter NULL ist oder ungültige Zeichen enthält - und nach allem, was Sie hier gepostet haben, scheint nichts davon zuzutreffen...

Wenn sie einverstanden sind, teilen Sie mir bitte auch mit, auf welcher Seite der PHP-Code steht, danke.
by s083911 (110 points)
Vielen Dank für Ihre Hilfe. Es hat nun mit den oben genannten Anpassungen (speichern der Variable person und ersetzen des Variablennames) funktioniert.

Besten Dank für Ihren Support.

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

...