0 votes
in SoSci Survey (dt.) by s337252 (120 points)

Hallo zusammen.

Ich habe einen Fragebogen mit Randomisierung (RA01, 4 Gruppen).
Auf Seite 2 wählt der Teilnehmer die Erinnerungsart (KA02: Kalender, Mail oder Kalender+Mail).
Über Seite 3 (GoTo, mit PHP) leite ich auf die passenden KAL- oder MAIL-Seiten weiter.
Problem: Wählt man nur ‚Kalender‘, werden mehrere KAL-Seiten nacheinander angezeigt (z. B. KALbi → KALmo → KALste → KALsti), obwohl nur eine Seite erscheinen sollte.
Bei ‚Kalender+Mail‘ läuft es scheinbar korrekt [wobei ich vermute, dass bei Kalender+Mail eine Ablenkung über Mail passier] .
Debug zeigt, dass RA01 und KA02 korrekt gesetzt sind.
Frage: Wie kann ich verhindern, dass mehrere KAL-Seiten durchlaufen werden?“


PHP Seite 3 GoTo:
$gruppe = value('RA01'); //
$kommu = value('KA02'); // <— statt KA02_01

if ($kommu == 1) {

if ($gruppe == 1) { goToPage('KALbi'); return; } // binaural
if ($gruppe == 2) { goToPage('KALmo'); return; } // monaural
if ($gruppe == 3) { goToPage('KALste'); return; } // stereo
if ($gruppe == 4) { goToPage('KALsti'); return; } // still

};

if ($kommu == 2) {

if ($gruppe == 1) { goToPage('MAILbi'); return; } // binaural
if ($gruppe == 2) { goToPage('MAILmo'); return; } // monaural
if ($gruppe == 3) { goToPage('MAILste'); return; } // stereo
if ($gruppe == 4) { goToPage('MAILsti'); return; } // still

};

if ($kommu == 3) { // Erst Kalender zeigen, Mail kommt danach (siehe Ursache 2)

if ($gruppe == 1) { goToPage('KALbi'); return; } // binaural
if ($gruppe == 2) { goToPage('KALmo'); return; } // monaural
if ($gruppe == 3) { goToPage('KALste'); return; } // stereo
if ($gruppe == 4) { goToPage('KALsti'); return; } // still

};

goToPage('end'); // letzter Fallback


PHP-Code Seite KALbi ganz unten:

$kommu = value('KA02'); // <— statt KA02_01
if ($kommu == 3) {

goToPage('MAILbi');   // erst nach der Kalender-Seite zu Mail
return;

}


PHP-Code Seite MAILbi:

// --- Reload-Schutz: Doppelplanung verhindern ---
// if ((int) value('MAIL_PLANNED') === 1) {
// goToPage('end');
// return;
// }

// --- Nur wenn Gruppe = 1 (bi) und Kommunikationsweg passt ---
$gruppe = (int) value('RA01'); // 1..4
$kommu = (int) value('KA02'); // 1=Kalender, 2=Mail, 3=Kalender+Mail
if ($gruppe !== 1 || !in_array($kommu, [2,3], true)) {

goToPage('end');
return;

}

// Schritt 1: Wunschzeit für heute Abend auslesen
$mailzeitAbends = value('KA03_01'); // z. B. "20:15"

// Schritt 2: Zeitdifferenz bis zur Wunschzeit berechnen
$jetzt = time();
$zielzeit = strtotime($mailzeitAbends);

if ($jetzt > $zielzeit) {

// Wenn die Wunschzeit heute schon vorbei ist → morgen um die Uhrzeit
$zielzeit = strtotime('tomorrow ' . $mailzeitAbends);

}

// 10 Minuten abziehen (600 Sekunden), damit die Mail zur Wunschzeit garantiert da ist
$zielzeit = $zielzeit - 600;

$diffSekunden = $zielzeit - $jetzt;

// Sicherheit: falls Differenz negativ ist → mindestens 20 Sekunden
if ($diffSekunden < 20) {

$diffSekunden = 20;

}

// Schritt 3: Mailversand ID 5 - 11 planen – täglich zur Wunschzeit
mailSchedule(false, 5, $diffSekunden + 0246060); // Tag 0
mailSchedule(false, 6, $diffSekunden + 1
246060); // Tag 1
mailSchedule(false, 7, $diffSekunden + 2246060); // Tag 2
mailSchedule(false, 8, $diffSekunden + 3
246060); // Tag 3
mailSchedule(false, 9, $diffSekunden + 4246060); // Tag 4
mailSchedule(false, 10, $diffSekunden + 5
246060); // Tag 5
mailSchedule(false, 11, $diffSekunden + 62460*60); // Tag 6

// TEST Schritt 3: Mailversand ID 5 - 11 planen – im Test alle 1 Minute versetzt - fürs Live löschen
// mailSchedule(false, 5, $diffSekunden + 060); // sofort
// mailSchedule(false, 6, $diffSekunden + 1
60); // +1 Minute
// mailSchedule(false, 7, $diffSekunden + 260); // +2 Minuten
// mailSchedule(false, 8, $diffSekunden + 3
60); // +3 Minuten
// mailSchedule(false, 9, $diffSekunden + 460); // +4 Minuten
// mailSchedule(false, 10, $diffSekunden + 5
60); // +5 Minuten
// mailSchedule(false, 11, $diffSekunden + 6*60); // +6 Minuten

// --- Flag setzen und auf Endseite weiterleiten ---
// put('MAIL_PLANNED', 1);
// goToPage('end');
// return;


die anderen 3 KAL (Kalender) und MAIL (Serienmail) Seiten sind dementsprechend.

1 Answer

0 votes
by SoSci Survey (356k points)

Wo haben Sie denn das return her? Das können Sie entfernen :)

Wählt man nur ‚Kalender‘, werden mehrere KAL-Seiten nacheinander angezeigt

Das dürfte daran liegen, dass die Variable $gruppe in dem Fall keinen der Werte 1, 2, 3 oder 4 hat, und deshalb gar kein Filter greift.

Mit einem Dutzend Serien zu arbeiten und wild zu springen, ist m.E. ziemlich fehleranfällig. Worin unterscheiden sich die Seiten denn?

by s337252 (120 points)
Das  return habe ich entweder von meiner Statistik-Nachhilfe oder es ist eine Weiterentwicklung von ChatGPT.
Jede der 4 Gruppen erhält eine eigene Intervention. Darum gibt es 4 verschiedene Kalenderseiten mit Gruppen-individuellen Texten und 4 Mail-Seiten für die jeweilige unterschiedliche Serienmail.
by s337252 (120 points)
Ich habe die returns nun entnommen, das Verhalten ändert sich jedoch nicht. Also es werden nach wie vor alle Kalenderseiten durchlaufen.
Laut dem Debug wird die Variable $gruppe ("RA01" für Randomisierung) jedoch gezogen.
Dementsprechend startet es manchmal im ersten Kalender und durchläuft die letzten drei,
oder startet im zweiten Kalender und durchläuft die letzten zwei, usw. ...

Hätte da noch jemand eine Idee?
by SoSci Survey (356k points)
> es ist eine Weiterentwicklung von ChatGPT.

Seien Sie sich bitte bewusst, dass ChatGPT keine Ahnung von SoSci Survey hat ;)

> Laut dem Debug wird die Variable $gruppe ("RA01" für Randomisierung) jedoch gezogen.

Bitte posten Sie doch mal die vollständige Debug-Information der Seite. Dann können wir uns ansehen, was da passiert.

Wie ich oben schon geschrieben habe, ist goToPage() und viele Seiten nicht immer sinnvoll. Seien Sie sich bitte bewusst, dass der Fragebogen zu der Seite springt und den Rest der Seite (und damit auch die weiteren Filter) nicht mehr bearbeitet, sobald ein goToPage() ausgeführt wird. Und ab der Seite, die Sie da anspringen, geht es dann linear weiter, wenn Sie nichts anderes einstellen.

setPageOrder() ist oftmals eleganter, Ich wiederhole auch gerne nochmal meine Frage von oben:

> Worin unterscheiden sich die Seiten denn?
by s337252 (120 points)
Vielen Dank schonmal für die Antworten und das Angebot, sich die Debug-Info anzuschauen.

---

Durchgang 1:

Folgend die Debug-Info, bevor nach der Randomisierung die Frage beantwortet wurde, auf welche Weise für eine folgende Intervention erinnert werden soll:

[Information]    Interview gestartet (neue Nummer 821)
[Information]    Der Fragebogen 2_4RKMI im Projekt sleepsounds wird verwendet
[Verarbeitung]    Erstelle Seite 1 in Fragebogen 2_4RKMI
[Inhalt]    Erstelle Frage RA01
[Information]    Vom Zufallsgenerator RA01 wurden folgende Codes gezogen: 4
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 2
[Verarbeitung]    Erstelle Seite 2 in Fragebogen 2_4RKMI
[Inhalt]    Erstelle Frage KA02
[Inhalt]    Erstelle Frage KA03


Ich bin in Gruppe 4 (letzte Gruppe) gelandet und habe nun Kalender als Erinnerungsform ausgewählt. Nach "Weiter" klicken lande ich auf der Kalender-Seite; Debug-Information:

[Information]    Interview Nummer 821 wird fortgesetzt
[Information]    Der Fragebogen 2_4RKMI im Projekt sleepsounds wird verwendet
[Information]    Die Verweildauer auf Seite 2 war 397 Sekunden
[Verarbeitung]    Lese Antworten von Seite 1+2
[Information]    Antwort auf KA02 = 1
[Information]    Antwort auf KA03_01 = 21:00
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Information]    Verarbeitung der Antworten mittels PHP (Seite 2)
[Verarbeitung]    Erstelle Seite 3 in Fragebogen 2_4RKMI
[Information]    value("RA01") = 4
[Information]    value("KA02") = 1
[Verarbeitung]    Springe zur Seite KALsti (Nr. 7)
[Verarbeitung]    Erstelle Seite 7 in Fragebogen 2_4RKMI
[Inhalt]    Erstelle Frage KA01
[Information]    value("KA02") = 1


nach "Weiter" lande ich auf der end-Seite:

[Information]    Interview Nummer 821 wird fortgesetzt
[Information]    Der Fragebogen 2_4RKMI im Projekt sleepsounds wird verwendet
[Information]    Die Verweildauer auf Seite 7 war 65 Sekunden
[Verarbeitung]    Lese Antworten von Seite 3+7
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 8 in Fragebogen 2_4RKMI
[Information]    value("RA01") = 4
[Information]    value("KA02") = 1
[Verarbeitung]    Springe zum Ende der Befragung
[Verarbeitung]    Erstelle die letzte Seite des Fragebogens

---

Durchgang 2:

Ich habe den Debug neu gestartet und bin nach Randomisierung, bevor ich die Erinnerungsart wähle, nun in Gruppe 1 gelandet.
Debug-Information:

[Information]    Interview gestartet (neue Nummer 823)
[Information]    Der Fragebogen 2_4RKMI im Projekt sleepsounds wird verwendet
[Verarbeitung]    Erstelle Seite 1 in Fragebogen 2_4RKMI
[Inhalt]    Erstelle Frage RA01
[Information]    Vom Zufallsgenerator RA01 wurden folgende Codes gezogen: 1
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 2
[Verarbeitung]    Erstelle Seite 2 in Fragebogen 2_4RKMI
[Inhalt]    Erstelle Frage KA02
[Inhalt]    Erstelle Frage KA03


Ich wähle Kalender und klicke "Weiter". Nun bin ich auf der Kalender-Seite.
Debug-Info:

[Information]    Interview Nummer 823 wird fortgesetzt
[Information]    Der Fragebogen 2_4RKMI im Projekt sleepsounds wird verwendet
[Information]    Die Verweildauer auf Seite 2 war 86 Sekunden
[Verarbeitung]    Lese Antworten von Seite 1+2
[Information]    Antwort auf KA02 = 1
[Information]    Antwort auf KA03_01 = 21:00
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Information]    Verarbeitung der Antworten mittels PHP (Seite 2)
[Verarbeitung]    Erstelle Seite 3 in Fragebogen 2_4RKMI
[Information]    value("RA01") = 1
[Information]    value("KA02") = 1
[Verarbeitung]    Springe zur Seite KALbi (Nr. 4)
[Verarbeitung]    Erstelle Seite 4 in Fragebogen 2_4RKMI
[Inhalt]    Erstelle Frage KA04
[Information]    value("KA02") = 1


nun klicke ich auf "Weiter" und lande auf der nächsten Kalenderseite der Gruppe 4.
Debug-Info:

[Information]    Interview Nummer 823 wird fortgesetzt
[Information]    Der Fragebogen 2_4RKMI im Projekt sleepsounds wird verwendet
[Information]    Die Verweildauer auf Seite 4 war 170 Sekunden
[Verarbeitung]    Lese Antworten von Seite 3+4
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 5 in Fragebogen 2_4RKMI
[Inhalt]    Erstelle Frage KA05
[Information]    value("KA02") = 1


nun klicke ich auf "Weiter" und lande auf der nächsten Kalenderseite der Gruppe 4.
Debug-Info:

[Information]    Interview Nummer 823 wird fortgesetzt
[Information]    Der Fragebogen 2_4RKMI im Projekt sleepsounds wird verwendet
[Information]    Die Verweildauer auf Seite 5 war 69 Sekunden
[Verarbeitung]    Lese Antworten von Seite 5
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 6 in Fragebogen 2_4RKMI
[Inhalt]    Erstelle Frage KA06
[Information]    value("KA02") = 1


nun klicke ich auf "Weiter" und lande auf einer nächsten Kalenderseite.
Debug-Info:

[Information]    Interview Nummer 823 wird fortgesetzt
[Information]    Der Fragebogen 2_4RKMI im Projekt sleepsounds wird verwendet
[Information]    Die Verweildauer auf Seite 6 war 43 Sekunden
[Verarbeitung]    Lese Antworten von Seite 6
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 7 in Fragebogen 2_4RKMI
[Inhalt]    Erstelle Frage KA01
[Information]    value("KA02") = 1

nun klicke ich auf "Weiter" und lande auf der end-Seite.
Debug-Info:
[Information]    Interview Nummer 823 wird fortgesetzt
[Information]    Der Fragebogen 2_4RKMI im Projekt sleepsounds wird verwendet
[Information]    Die Verweildauer auf Seite 7 war 58 Sekunden
[Verarbeitung]    Lese Antworten von Seite 7
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 8 in Fragebogen 2_4RKMI
[Information]    value("RA01") = 1
[Information]    value("KA02") = 1
[Verarbeitung]    Springe zum Ende der Befragung
[Verarbeitung]    Erstelle die letzte Seite des Fragebogens

---


Bedauerlicher Weise habe noch weniger Ahnung von SoSci und vom Programmieren, als ChatGPT und habe mir leider ein Projekt auferlegt, wo ich nicht im Ansatz ahnte, wie sehr es mich überfordert.
Bzgl. goToPage() oder setPageOrder() brauche ich dann wohl dringend weitere Tipps oder jemanden, der mal in mein Projekt reinschaut. Gerne ändere ich da was um, sodass es dann klappt. Kann ich goToPage() einfach mit setPageOrder() tauschen?

Die Frage "Worin unterscheiden sich die Seiten denn?" kann ich aktuell scheinbar dann gar nicht richtig gut beantworten...
Ich versuche es nochmals:
Die KAL-Seiten haben jeweils einen integrierten Download-Button, sodass die Probanden sind dann für ihre Intervention einen Kalendereintrag machen können. Die Texte sind zum Teil auf die Intervention hin individualisiert. Also der Text von Kalender KALsti lässt sich nicht tauschen mit KALbi, bspw..
Die MAL-Seiten stoßen demensprechend die Gruppen-individuellen Serienmails an. Also jede Gruppe hat in den Mails jeweils etwas anderes stehen. Die Serenmails von Gruppe 4 sti passen nicht zur Intervention der Gruppe 1 bi.
by SoSci Survey (356k points)
> [Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 2

Das sieht so aus, dass Sie den Zufallsgenerator auf eine separate Seite gelegt haben. Das ist im Prinzip okay, aber wenn Sie ihn direkt oben auf Seite 2 legen, können Sie einige spezielle Proleme mit Pflichtantworten vermeiden.

bei den Fragen KA02 und KA03 müssen Sie mir bitte kurz helfen. Was sind das für Fragetypen, und inwiefern spielen die Antworten eine Rolle für den späteren Code? SPeziell KA02 verwenden Sie im Filter ja ganz zentral.

> Bedauerlicher Weise habe noch weniger Ahnung von SoSci und vom Programmieren, als ChatGPT

Wahrscheinlich werden Sie nicht umhin kommen, jetzt ins kalte Wasser der Programmierung zu springen. Keine Sorge, das ist machbar, und ich helfe Ihnen hier im Online-Support dabei. Aber Sie müssen auch ein wenig in die Anleitung reinlesen - zum Beispiel, was es mit goToPage() auf sich hat, und wie es sich von setPageOrder() unterscheidet.

Aber weiter im Text...

> Ich bin in Gruppe 4 (letzte Gruppe) gelandet und habe nun Kalender als Erinnerungsform ausgewählt. Nach "Weiter" klicken lande ich auf der Kalender-Seite;

Soweit so gut. Was haben sie auf dieser Seite ("KALsti") denn gemacht, damit Sie anschleßend zum Ende des Fragebogens kommen? Oder ist das einfach die vorletzte Seite?

> nun klicke ich auf "Weiter" und lande auf der nächsten Kalenderseite der Gruppe 4.

Im zweiten Durchgang kommen Sie (erstmal korrekt) zu einer der vorderen Seiten. Nun macht SoSci Survey ab dort aber einfach linear weiter. Wenn Sie auf der Seite noch folgenden Befehl platzieren würden, dann wüsste SoSci Survey, wo es nach der Seite stattdessen weitergehen soll:

setNextPage('end');

Ich bin nicht sicher, ob Sie damit schonmal weiter kommen, aber sehen Sie sich das mal an und testen Sie mal. Tipp: Zum gezielten Testen können Sie übrigens in der gelben Leiste oben für RG01 auch beliebige Werte einstellen.

> Die KAL-Seiten haben jeweils einen integrierten Download-Button, sodass die Probanden sind dann für ihre Intervention einen Kalendereintrag machen können.

Ich greife diesen einzelnen Unterschied mal als Beispiel heraus, um eine effizientere Logik zu erklären. Diese wäre: Unabhängig von der Auswahl wird immer dieselbe Seite angezeigt, aber mit einem kleinen PHP-Filter sorgen Sie dafür, dass der Download-Button entweder angezeigt wird oder eben nicht.

> Die Texte sind zum Teil auf die Intervention hin individualisiert

Die Intervention entspricht der Gruppen, die RG01 zieht? Dann wäre die Lösung entspr. der Anleitung zur Randomisierung, dass Sie wieder dieselbe Seite verwenden - aber abhängig von der Ziehung an dieser Stelle einen unterschiedlichen Inhalt anzeigen. Sehen Sie sich dafür bitte mal folgende Anleitung an: https://www.soscisurvey.de/help/doku.php/de:create:randomization-text
by s337252 (120 points)
Ich tüftele mit Ihren Hinweisen weiter. Vielen Dank für die Tipps.


Ich beschreibe einmal detaillierter meinen Fragebogen im Status quo:
Zweck der Studie: Es sollen 4 Gruppen randomisiert eingeteilt werden. Jede Gruppe erhält eine andere Intervention. Diese Intervention soll als Behandlung 7 Tage laufen. Dazu sollen sich die Probanden eine Erinnerungsart aussuchen:
1) Kalender,
2) E-Mail oder
3) Kalender und E-Mail.
Jeder Kalender hat einen jeweils anderen google drive link, bzw. Gruppe 4 ohne, implementiert.
Jede Mail-Seite leitet auf eine Gruppe von Serienmails ein, welche pro Gruppe einen jeweils anderen google drive link beinhaltet, bzw. Gruppe 4 ohne.
Gruppe 1 = bi     / binaurale beats
Gruppe 2 = mo    / monaurale beats
Gruppe 3 = ste    / stereophone Musik
Gruppe 3 = sti    / Stille

Mein Fragebogen [2_4RKMI] hat 11 Seiten + end-Seite:
Überblick:
    Seite 01 RAND: Randomisierung
    Seite 02 Wahl: Auswahl und Texteingabe offen
    Seite 03 GoTo: Laufbefehl
    Seite 04 – 05 KAL…: Kalenderseite pro Gruppe
    Seite 08 – 11 MAIL…: Mailseiten pro Gruppe
Im Detail:
Seite 01 RAND: ist eine Seite, um eine gleichverteilte Randomisierung durchzuführen.
Seite 02 Wahl: lässt zum einen eine Auswahl und zum anderen eine Texteingabe offen zu.
    Aufbau Seite:
a)    Fragenblock [KA02] Wahl
Die Auswahl K02 ist für eine Erinnerungsform einer Intervention.
    01 für Kalender
    02 für tägliche E-Mail
    03 für Kalender und tägliche E-Mail
b)    HTML-Code für Standardmäßige Uhrzeit*
c)    Fragenblock [KA03] Uhrzeit
Die Texteingabe offen KA03 ist für die Eingabe einer Wunschuhrzeit der Erinnerung. Voreingefüllt als *HTML ist 21:00 h als Standardwert.
Seite 03 GoTo: soll dann gemäß der Randomisierung die Kalender- und Mailzuweisung regeln.
    Auf der Seite ist ausschließlich ein PHP-Code:
$gruppe = value('RA01'); //
$kommu  = value('KA02');   // <— statt KA02_01

if ($kommu == 1) {
    if ($gruppe == 1) { goToPage('KALbi'); } // binaural
    if ($gruppe == 2) { goToPage('KALmo'); } // monaural
    if ($gruppe == 3) { goToPage('KALste'); } // stereo
    if ($gruppe == 4) { goToPage('KALsti'); } // still
 };

if ($kommu == 2) {
    if ($gruppe == 1) { goToPage('MAILbi'); } // binaural
    if ($gruppe == 2) { goToPage('MAILmo'); } // monaural
    if ($gruppe == 3) { goToPage('MAILste'); } // stereo
    if ($gruppe == 4) { goToPage('MAILsti'); } // still
};

if ($kommu == 3) {       // Erst Kalender zeigen, Mail kommt danach (siehe Ursache 2)
    if ($gruppe == 1) { goToPage('KALbi'); } // binaural
    if ($gruppe == 2) { goToPage('KALmo'); } // monaural
    if ($gruppe == 3) { goToPage('KALste'); } // stereo
    if ($gruppe == 4) { goToPage('KALsti'); } // still
 };

goToPage('end'); // letzter Fallback

Seite 04 KALbi: hierbei handelt es sich um den Kalender für die Gruppe 1 bi
    Aufbau Seite:
a)    Fragenblock [KA04] Kalendereintrag Klang bi -> Einfacher Text-Baustein
b)    HTML-Code,
um die Wunschuhrzeit aus KA03 abzugreifen,
einen funktionierenden Downloadbutton darzustellen
und im Kalendereintrag den für die Gruppe passenden google drive link mitzuliefern
c)    PHP-Code:
$kommu  = value('KA02');   // <— statt KA02_01
if ($kommu == 3) {
    goToPage('MAILbi');   // erst nach der Kalender-Seite zu Mail
//    return;
}

Seite 05 KALmo: hierbei handelt es sich um den Kalender für die Gruppe 2 mo
    Aufbau Seite:
a)    Fragenblock [KA05] Kalendereintrag Klang bi -> Einfacher Text-Baustein
b)    HTML-Code,
um die Wunschuhrzeit aus KA03 abzugreifen,
einen funktionierenden Downloadbutton darzustellen
und im Kalendereintrag den für die Gruppe passenden google drive link mitzuliefern
c)    PHP-Code:
$kommu  = value('KA02');   // <— statt KA02_01
if ($kommu == 3) {
    goToPage('MAILmo');   // erst nach der Kalender-Seite zu Mail
//    return;
}

Seite 06 KALste: hierbei handelt es sich um den Kalender für die Gruppe 3 ste
    Aufbau Seite:
a)    Fragenblock [KA06] Kalendereintrag Klang bi -> Einfacher Text-Baustein
b)    HTML-Code,
um die Wunschuhrzeit aus KA03 abzugreifen,
einen funktionierenden Downloadbutton darzustellen
und im Kalendereintrag den für die Gruppe passenden google drive link mitzuliefern
c)    PHP-Code:
$kommu  = value('KA02');   // <— statt KA02_01
if ($kommu == 3) {
    goToPage('MAILste');   // erst nach der Kalender-Seite zu Mail
//    return;
}

Seite 07 KALsti: hierbei handelt es sich um den Kalender für die Gruppe 4 sti
    Aufbau Seite:
a)    Fragenblock [KA01] Kalendereintrag Klang sti -> Einfacher Text-Baustein
b)    HTML-Code,
um die Wunschuhrzeit aus KA03 abzugreifen,
einen funktionierenden Downloadbutton darzustellen
und eine Bitte, sich einen ruhigen Ort zu suchen (kein google drive link)
c)    PHP-Code:
$kommu  = value('KA02');   // <— statt KA02_01
if ($kommu == 3) {
    goToPage('MAILsti');   // erst nach der Kalender-Seite zu Mail
//    return;
}

Seite 08 MAILbi: hierbei handelt es sich um die Serienmail für die Gruppe 1 bi
Auf der Seite ist ausschließlich ein PHP-Code; ich habe einen Reload-Schutz versucht, der aber nicht funktioniert und daher auskommentiert ist:
    // --- Reload-Schutz: Doppelplanung verhindern ---
// if ((int) value('MAIL_PLANNED') === 1) {
//     goToPage('end');
//     return;
// }

// --- Nur wenn Gruppe = 1 (bi) und Kommunikationsweg passt ---
$gruppe = (int) value('RA01');  // 1..4
$kommu  = (int) value('KA02');  // 1=Kalender, 2=Mail, 3=Kalender+Mail
if ($gruppe !== 1 || !in_array($kommu, [2,3], true)) {
    goToPage('end');
//    return;
}

// Schritt 1: Wunschzeit für heute Abend auslesen
$mailzeitAbends = value('KA03_01'); // z. B. "20:15"

// Schritt 2: Zeitdifferenz bis zur Wunschzeit berechnen
$jetzt = time();
$zielzeit = strtotime($mailzeitAbends);

if ($jetzt > $zielzeit) {
    // Wenn die Wunschzeit heute schon vorbei ist → morgen um die Uhrzeit
    $zielzeit = strtotime('tomorrow ' . $mailzeitAbends);
}

// 10 Minuten abziehen (600 Sekunden), damit die Mail zur Wunschzeit garantiert da ist
$zielzeit = $zielzeit - 600;

$diffSekunden = $zielzeit - $jetzt;

// Sicherheit: falls Differenz negativ ist → mindestens 20 Sekunden
if ($diffSekunden < 20) {
    $diffSekunden = 20;
}

// Schritt 3: Mailversand ID 5 - 11 planen – täglich zur Wunschzeit
mailSchedule(false, 5, $diffSekunden + 0*24*60*60); // Tag 0
mailSchedule(false, 6, $diffSekunden + 1*24*60*60); // Tag 1
mailSchedule(false, 7, $diffSekunden + 2*24*60*60); // Tag 2
mailSchedule(false, 8, $diffSekunden + 3*24*60*60); // Tag 3
mailSchedule(false, 9, $diffSekunden + 4*24*60*60); // Tag 4
mailSchedule(false, 10, $diffSekunden + 5*24*60*60); // Tag 5
mailSchedule(false, 11, $diffSekunden + 6*24*60*60); // Tag 6

// TEST Schritt 3: Mailversand ID 5 - 11 planen – im Test alle 1 Minute versetzt - fürs Live löschen
// mailSchedule(false, 5, $diffSekunden + 0*60); // sofort
// mailSchedule(false, 6, $diffSekunden + 1*60); // +1 Minute
// mailSchedule(false, 7, $diffSekunden + 2*60); // +2 Minuten
// mailSchedule(false, 8, $diffSekunden + 3*60); // +3 Minuten
// mailSchedule(false, 9, $diffSekunden + 4*60); // +4 Minuten
// mailSchedule(false, 10, $diffSekunden + 5*60); // +5 Minuten
// mailSchedule(false, 11, $diffSekunden + 6*60); // +6 Minuten

// --- Flag setzen und auf Endseite weiterleiten ---
// put('MAIL_PLANNED', 1);
// goToPage('end');
// return;

Seite 09 MAILmo: hierbei handelt es sich um die Serienmail für die Gruppe 2 mo
Auf der Seite ist ausschließlich ein PHP-Code ( … =gekürzte Version):

// --- Nur wenn Gruppe = 2 (mo) und Kommunikationsweg passt ---
$gruppe = (int) value('RA01');  // 1..4
$kommu  = (int) value('KA02');  // 1=Kalender, 2=Mail, 3=Kalender+Mail
if ($gruppe !== 2 || !in_array($kommu, [2,3], true)) {
    goToPage('end');
//    return;
}

// Schritt 1: Wunschzeit für heute Abend auslesen
$mailzeitAbends = value('KA03_01'); // z. B. "20:15"

// Schritt 2: Zeitdifferenz bis zur Wunschzeit berechnen
$jetzt = time();
$zielzeit = strtotime($mailzeitAbends);

if ($jetzt > $zielzeit) {
    // Wenn die Wunschzeit heute schon vorbei ist → morgen um die Uhrzeit
    $zielzeit = strtotime('tomorrow ' . $mailzeitAbends);
}

// 10 Minuten abziehen (600 Sekunden), damit die Mail zur Wunschzeit garantiert da ist
$zielzeit = $zielzeit - 600;

$diffSekunden = $zielzeit - $jetzt;

// Sicherheit: falls Differenz negativ ist → mindestens 20 Sekunden
if ($diffSekunden < 20) {
    $diffSekunden = 20;
}

// Schritt 3: Mailversand planen – täglich zur Wunschzeit
mailSchedule(false, 12, $diffSekunden + 0*24*60*60); // Tag 0
mailSchedule(false, 13, $diffSekunden + 1*24*60*60); // Tag 1
mailSchedule(false, 14, $diffSekunden + 2*24*60*60); // Tag 2
mailSchedule(false, 15, $diffSekunden + 3*24*60*60); // Tag 3
mailSchedule(false, 16, $diffSekunden + 4*24*60*60); // Tag 4
mailSchedule(false, 17, $diffSekunden + 5*24*60*60); // Tag 5
mailSchedule(false, 18, $diffSekunden + 6*24*60*60); // Tag 6


Seite 10 MAILste: hierbei handelt es sich um die Serienmail für die Gruppe 3 ste
Auf der Seite ist ausschließlich ein PHP-Code ( … =gekürzte Version):

// --- Nur wenn Gruppe = 3 (ste) und Kommunikationsweg passt ---
$gruppe = (int) value('RA01');  // 1..4
$kommu  = (int) value('KA02');  // 1=Kalender, 2=Mail, 3=Kalender+Mail
if ($gruppe !== 3 || !in_array($kommu, [2,3], true)) {
    goToPage('end');
//    return;
}

// Schritt 1: Wunschzeit für heute Abend auslesen
$mailzeitAbends = value('KA03_01'); // z. B. "20:15"

// Schritt 2: Zeitdifferenz bis zur Wunschzeit berechnen
$jetzt = time();
$zielzeit = strtotime($mailzeitAbends);

if ($jetzt > $zielzeit) {
    // Wenn die Wunschzeit heute schon vorbei ist → morgen um die Uhrzeit
    $zielzeit = strtotime('tomorrow ' . $mailzeitAbends);
}

// 10 Minuten abziehen (600 Sekunden), damit die Mail zur Wunschzeit garantiert da ist
$zielzeit = $zielzeit - 600;

$diffSekunden = $zielzeit - $jetzt;

// Sicherheit: falls Differenz negativ ist → mindestens 20 Sekunden
if ($diffSekunden < 20) {
    $diffSekunden = 20;
}

// Schritt 3: Mailversand planen – täglich zur Wunschzeit
mailSchedule(false, 19, $diffSekunden + 0*24*60*60); // Tag 0
mailSchedule(false, 20, $diffSekunden + 1*24*60*60); // Tag 1
mailSchedule(false, 21, $diffSekunden + 2*24*60*60); // Tag 2
mailSchedule(false, 22, $diffSekunden + 3*24*60*60); // Tag 3
mailSchedule(false, 23, $diffSekunden + 4*24*60*60); // Tag 4
mailSchedule(false, 24, $diffSekunden + 5*24*60*60); // Tag 5
mailSchedule(false, 25, $diffSekunden + 6*24*60*60); // Tag 6


Seite 11 MAILsti: hierbei handelt es sich um die Serienmail für die Gruppe 4 sti
Auf der Seite ist ausschließlich ein PHP-Code ( … =gekürzte Version):

// --- Nur wenn Gruppe = 4 (sti) und Kommunikationsweg passt ---
$gruppe = (int) value('RA01');  // 1..4
$kommu  = (int) value('KA02');  // 1=Kalender, 2=Mail, 3=Kalender+Mail
if ($gruppe !== 4 || !in_array($kommu, [2,3], true)) {
    goToPage('end');
//    return;
}

// Schritt 1: Wunschzeit für heute Abend auslesen
$mailzeitAbends = value('KA03_01'); // z. B. "20:15"

// Schritt 2: Zeitdifferenz bis zur Wunschzeit berechnen
$jetzt = time();
$zielzeit = strtotime($mailzeitAbends);

if ($jetzt > $zielzeit) {
    // Wenn die Wunschzeit heute schon vorbei ist → morgen um die Uhrzeit
    $zielzeit = strtotime('tomorrow ' . $mailzeitAbends);
}

// 10 Minuten abziehen (600 Sekunden), damit die Mail zur Wunschzeit garantiert da ist
$zielzeit = $zielzeit - 600;

$diffSekunden = $zielzeit - $jetzt;

// Sicherheit: falls Differenz negativ ist → mindestens 20 Sekunden
if ($diffSekunden < 20) {
    $diffSekunden = 20;
}

// Schritt 3: Mailversand planen – täglich zur Wunschzeit
mailSchedule(false, 26, $diffSekunden + 0*24*60*60); // Tag 0
mailSchedule(false, 27, $diffSekunden + 1*24*60*60); // Tag 1
mailSchedule(false, 28, $diffSekunden + 2*24*60*60); // Tag 2
mailSchedule(false, 29, $diffSekunden + 3*24*60*60); // Tag 3
mailSchedule(false, 30, $diffSekunden + 4*24*60*60); // Tag 4
mailSchedule(false, 31, $diffSekunden + 5*24*60*60); // Tag 5
mailSchedule(false, 32, $diffSekunden + 6*24*60*60); // Tag 6


end-Seite: Standard
by SoSci Survey (356k points)
Okay, ich kann nach vollziehen, warum Sie den PHP-Code nicht komplett auf einer Seite haben möchten - es ist doch ein bisschen was.

Nur, damit ich ohne die Einarbeitung in den kompletten PHP-Code den Ablau korrekt verstehe. Wer Mail + Kalender auswählt, die/der bekommt quasi die Summe aus dem, was die Kalender und die Mail-Teilnehmer:innen einzeln bekommen, ja?

Aus meiner Sicht wäre es dann naheliegend, dass Sie zwei Seiten machen.

Eine Seite wir übersprungen, wenn man Kalender nicht (!) ausgewählt hat. Dort wird alles für den Kalender erledigt.

Und eine zweite Seite wird übersprungen, wenn man Mail nicht (!) ausgewählt hat. Dort wird dann alles gemacht, um die Mails zu versenden. Der Code ist überwiegend gleich für alle experimentalgruppen - nur die IDs der Mails ändern sich. Das ist mit einem Array recht komfortabel zu lösen.

Das Ganze Herumspringen und die Code-Doppelungen fallen dann weg.
by s337252 (120 points)
"Nur, damit ich ohne die Einarbeitung in den kompletten PHP-Code den Ablau korrekt verstehe. Wer Mail + Kalender auswählt, die/der bekommt quasi die Summe aus dem, was die Kalender und die Mail-Teilnehmer:innen einzeln bekommen, ja?" : Ja, genau. ´

Ok. Haben Sie weitere Infos zu diesem Array für mich oder können mir irgendwie skizzieren oder einen Ablauf schreiben, wie ich die Seiten und PHP's dann zu gestalten habe?
by SoSci Survey (356k points)
Im Prinzip variieren ja nur die IDs der Serienmails. Ich würde diese deshalb abhängig von der Gruppe in 4 Arrays schreiben (die IDs sind hier nicht akkurat, das müssten Sie bitte noch korrigieren):

if ($gruppe == 1) {
  $mails = [5,6,7,8,9,10,11];
}
if ($gruppe == 2) {
  $mails = [12,13,14,15,16,17,18];
}
// ...

Und dann müssen Sie das nur mit 0 bis 6 Tagen (zufällig sind die Indizes des Arrays auch 0 bis 6) durchlaufen:

for ($i=0; $i<7; $i++) {
  $mailID = $mails[$i];
  mailSchedule(false, $mailID, $diffSekunden + $i * 24*60*60); // Tag 0-6
}

Schon ein wenig eleganter, oder?
by s337252 (120 points)
absolut, mega! Vielen Dank für die Tipps und die schnelle Unterstütung!

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

...