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

0 votes

Hallo,

in meiner Studie versenden wir jeden Tag einen Fragebogen über einen Zeitraum von 21 Tagen.
Auf der ersten Seite des Fragebogens des ersten Tages steht folgender Code:

$start = date('2019-02-21 06:00:00');
for ($i=2; $i <= 21; $i++) {
  $j = $i - 1;  // adjust index for next day
  $next = strtotime($start." +".$j." day");
   mailSchedule(false, $i, $next);
}

Nun habe ich festgestellt, dass Benutzer, die diese Seite erneut aufrufen (z.B. weil Sie die Fragen nicht beantwortet haben), jedesmal neu die Serienmails generiert bekommen. Sie würden also in den folgenden Tagen mehrfach dieselbe Email bekommen.

Wie kann ich dies verhindern?

Danke!

in SoSci Survey (dt.) by s110155 (255 points)

1 Answer

0 votes

Jeder Teilnehmer bekommt jede Serienmail nur ein einziges mal zugestellt - außer wenn Sie mailResume()verwenden. Insofern sollten Sie mit Ihrem Code keine Probleme haben.

by SoSci Survey (129k points)
Ok - sie stehen aber als Eintrag doppelt und dreifach auf der Seite "Einladungen verschicken > Serienmails". Ist das normal? Selbst bei einmaligem Aufruf der Fragebogenseite entsteht ein doppelter Eintrag.
Es werden mehrere Versand-Aktionen auf dem Server geplant. Wenn die Aktion ausgeführt wird, prüft sie allerdings zunächst, ob die Serienmail bereits verschickt wurde und bricht dann ggf. ab.

Sie können es ja einfach mal testen, indem Sie $next = strtotime('+10 minutes') schreiben.
Ja, stimmt, die Mails werden nur einmal verschickt. Die Anzeige von doppelten Versandaktionen finde ich allerdings irreführend. Welchen Sinn könnte das haben?
Gibt es eine schnelle Möglichkeit, geplante Aktionen zu löschen (z.B. alle Serienmails für eine bestimmte Email-Adresse) oder muss man für jede geplante Versand-Aktion einzeln auf das rote Kreuzchen zum Löschen klicken?
> Welchen Sinn könnte das haben?

Gegenfrage: Warum rufen Sie mailSchedule() mehrfach auf? ;)

> Gibt es eine schnelle Möglichkeit, geplante Aktionen zu löschen (z.B. alle Serienmails für eine bestimmte Email-Adresse)

Sie können im Fragebogen deb Befehl mailRevoke() verwenden, um das zu erreichen. Eine Funktion in der Bedienoberfläche ist dafür nicht vorgesehen. Normalerweise hat man ja nicht so viele geplante Aktionen für eine Adresse.
:-) Da kommen wir zu meiner Eingangsfrage zurück, wie ich verhindern kann, dass der Code doppelt aufgerufen wird. Meine Erfahrung ist bisher, dass selbst wenn der Fragebogen nur einmal aufgerufen wird, zwei Mails geplant werden, und wenn der Fragebogen mehrfach aufgerufen wird, entsprechend weitere. Gibt es da eine Bedingung, die ich einbauen könnte? Danke!
Sie können getRoute() verwenden. Auf der ersten Seite liefert diese Funktion "start", auf späteren Seiten "next", wenn die Seite zum ersten mal gezeigt wird.

if (getRoute() != 'repeat') {
  // Der Code, der bei erneuter Anzeige der Seite nicht mehr laufen soll
}

Allerdings hilft das nichts, wenn der Teilnehmer den Link zum Aufruf des Fragebogens mehrfach anklickt.
...