0 votes
in SoSci Survey (dt.) by s121366 (250 points)

Guten Tag,

ich möchte eine Tagebuchstudie (ein Fragebogen täglich) durchführen. Sobald die Teilnehmenden den Fragebogen an zwei Tagen ausgefüllt haben, soll Ihnen nach Abschluss der zweiten Befragung ein Hinweisfeld mit einer Verlinkung angezeigt werden. Ich habe bereits in einer vergangen Erhebung ein ähnliches Konzept umgesetzt und mich an dem PHP-Code der damaligen Erhebung orientiert, jedoch funktioniert dies bislang noch nicht beim neuen Fragebogen. Am Ende der Befragung habe ich den folgenden Code eingefügt:

$key = 'diary02'.caseSerial();
$current = dbGet($key);

if (!$current) {
$current = [];
}
$day = floor((time() - strtotime('2023-02-20 00:00:00')) / 86400);
$current[$day] = 1;
debug ($current);

dbSet($key, $current);

if (array_sum($current) == 2) {
question('LP01');
}

Können Sie mir sagen, woran es liegen könnte, dass es bislang noch nicht funktioniert?

Freundliche Grüße

by SoSci Survey (328k points)
Das kommt mir bekannt vor, ja :) Was ist denn in der Datenbank zu dem Schlüssel gespeichert? Fügen Sie doch mal folgende Zeilen zusätzlich ein:

debug($key);
debug($current);
debug(array_sum($current));

Was wird dann angezeigt - vorausgesetzt, Sie starten das Ganze im Debug-Modus.
by s121366 (250 points)
Ich habe die Zeilen hinzugefügt und dann wurde mir die folgende Debug-Information angezeigt:

[Information]    Interview gestartet (neue Nummer 813)
[Information]    Der Fragebogen Diary02 im Projekt digi_eingang wird verwendet
[Verarbeitung]    Erstelle Seite 21 in Fragebogen Diary02
[Inhalt]    Erstelle Frage KS02
[Inhalt]    Erstelle Frage KS01
[Inhalt]    Erstelle Frage KS03
debug()    Inhalt: 0:1, 1:1, -33:1
debug()    Inhalt: $key = diary02 (string)
debug()    Inhalt: 0:1, 1:1, -33:1
debug()    Inhalt: array_sum($current) = 3 (integer)
[Inhalt]    Erstelle Frage LP01

LP01 soll nur ein Hinweisfeld sein. Ich habe vergessen noch dazu zu sagen, dass es dieses mal nicht um die getrennte Erhebung der Kontaktdaten geht, sondern nur ein Hinweistext angezeigt werden soll, in welchem sich eine Verlinkung zu einer anderen Seite außerhalb von SoSci befindet.
by SoSci Survey (328k points)
> Inhalt: $key = diary02 (string)

Das was aber kein Testlauf mit einer richtigen Serienmail, oder? Offenbar hatte dieser Fall keine SERIAL/caseSerial().

Abgesehen davon scheint es vom Prinzip her zu funktionieren.
by s121366 (250 points)
Genau, es war kein Testlauf mit einer richtigen Serienmail. Ich habe es heute Vormittag schon mehrfach mit meiner eigenen Email-Adresse probiert, jedoch wurde mir dann nicht das Hinweisfenster angezeigt. Ich würde es jetzt noch einmal probieren. Kann ich mir auch die Debug-Informationen angezeigen lassen, wenn ich ich es mit einer richtigen Serienmail teste?
by SoSci Survey (328k points)
> Ich habe es heute Vormittag schon mehrfach mit meiner eigenen Email-Adresse probiert, jedoch wurde mir dann nicht das Hinweisfenster angezeigt.

Tragen Sie Ihre eigene Mailadresse nochmal in die Adressliste ein, und setzen Sie das Häkchen, dass es sich um einen Test-/Debug-Eintrag handelt. Dann lassen Sie sich einen Link ausgeben (unten, wenn Sie den Adresseintrag zum Bearbeiten öffnen). Damit haben sie eine SERIAL und (!) können sehen, was da im Hintergrund passiert.

Im origen Beispiel würde der Hinweis nicht angezeigt, weil die Summe bereits 3 ist, nicht nur 2. Ich vermute, dass der Eintrag für -33 damit zusammenhängt:

> debug()    Inhalt: 0:1, 1:1, -33:1

Woran es in Ihrem Testfall liegt, sehen wir dann anhand der neuen Debug-Info.
by s121366 (250 points)
Ich bin Ihrer Anleitung gefolgt und nach dem Durchlaufen des Fragebogens kam die folgende Debug-Information:

[Information]    Interview Nummer 820 wird fortgesetzt
[Information]    Der Fragebogen Diary im Projekt digi_eingang wird verwendet
[Information]    Die Verweildauer auf Seite 14 war 4 Sekunden
[Verarbeitung]    Lese Antworten von Seite 14
[Information]    Antwort auf SI10 = 2
[Information]    Bedingung in Filter SI10/1 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/2 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/3 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/4 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/5 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/6 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/7 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/8 ist nicht erfüllt.
[Information]    ▼ Filter SI10/9 wird aktiv (Bedingung erfüllt).
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Springe zur Seite 24 (Nr. 24)
[Verarbeitung]    Erstelle Seite 24 in Fragebogen Diary
[Inhalt]    Erstelle Frage WI02
debug()    Inhalt: 0:1, -32:1
debug()    Inhalt: $key = diary (string)
debug()    Inhalt: 0:1, -32:1
debug()    Inhalt: array_sum($current) = 2 (integer)
[Inhalt]    Erstelle Frage LP01

Ich habe es nun eben noch einmal mit einer völlig neuen E-Mail-Adresse geprüft und nun wurde es mir nach dem zweiten Durchlaufen angezeigt und es scheint zu funktionieren. Wahrscheinlich gab es einfach zu viele Datensätze für die andere E-Mail-Adresse, sodass mir die Frage nicht angezeigt wurde, da die Bedingung der zwei ausgefüllten Fragebögen überschritten wurde. Daher vermutlich auch 33:1.

Ein Problem habe ich aber noch. Ich habe eine Frage zu Beginn des Fragebogens, die nur in der ersten Erhebungswelle angezeigt werden soll und dann nicht mehr kommen soll. In dieser erzeuge ich einen eigenen individuellen Code, damit ich die Daten mit anderen Erhebungsverfahren verknüpfen kann. Gibt es hier auch einen PHP-Code oder eine andere Möglichkeit, sodass diese Frage nur in der ersten Erhebungswelle angezeigt wird?

1 Answer

0 votes
by SoSci Survey (328k points)

Wahrscheinlich gab es einfach zu viele Datensätze für die andere E-Mail-Adresse

SoSci Survey unterscheidet mit Ihrem Code ja nach Personenkennungen (SERIAL), nicht nach Mailadresse. Die Frage ist also, ob es für den anderen Adresseintrag (man kann je mehrere davon für dieselbe Mailadresse anlegen) noch andere Fragebögen ausgefüllt wurden.

Außerdem speichert Ihr Code in Slots, die vom Tag abhängen. Der Tag wird dabei ab dem 20.02.2023 gezählt. Das Ausfüllen von heute wurde also für Tag -32 (minus!) gespeichert:

Inhalt: 0:1, -32:1

Unschlüssig erscheint mir, dass auch für den Tag 0 ein Wert vorliegt. Das dürfte aber daran liegen, dass dbSet() nur positive Indexwerte erlaubt. Ich befürchte, bei der erneuten Verwendung dieses Codes steht dann folgendes in der Variable:

Inhalt: 0:1, 1:1

Testen Sie daher bitte mit einem Referenzzeitpunkt, welcher in der Vergangenheit liegt.

Ein Problem habe ich aber noch. Ich habe eine Frage zu Beginn des Fragebogens, die nur in der ersten Erhebungswelle angezeigt werden soll und dann nicht mehr kommen soll. In dieser erzeuge ich einen eigenen individuellen Code, damit ich die Daten mit anderen Erhebungsverfahren verknüpfen kann.

Kann man machen ... welches ist denn das andere Erhebungsverfahren? Vielleicht kann man die ohnehin vorhandene SERIAL ja für diesen Zweck nutzen.

Gibt es hier auch einen PHP-Code oder eine andere Möglichkeit, sodass diese Frage nur in der ersten Erhebungswelle angezeigt wird?

Im einfachsten Fall erstellen Sie eine Kopie des Fragebogens für die erste Welle. Sie können ja für jede Serienmail festlegen, welchen Fragebogen diese starten soll.

Natürlich können sie auch über die Datenbank für Inhalte gehen. Dann müssten Sie aber sicherstellen, dass die Einträge für die Tage sauber erstellt werden. Also keine negativen Zahlen.

by s121366 (250 points)
(1) Genau, ich habe bereits verschiedene Fragebögen zum Testen mit der Email-Adresse ausgefüllt. Daher kommt wohl die hohe Zahl.

(2) Ich habe den Fragebogen einmal mit dem Referenzzeitpunkt 19.01.2023 getestet und dabei folgende Debug-Information erhalten:

[Information]    Interview Nummer 827 wird fortgesetzt
[Information]    Der Fragebogen Diary im Projekt digi_eingang wird verwendet
[Information]    Die Verweildauer auf Seite 15 war 3 Sekunden
[Verarbeitung]    Lese Antworten von Seite 15
[Information]    Antwort auf SI10 = 2
[Information]    Bedingung in Filter SI10/1 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/2 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/3 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/4 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/5 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/6 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/7 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/8 ist nicht erfüllt.
[Information]    ▼ Filter SI10/9 wird aktiv (Bedingung erfüllt).
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Springe zur Seite 25 (Nr. 25)
[Verarbeitung]    Erstelle Seite 25 in Fragebogen Diary
[Inhalt]    Erstelle Frage WI02
debug()    Inhalt: 0:1, 1:1, 2:1
debug()    Inhalt: $key = diary (string)
debug()    Inhalt: 0:1, 1:1, 2:1
debug()    Inhalt: array_sum($current) = 3 (integer)

(3) Bei den anderen Erhebungsverfahren handelt es sich u.a. um Interviews, ethnografische Beobachtungen etc.

(4) Die erste Lösung habe ich zu Beginn umgesetzt, jedoch gab es dann Probleme mit der Bedingung, dass erst nach mehreren Fragebögen die Hinweisseite mit dem Link angezeigt werden soll. Ich würde es jetzt aber noch einmal probieren und für die Serienmails festlegen, welcher Fragebogen verwendet werden soll.
by SoSci Survey (328k points)
> Daher kommt wohl die hohe Zahl.

Nur zur Sicherheit: -33 und -32 sind die Indizes im Array (https://www.soscisurvey.de/help/doku.php/de:create:array), keine Zählung.

> debug()    Inhalt: 0:1, 1:1, 2:1

Gutem hier wurde gezählt:

Tag 0 (19.1.)
Tag 1 (20.1.)
Tag 2 (21.1.)

Nachdem heute noch der 20.1. ist, kommt der 21.1. womöglich daher, dass der Tag (den Sie als Index verwenden) nicht korrekt berechnet wird. Prüfen Sie das bitte hiermit:

$day = floor((time() - strtotime('2023-01-19 00:00:00')) / 86400);
debug($day);

Ich sehe zwar keinen offensichtlichen Fehler im Code, aber ... irgendwo muss die 2 herkommen.

> Bei den anderen Erhebungsverfahren handelt es sich u.a. um Interviews, ethnografische Beobachtungen etc.

Gut, vermutlich ist der persönliche Code da einfacher umzusetzen als eine direkte Übergabe der SERIAL.
by s121366 (250 points)
Hallo, ich habe den PHP Code angepasst und es dann noch einmal geprüft. Dabei kam dei folgende Debug-Information:

[Information]    Interview Nummer 835 wird fortgesetzt
[Information]    Der Fragebogen Diary im Projekt digi_eingang wird verwendet
[Information]    Die Verweildauer auf Seite 15 war 2 Sekunden
[Verarbeitung]    Lese Antworten von Seite 14+15
[Information]    Antwort auf SI10 = 2
[Information]    Bedingung in Filter SI10/1 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/2 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/3 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/4 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/5 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/6 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/7 ist nicht erfüllt.
[Information]    Bedingung in Filter SI10/8 ist nicht erfüllt.
[Information]    ▼ Filter SI10/9 wird aktiv (Bedingung erfüllt).
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Springe zur Seite 25 (Nr. 25)
[Verarbeitung]    Erstelle Seite 25 in Fragebogen Diary
[Inhalt]    Erstelle Frage WI02
debug()    Inhalt: $day = 4 (double)
debug()    Inhalt: $key = diary (string)
debug()    Inhalt: 0:1, 1:1, 2:1, 3:1, 4:1
debug()    Inhalt: array_sum($current) = 5 (integer)
by SoSci Survey (328k points)
Das sieht besser aus - kein negativer Index mehr. Hier wurde wieder der Standardeintrag "diary" ohne SERIAL verwendet. Für diesen Eintrag ist hinterlegt, dass bereits an Tag 0 bis 4 (also 5-mal) teilgenommen wurde.

Die tests wären vermutlich aussagekräftiger, wenn Sie eine SERIAL verwenden. Am besten über einen entsprechenden Test-Eintrag in der Adressliste.

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

...