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

Liebes SoSci Survey Team,

ich führe gerade eine längsschnittliche Erhebung mit Selbstrekrutierung durch (Baseline-Fragebogenlink: https://sosci.zdv.uni-mainz.de/spv/). Die Baseline-Erhebung und die Anmeldung für weitere Befragungen erfolgte bisher auch wunderbar. Nun stand heute der Versand der ersten Serienmail (Mailnummer 91) an und eine Teilnehmerin erhält bei Klick auf den Fragebogenlink stets folgende Fehlermeldung: „Zugriff verweigert Der übermittelte Zugangsschlüssel ist nicht oder nicht mehr gültig.“

Folgenden Code hatte ich verwendet, um die Serienmails nach Bestätigung der E-Mail-Adresse (Double-Opt-In) zu verschicken:

$info = panelData();
if ($info) {
  $group = $info['subgroup'];
  if ($group == 'AV') {
mailSchedule(false, 91, strtotime('+7 days'), ['expire'=> strtotime('+6 days')]); //Woche 1
mailSchedule(false, 92, strtotime('+11 days'), ['status' => 'incomplete']);
mailSchedule(false, 52, strtotime('+14 days'), ['expire'=> strtotime('+6 days')]); //Woche 2
mailSchedule(false, 53, strtotime('+18 days'), ['status' => 'incomplete']);
mailSchedule(false, 54, strtotime('+21 days'), ['expire'=> strtotime('+6 days')]); //Woche 3
mailSchedule(false, 55, strtotime('+25 days'), ['status' => 'incomplete']);
mailSchedule(false, 56, strtotime('+28 days'), ['expire'=> strtotime('+6 days')]); //Woche 4
mailSchedule(false, 57, strtotime('+32 days'), ['status' => 'incomplete']);
mailSchedule(false, 58, strtotime('+35 days'), ['expire'=> strtotime('+6 days')]); //Woche 5
mailSchedule(false, 59, strtotime('+39 days'), ['status' => 'incomplete']);
mailSchedule(false, 60, strtotime('+42 days'), ['expire'=> strtotime('+6 days')]); //Woche 6
mailSchedule(false, 61, strtotime('+46 days'), ['status' => 'incomplete']);
mailSchedule(false, 62, strtotime('+49 days'), ['expire'=> strtotime('+6 days')]); //Woche 7
mailSchedule(false, 63, strtotime('+53 days'), ['status' => 'incomplete']);
mailSchedule(false, 64, strtotime('+56 days'), ['expire'=> strtotime('+6 days')]); //Woche 8
mailSchedule(false, 65, strtotime('+60 days'), ['status' => 'incomplete']);
mailSchedule(false, 66, strtotime('+63 days'), ['expire'=> strtotime('+6 days')]); //Woche 9
mailSchedule(false, 67, strtotime('+67 days'), ['status' => 'incomplete']);
mailSchedule(false, 68, strtotime('+70 days'), ['expire'=> strtotime('+6 days')]); //Woche 10
mailSchedule(false, 69, strtotime('+74 days'), ['status' => 'incomplete']);
mailSchedule(false, 70, strtotime('+77 days'), ['expire'=> strtotime('+6 days')]); //Woche 11
mailSchedule(false, 71, strtotime('+81 days'), ['status' => 'incomplete']);
mailSchedule(false, 76, strtotime('+84 days'), ['expire'=> strtotime('+6 days')]); //Woche 12
mailSchedule(false, 77, strtotime('+88 days'), ['status' => 'incomplete']);
mailSchedule(false, 84, strtotime('+168 days'), ['expire'=> strtotime('+6 days')]); //Follow-Up 3 Monate
mailSchedule(false, 85, strtotime('+172 days'), ['status' => 'incomplete']);
mailSchedule(false, 80, strtotime('+252 days'), ['expire'=> strtotime('+6 days')]); //t3
mailSchedule(false, 81, strtotime('+256 days'), ['status' => 'incomplete']);
mailSchedule(false, 82, strtotime('+336 days'), ['expire'=> strtotime('+6 days')]); //t4
mailSchedule(false, 83, strtotime('+340 days'), ['status' => 'incomplete']);
  } else {
mailSchedule(false, 2, strtotime('+14 days'), ['expire'=> strtotime('+7 days')]);  // t0_1
mailSchedule(false, 3, strtotime('+18 days'), ['status' => 'incomplete']);
mailSchedule(false, 4, strtotime('+28 days'), ['expire'=> strtotime('+7 days')]); // t0_2
mailSchedule(false, 5, strtotime('+32 days'), ['status' => 'incomplete']);
mailSchedule(false, 6, strtotime('+42 days'), ['expire'=> strtotime('+7 days')]); // t0_3
mailSchedule(false, 7, strtotime('+46 days'), ['status' => 'incomplete']);
mailSchedule(false, 8, strtotime('+56 days'), ['expire'=> strtotime('+7 days')]); // t0_4
mailSchedule(false, 9, strtotime('+60 days'), ['status' => 'incomplete']);
mailSchedule(false, 10, strtotime('+70 days'), ['expire'=> strtotime('+7 days')]); // t0_5
mailSchedule(false, 11, strtotime('+74 days'), ['status' => 'incomplete']);
mailSchedule(false, 12, strtotime('+84 days'), ['expire'=> strtotime('+7 days')]); // t1
mailSchedule(false, 13, strtotime('+88 days'), ['status' => 'incomplete']);
mailSchedule(false, 14, strtotime('+98 days'), ['expire'=> strtotime('+7 days')]); // t1_1
mailSchedule(false, 15, strtotime('+102 days'), ['status' => 'incomplete']);
mailSchedule(false, 16, strtotime('+112 days'), ['expire'=> strtotime('+7 days')]); // t1_2
mailSchedule(false, 17, strtotime('+116 days'), ['status' => 'incomplete']);
mailSchedule(false, 18, strtotime('+126 days'), ['expire'=> strtotime('+7 days')]); // t1_3
mailSchedule(false, 19, strtotime('+130 days'), ['status' => 'incomplete']);
mailSchedule(false, 20, strtotime('+140 days'), ['expire'=> strtotime('+7 days')]); // t1_4
mailSchedule(false, 21, strtotime('+144 days'), ['status' => 'incomplete']);
mailSchedule(false, 22, strtotime('+154 days'), ['expire'=> strtotime('+7 days')]); // t1_5
mailSchedule(false, 23, strtotime('+158 days'), ['status' => 'incomplete']);
mailSchedule(false, 24, strtotime('+168 days'), ['expire'=> strtotime('+7 days')]); // t2
mailSchedule(false, 25, strtotime('+172 days'), ['status' => 'incomplete']);
mailSchedule(false, 26, strtotime('+182 days'), ['expire'=> strtotime('+7 days')]); // t2_1
mailSchedule(false, 27, strtotime('+186 days'), ['status' => 'incomplete']);
mailSchedule(false, 28, strtotime('+196 days'), ['expire'=> strtotime('+7 days')]); // t2_2
mailSchedule(false, 29, strtotime('+200 days'), ['status' => 'incomplete']);
mailSchedule(false, 30, strtotime('+210 days'), ['expire'=> strtotime('+7 days')]); // t2_3
mailSchedule(false, 31, strtotime('+214 days'), ['status' => 'incomplete']);
mailSchedule(false, 32, strtotime('+224 days'), ['expire'=> strtotime('+7 days')]); // t2_4
mailSchedule(false, 33, strtotime('+228 days'), ['status' => 'incomplete']);
mailSchedule(false, 34, strtotime('+238 days'), ['expire'=> strtotime('+7 days')]); // t2_5
mailSchedule(false, 35, strtotime('+242 days'), ['status' => 'incomplete']);
mailSchedule(false, 36, strtotime('+252 days'), ['expire'=> strtotime('+7 days')]); // t3
mailSchedule(false, 37, strtotime('+256 days'), ['status' => 'incomplete']);
mailSchedule(false, 38, strtotime('+266 days'), ['expire'=> strtotime('+7 days')]); // t3_1
mailSchedule(false, 39, strtotime('+270 days'), ['status' => 'incomplete']);
mailSchedule(false, 40, strtotime('+280 days'), ['expire'=> strtotime('+7 days')]); // t3_2
mailSchedule(false, 41, strtotime('+284 days'), ['expire' => 'incomplete']);
mailSchedule(false, 42, strtotime('+294 days'), ['expire'=> strtotime('+7 days')]); // t3_3
mailSchedule(false, 43, strtotime('+298 days'), ['expire' => 'incomplete']);
mailSchedule(false, 44, strtotime('+308 days'), ['expire'=> strtotime('+7 days')]); // t3_4
mailSchedule(false, 45, strtotime('+312 days'), ['status' => 'incomplete']);
mailSchedule(false, 46, strtotime('+322 days'), ['expire'=> strtotime('+7 days')]); // t3_5
mailSchedule(false, 47, strtotime('+326 days'), ['status' => 'incomplete']);
mailSchedule(false, 48, strtotime('+336 days'), ['expire'=> strtotime('+7 days')]); // t4
mailSchedule(false, 49, strtotime('+340 days'), ['status' => 'incomplete']);
  }
} else {
  // Fehlermeldung anzeigen, dass der Fragebogen nicht mit einem gültigen Teilnahmeschlüssel
  // aufgerufen wurde (z.B. nicht aus einer Serienmail heraus) oder dass der Adresseintrag
  // mittlerweile aus der Adressliste gelöscht wurde
  text('some-error');
}

Kann es sein, dass sich die ‚expire‘ – Funktion auf den Zeitpunkt der allerersten Mail (1 – Double-Opt-In) und nicht auf den Versand der entsprechenden Serienmail (91) bezieht? Also alle weiter versandten Fragebögen bereits 6 Tage nach Bestätigung der E-Mail-Adresse nicht mehr gültig sind? Und der Code eigentlich folgendermaßen lauten müsste:

$info = panelData();
if ($info) {
  $group = $info['subgroup'];
  if ($group == 'AV') {
mailSchedule(false, 91, strtotime('+7 days'), ['expire'=> strtotime('+13 days')]); //Woche 1
mailSchedule(false, 92, strtotime('+11 days'), ['status' => 'incomplete']);
mailSchedule(false, 52, strtotime('+14 days'), ['expire'=> strtotime('+20 days')]); //Woche 2
mailSchedule(false, 53, strtotime('+18 days'), ['status' => 'incomplete']);
mailSchedule(false, 54, strtotime('+21 days'), ['expire'=> strtotime('+27 days')]); //Woche 3
…

Ich habe sicherheitshalber die ‚expire‘-Daten schon einmal umgestellt. Falls der Grund für die Verweigerung des Zugriffs in der falschen Zahl liegt, wie stelle ich nun während der laufenden Erhebung am besten sicher, dass alle Personen den richtigen Fragebogen zum richtigen Zeitpunkt erhalten?

Oder gibt es eine alternative Erklärung dafür, dass der Zugriff verweigert wird? Bei allen Fragebögen ist Serienmail als Zugriffsoption eingestellt und bei den Serienmails ist unter „Fragebogen-Link -> Gültigkeit begrenzen“ nichts eingetragen.

Herzlichen Dank im Voraus und freundliche Grüße

1 Answer

0 votes
by SoSci Survey (307k points)

Die Funktion strtotime() berechnet einen Unix-Zeitstempel auf Basis dessen, was Sie in Klammern schreiben. Wenn Sie heute, am 13.03. die Funktion strtotime('+6 days') aufrufen, dann wird die Funktion den 19.03. als Unix-Zeitstempel berechnen. Das ist dann 1710872152.

Dieser Zeitstempel wird als Gültigkeit vermerkt. Ihre "+6 days" beziehen sich also durchweg auf den Zeitpunkt, als der Code gelaufen ist.

Und ja, es müsste aussehen wie unten.

Wenn Sie jetzt noch etwas retten möchten, müssten Sie der IT der Uni Mainz Bescheid geben und diese bitten, dass sie das Ablaufdaten aus den bisher schon für Ihr Projekt unter sosci_mail_delivery Einträgen in der Datenbank entfernen.

by s272730 (100 points)
Hallo Herr Leiner,

nur um sicher zu sein: Sie meinen also ein
UPDATE sosci_mail_delivery SET sendTime = NULL WHERE mailing = 179;
?

Viele Grüße
by SoSci Survey (307k points)
Pardon, die Information ist in einer anderen Tabelle. Und zwar müssten Sie in der sosci_acess_token eine Spalte "expiry" finden. Dort sollten die falschen Werte stehen, und diese müssten auf NULL gesetzt werden.

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

...