0 votes
in SoSci Survey (dt.) by s150166 (110 points)
edited by s150166
  • Wir führen eine mehrwellige Befragung in Form einer Tagebuchstudie durch. Wir wollen am Ende unseres Initialfragebogens mittels opt-In-Anfrage die weitere Teilnahme mittels Serienmails ermöglichen.

  • Im Initialfragebogen haben wir zwei Fragen, SD24 und SD25, deren Informationen wir als Zeitpunkte für das v
    Versenden der Serienmails nutzen wollen.

  • Im Fragebogen, der nach Aufrufen des Bestätigungslinks angezeigt wird steht, dass diese Variablen nicht im Projekt existierten und deshalb
    Kein Antwort-Wert erzeugt werden konnte.

  • Die Variablen sind keine internen Variablen aber sie sollen es auch nicht sein, da wir keine Laufzeitvariablen erzeugen wollten sondern diese ganz normal mit den anderen Variablen zusammen zur Messung eines Gesamtkonstruktes nutzen möchten.

Zwischen Initialfragebogen, in dem diese zwei Variablen abgefragt sind und dem nächsten Fragebogen, zu dem man per Bestätigungslink weitergeleitet wird ist dieser PHP-Code. Er befindet sich auf der ersten Seite des zweiten Fragebogens.

Der PHP-Code lautet:

$time = value('SD24')
$zeitpunkt = strtoime('Today'.$time);
mailSchedule(false, 2, strtotime('$zeitpunkt + 1days')
mailSchedule(false, 4, strtotime('$zeitpunkt + 2days')

$time = value('SD25')
$zeitpunkt = strtoime('Today'.$time);
mailSchedule(false, 3, strtotime('$zeitpunkt + 1days')
mailSchedule(false, 5, strtotime('$zeitpunkt + 2days')

1 Answer

0 votes
by SoSci Survey (327k points)

Im Initialfragebogen haben wir zwei Fragen, SD24 und SD25, deren Informationen wir als Zeitpunkte für das versenden der Serienmails nutzen wollen.

Im Fragebogen, der nach Aufrufen des Bestätigungslinks angezeigt wird steht, dass diese Variablen nicht im Projekt existierten und deshalb Kein Antwort-Wert erzeugt werden konnte.

Wenn Sie ein Double-Opt-In verwenden, dann verlässt der Befragte nach Versenden der Opt-In-Mail den Fragebogen und kehr anschließend zu einem neuen Fragebogen zurück. Dies ist ein neuer Fall im Datensatz, welcher keinen Zugriff auf die Daten aus dem ersten Fall hat.

Eine mögliche Lösung besteht darin, dass Sie die Werte von SD24 und SD25 in der Datnebank für Inhalte zwischenspeichern: Daten zwischen Interviews austauschen

Beachten Sie dabei, dass Sie die Personenkennung im ersten Fall nicht via caseSerial() bekommen, sondern aus der Variable der Opt-In-Frage.

by s150166 (110 points)
Was muss ich denn dann beim Datenbankschlüssel eintragen?

Meine zwei relevanten Variablen heißen SD24 und SD25.
Die Opt-In-Emailabfrage heißt EA01.

$key = 'SD-'.EA01; hat leider nicht funktioniert.
by SoSci Survey (327k points)
Versuchen Sie es hiermit:

$key = 'SD-'.value('EA01');
by s150166 (110 points)
Danke! Woran könnte es liegen, dass mir immernoch im darauffolgenden Fragebogen angezeigt wird:
"Die Variable SD24 gibt es in diesem Projekt nicht (siehe Variablen-Übersicht). Daher kann kein Antwort-Wert dafür ermittelt werden."
by SoSci Survey (327k points)
Im darauffolgenden Fragebogen müssen Sie die Daten mittels dbGet() auslesen, und dann statt value('SD24') die Daten nehmen, die Sie ausgelesen haben.

$info = dbGet('SD-'.caseSerial());
$time = $info[0];
....
by s150166 (110 points)
Leider hat es nicht funktioniert, dass am nächsten Tag um die Uhrzeit, die unter SD24 angegeben worden ist, eine entsprechende Serienmail mit einer Einladung zum Fragebogen versendet wurde. Ich hoffe, Sie können mir da nochmals behilflich sein.

Der Code lautet wie folgt:

$key = 'SD-'.value('SD24_01');
$time = dbGet($key);
$time= $key[0];
question('SD24_01', $time);

$data = dbGet($key);
if ($data)
  $group = $data[0];

$zeitpunkt = strtotime('Tomorrow'.$time);  
mailSchedule(false, 2, strtotime('$zeitpunkt'));
mailSchedule(false, 4, strtotime('$zeitpunkt + 1 days'));

$key1 = 'SD-'.value('SD25_01');
$time1 = dbGet($key1);
$time1= $key1[0];
question('SD25_01', $time1);

$data1 = dbGet($key1);
if ($data)
  $group = $data1[0];

$zeitpunkt1 = strtotime('Tomorrow'.$time1);  
mailSchedule(false, 3, strtotime('$zeitpunkt1'));
mailSchedule(false, 5, strtotime('$zeitpunkt1 + 1 days'));

----

$key = 'SD-'.value('EA01_01');
$time = dbGet($key);
$time= $key[0];
question('SD24_01', $time);

$data = dbGet($key);
if ($data)
  $group = $data[0];

$zeitpunkt = strtotime('Tomorrow'.$time);  
mailSchedule(false, 2, strtotime('$zeitpunkt'));
mailSchedule(false, 4, strtotime('$zeitpunkt + 1 days'));

$key1 = 'SD-'.value('EA01_01');
$time1 = dbGet($key1);
$time1= $key1[0];
question('SD25_01', $time1);

$data1 = dbGet($key1);
if ($data)
  $group = $data1[0];

$zeitpunkt1 = strtotime('Tomorrow'.$time1);  
mailSchedule(false, 3, strtotime('$zeitpunkt1'));
mailSchedule(false, 5, strtotime('$zeitpunkt1 + 1 days'));
by SoSci Survey (327k points)
> Leider hat es nicht funktioniert, dass am nächsten Tag um die Uhrzeit, die unter SD24 angegeben worden ist,

Bitte testen Sie die Zeitsteuerung evtl. erstmal mit 5 Minuten statt 24 Stunden. Lassen Sie sich die Zeitstempel auch mittels debug() anzeigen.

$zeitpunkt1 = strtotime('Tomorrow'.$time1);  

Da würde ich vermuten, dass das Leerzeichen nach "Tomorrow" fehlt:

$zeitpunkt1 = strtotime('Tomorrow'.$time1);  

Zum Prüfen wie gesagt...

debug(date('d.m.Y H:i', $zeitpunkt1));
by s105225 (130 points)
Leider funktioniert der Code auch mit einem Leerzeichen nicht:
$key = 'SD-'.value('EA01_01');
$time = dbGet($key);
$time= $key[0];
question('SD24_01', $time);

$data = dbGet($key);
if ($data)
  $group = $data[0];

$zeitpunkt = strtotime('Now '.$time);  
mailSchedule(false, 2, strtotime('$zeitpunkt'));
mailSchedule(false, 4, strtotime('$zeitpunkt + 120 seconds'));

$key1 = 'SD-'.value('EA01_01');
$time1 = dbGet($key1);
$time1= $key1[0];
question('SD25_01', $time1);

$data1 = dbGet($key1);
if ($data)
  $group = $data1[0];

$zeitpunkt1 = strtotime('Now '.$time1);  
mailSchedule(false, 3, strtotime('$zeitpunkt1'));
mailSchedule(false, 5, strtotime('$zeitpunkt1 + 120 seconds'));

debug(date('d.m.Y H:i', $zeitpunkt));


Im Debug-Modus werden die folgenden Fehlermeldungen angezeigt:
**Fehler im Fragebogen (Seite 2)**
Die Variable EA01_01 gibt es in diesem Projekt nicht (siehe Variablen-Übersicht). Daher kann kein Antwort-Wert dafür ermittelt werden.
** Warnung (Seite 2)**
Das Argument S, das in einer Funktion eines PHP-Blocks verwendet wurde, ist nicht bekannt und wird ignoriert.
** Warnung (Seite 2) **
Das dritte Argument in der Funktion mailSchedule() muss eine Zahl sein. Der Wert ist ungültig.
** Warnung (Seite 2) **
Das dritte Argument in der Funktion mailSchedule() muss eine Zahl sein. Der Wert ist ungültig.
** Fehler im Fragebogen (Seite 2) **
Die Variable EA01_01 gibt es in diesem Projekt nicht (siehe Variablen-Übersicht). Daher kann kein Antwort-Wert dafür ermittelt werden.
** Warnung (Seite 2) **
Das Argument S, das in einer Funktion eines PHP-Blocks verwendet wurde, ist nicht bekannt und wird ignoriert.
**Warnung (Seite 2)**
Das dritte Argument in der Funktion mailSchedule() muss eine Zahl sein. Der Wert ist ungültig.
**Warnung (Seite 2)**
Das dritte Argument in der Funktion mailSchedule() muss eine Zahl sein. Der Wert ist ungültig.
**Hinweis (Seite 2)**
Debug-Information für date('d.m.Y H:i', $zeitpunkt):
date('d.m.Y H:i', $zeitpunkt) = 11.02.2022 02:35 (string)

Haben Sie noch eine Idee, woran es liegen könnte? Danke!
by SoSci Survey (327k points)
> Die Variable EA01_01 gibt es in diesem Projekt nicht (siehe Variablen-Übersicht). Daher kann kein Antwort-Wert dafür ermittelt werden.

Gut, Fehlermeldungen müssen Sie erstmal beheben, bevor es funktionieren kann :) Wollen Sie hier auf eine Opt-In-Variable zugreifen? Dann prüfen Sie doch bitte den korrekten Namen der Variable in der Variablen-Übersicht.
by s105225 (130 points)
...wohl wahr! :) Ja genau, auf eine Opt-In Variable. Der Name stimmt laut Variablen-Übersicht.
by s105225 (130 points)
Die Meldungen, dass er EA01_01 nicht findet, habe ich wegbekommen. Beim Rest bin ich leider weiterhin ratlos.
by SoSci Survey (327k points)
Gehen wir Schritt für Schritt weiter. Nächtes potenzielles Problem:

$zeitpunkt = strtotime('Now '.$time);  

Die Angabe "Now 20:55" ist wenig sinnvoll, weil unklar ist, ob es *jetzt* oder um 20:55 sein soll. Was soll diese Zeile bezwecken?

mailSchedule(false, 2, strtotime('$zeitpunkt'));

Der Text "$zeitpunkt" ist keine gültige Zeit. Ich denke, Sie meinen das ohne Anführungszeichen. Und weil in $zeitpunkt schon ein Zeitstempel steht, eher das hier:

mailSchedule(false, 2, $zeitpunkt);

Und in der Zeile darunter:

mailSchedule(false, 4, strtotime('$zeitpunkt + 120 seconds'));

Das funktioniert ebenso wenig. Wenn Sie zum aktuellen Zeitpunkt 2 Minuten hinzu zählen möchten, muss es wie folgt formuliert werden:

mailSchedule(false, 4, strtotime('+120 seconds', $zeitpunkt));

Generell sollten Sie einfach prüfen, ob strtotime() etwas sinnvolles bekommt. Ergänzen Sie daher etwa die letzte Zeile wie folgt:

debug(strtotime('+120 seconds', $zeitpunkt));
debug(date('d.m.Y H:i', strtotime('+120 seconds', $zeitpunkt)));

Oder wenn Sie es gerne etwas besser verständlich hätten:

$2 = strtotime('+120 seconds', $zeitpunkt);
debug($t2);
debug(date('d.m.Y H:i', $t2));
by s105225 (130 points)
Danke schon mal für die schnelle Hilfe; der Code sieht jetzt wie folgt aus:

$key = 'SD-'.value('EA01');
$time = dbGet($key);
$time1= $key[0];
question('SD24_01', $time1);

$data = dbGet($key);
if ($data)
  $group = $data[0];

$zeitpunkt = strtotime($time1);  
mailSchedule(false, 2, $zeitpunkt);
mailSchedule(false, 4, $zeitpunkt);

$key1 = 'SD-'.value('EA01');
$time2 = dbGet($key1);
$time2= $key1[0];
question('SD25_01', $time2);

$data1 = dbGet($key1);
if ($data)
  $group = $data1[0];

$zeitpunkt1 = strtotime($time2);  
mailSchedule(false, 3, $zeitpunkt);
mailSchedule(false, 5, $zeitpunkt);

..die Fehlermeldungen werden langsam weniger!

Warnung (Seite 2)
Das Argument S, das in einer Funktion eines PHP-Blocks verwendet wurde, ist nicht bekannt und wird ignoriert.

Diese hier wird allerdings weiterhin angezeigt :(
by SoSci Survey (327k points)
Haben Sie überprüft, ob der Wert von $time1 passt, mittels debug($time1);

Je nachdem, was dort gespeichert ist, macht die folgende Zeile mehr oder weniger Sinne:

question('SD24_01', $time1);

Die Serienmails 3 und 4 werden laut diesem Code gleichzeitig verschickt. Dort tsteht zweimal dasselbe - ich bin nicht sicher, ob das gewünscht ist.

Und dann fehlen da noch gschweifte Klammern, damit SoSci Survey weiß, wie weit das if ($data) gilt. Zumal Sie da evtl. noch nicht ganz sauber zwischen $data und $data1 unterscheiden.

> Das Argument S, das in einer Funktion eines PHP-Blocks verwendet wurde, ist nicht bekannt und wird ignoriert.

Ich glaube, das kommt von dieser Zeile:

$time1= $key[0];

Ziemlich sicher meinten Sie

$time1= $time[0];
by s105225 (130 points)
Mit dem folgenden Code klappt es nun endlich:
$key = 'SD-'.value('EA01');
$time = dbGet($key);
$time1= $time[0];
question('SD24_01', $time1);

$data = dbGet($key);
if ($data)
  $group = $data[0];

$zeitpunkt = strtotime($time1);  

mailSchedule(false, 2, strtotime('+60 seconds', $zeitpunkt));

mailSchedule(false, 4, strtotime('+120 seconds', $zeitpunkt));

$key1 = 'SD-'.value('EA01');
$time2 = dbGet($key1);
$time3 = $time2[0];
question('SD25_01', $time2);

$data1 = dbGet($key1);
if ($data)
  $group = $data1[0];

$zeitpunkt1 = strtotime($time3);  
mailSchedule(false, 3, strtotime('+60 seconds', $zeitpunkt1));

mailSchedule(false, 5, strtotime('+120 seconds', $zeitpunkt1));

debug($time1);

Vielen vielen Dank für den super Support! Uhrzeiten und Ähnliches passen wir dann noch an, Hauptsache der PHP Code führt jetzt dazu, dass die Serienmails zur angegebenen Zeit verschickt werden :)!
Danke!!
by SoSci Survey (327k points)
Ich würde weiterhin vermuten, dass in diesen Zeilen noch etwas nicht stimmt:

$data1 = dbGet($key1);
if ($data)
  $group = $data1[0];

$zeitpunkt1 = strtotime($time3);

Das IF bezieht sich nur auf die eine Zeile und die Vermischung von $data1 und $data ist höchst verdächtig. Prüfen Sie bitte vor dem Versand gründlich, ob die Funktion auch inhaltlich korrekt arbeitet.
by s105225 (130 points)
edited by s105225
Geht jetzt! :)

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

...