0 votes
ago in SoSci Survey (dt.) by s258267 (140 points)

Hallo,

ich plane eine Befragung mit Serienmailversand, nach Registrierung mittels Opt-in Frage.

Die Befragten werden außerdem um die Angabe eines Datums gebeten (gelöst über Datumseingabe mit Kalender). Ein Tag nach dem vom Probanden angegebenen Datum soll die Serienmail 4 verschickt werden. Sieben Tage danach soll die Serienmail 5 verschickt werden. Ich hätte gerne, dass die Mails zu einem bestimmten Zeitpunkt (in meinem Fall 10 Uhr an dem jeweiligen Tag) versendet werden. Ich habe bereits hier im Forum und fairerweise auch mit ChatGPT (Entschuldigung hierfür) recherchiert und bin zu folgendem Ergebnis gekommen:

$eingabe = strtotime(value('Q006'));

// Basis: Datum von Q006 + feste Uhrzeit 10:00
$basis10 = strtotime(date('Y-m-d', $eingabe) . ' 10:00');

// mehrere Mails relativ zu Q006, jeweils um 10:00 Uhr
mailSchedule(false, 4, strtotime('+1 day', $basis10)); // Folgetag 10:00
mailSchedule(false, 5, strtotime('+7 days', $basis10)); // +7 Tage 10:00

// Testversand
mailSchedule(false, 6, time() + 120); // in 2 Minuten

Leider stimmen die Zeitpunkte für die tatsächliche Befragung nicht ganz.
Ich habe den Test um etwa 16.20 Uhr am 07.01.2026 (Dieses Datum wurde auch ausgewählt) gestartet. Die Testmails kamen zum richtigen Zeitpunkt. Die anderen Serienmails sind jetzt allerdings für den 09.01 und 15.01, jeweils um etwa 1 Uhr geplant.
Das wäre vom Zeitpunkt leider zu spät, ich würde sie, entsprechend des eingegebenen Datums, gerne am 08.01 und 14.01 um 10 Uhr erhalten.

Wo liegt mein Fehler?

ago by SoSci Survey (362k points)
Sind Sie sicher, dass der Variablenname Q006 korrekt ist?

Eigentlich sollte value() für eine Datumsangabe direkt einen Zeitstempel liefern. Lassen Sie sich doch bitte mal ein paar Infos ausgeben ("Q006" bitte ggf. noch anpassen):

$eingabe = strtotime(value('Q006'));
debug(value('Q006'));
debug($eingabe);
ago by s258267 (140 points)
Die Variable war tatsächlich in der Anfrage hier nicht korrekt, das hatte ich gestern schon behoben, daher hat es wahrscheinlich auch in Teilen funktioniert (eigentlich Q006_01).

Ich habe mir die Infos ausgeben lassen und erhalte folgende Meldung:

Debug-Information für value('Q006_01'):
value('Q006_01') = (string)

Debug-Information für $eingabe:
$eingabe = false (boolean)
ago by SoSci Survey (362k points)
Okay, nun starten Sie den Fragebogen bitte auf der Seite mit Q006, wählen Sie ein Datum aus, springen Sie über die gelbe Zeile oben auf die Seite mit dem PHP-Code und posten Sie, was nun angezeigt wird.
ago by s258267 (140 points)
Die Frage Q006 ist im Registrierungsfragebogen, der PHP-Code ist im Fragebogen zur Vorbereitung des Serienmail-Versands. Wenn ich im Registrierungsfragebogen die Frage Q006 beantworte, erhalte ich diese Information nicht.

1 Answer

0 votes
ago by SoSci Survey (362k points)

Die Frage Q006 ist im Registrierungsfragebogen, der PHP-Code ist im Fragebogen zur Vorbereitung des Serienmail-Versands.

Okay, das bringt uns der Fehlersuche ein Stück näher. Sie sind in zwei unterschiedlichen Interviews, und dann kann er Zugriff auf die Antwort mittels value() nicht funktionieren.

Wenn Sie die Aufteilung so beibehalten möchten, dann müssten Sie die Information zum gewählten Zeitpunkt erst einmal vom einen Fragebogen zum anderen übergeben: Daten zwischen Interviews austauschen

Als Schlüssel können Sie die Personenkennung des Adresseintrags verwenden. Diese bekommen Sie von der Opt-In-Frage (im Registrierungs-Fragebogen auf der Seite nach dem Opt-In) und über caseSerial() im Fragebogen, welcher sich um den Mailversand kümmert.

ago by s258267 (140 points)
edited ago by s258267
Ich habe das mal analog der von Ihnen gesendeten Seite versucht umzusetzen...

Q006_01 = Variable Datum
Q005 = Personenkennung aus Registrierungsfragebogen

Der Code im Registrierungsfragebogen wäre dann wie folgt:
$opdatum = value('Q006_01');     
$key = 'Q0-'.value('Q005');     
dbSet($key, array($opdatum));

Vorangestellt zum Code für MailSchedule im nächsten Fragebogen sodann:
$key = 'Q0-'.caseSerial();   
$data = dbGet($key);
$opdatum = $data[0];  


Wenn ich so nun die Daten zwischen den Interviews ausgetauscht habe, wie mache ich dann weiter um den Serienmail Versand auszulösen? War mein eingegebener Code am Anfang hierfür korrekt?

Ich bin zudem etwas verwirrt, wenn ich mir die anderen Support Anfragen zu dem Thema anschaue, scheint "Daten zwischen Interviews austauschen" nie ein Thema zu sein...
Dass man getrennte Fragebögen beim Double-Opt-In hat, ist ja aber notwendig?
ago by SoSci Survey (362k points)
Das sieht schonmal gut aus. Ob es funktioniert, können Sie im zweiten Fragebogen testen, wenn Sie den ersten im Debug-Modus starten und ein paar Wegwerf-Adressen zum Testen verwenden.

$key = 'Q0-'.caseSerial();   
$data = dbGet($key);
$opdatum = $data[0];  
debug($opdatum);

> War mein eingegebener Code am Anfang hierfür korrekt?

Ja nachdem, ob in der Datenbank für Inhalte ein Unix-Zeitstempel (also eine große Zahl) gespeichert ist oder ein lesbares Datum, müssten Sie die erste Zeile Ihres Codes wie folgt anpassen:

$eingabe = $opdatum;
oder
$eingabe = strtotime($opdatum);

Ich bin recht sicher, dass es ein Zeitstempel sein sollte, aber das sehen Sie ja sofort. Ansonsten sehe ich in Ihrem PHP-Code keine offensichtlichen Fehler - ein paar Tests sollten Sie natürlich trotzdem machen.

> wenn ich mir die anderen Support Anfragen zu dem Thema anschaue, scheint "Daten zwischen Interviews austauschen" nie ein Thema zu sein...

Weil die Serienmails dort meist nicht abhängig von einer persönlichen Auswahl eines Zeitpunkts verschickt werden ... der Austausch der Information ist ja nur deshalb notwendig, weil Sie den Zeitpunkt des Mailversands auch nochmal personalisieren.
ago by s258267 (140 points)
edited ago by s258267
Es hat funktioniert!! Vielen vielen Dank

Der Fehler lag lediglich darin, dass ich den php-Code im ersten Fragebogen auf der selben Seite platziert habe, wie die Abfrage des Datums...

$eingabe = strtotime($opdatum); war dann auch korrekt..

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

...