Liebes Sosci Survey Team,
wir würden gerne Termine im Institut über Sosci vereinbaren. An einem Termin sollen immer zwei Personen teilnehmen. Die Personen können aus einer Reihe von Terminen auswählen, die konsequenterweise immer nur zwei Mal angezeigt werden und dann für die weiteren TN nicht mehr zur Verfügung stehen sollen.
Die TN sollen etwa gleichen Alters sein (mithilfe einer Filterfrage werden unterschiedliche Termine angeboten für unterschiedliche Altersgruppen, hier der Einfachheit noch nicht aufgeführt) und wir würden die Mail-Adresse speichern, falls sich am Termin was ändert.
Zur Info:
Seite 1: Einführungstext
Seite 2: Altersgruppe (Filterfrage) & Mail
Seite 3: Terminvereinbarung (PHP-Code s.u.)
Seite 4: dbSet Befehl (s.u.)/ hier soll noch/wird eine Bestätigungsmail mit mailSchedule() getriggert.
Seite 5: Ende
Wir haben nun folgenden Code, mit dem wir die Terminauswahl in die interne Datenbank speichern (hier beispielsweise mit 6 Terminen):
$key = 'TN-'.caseSerial();
$data = array(
value('AL01'), //speichert Altersgruppe
value('EM02'), //speichert Seriennummer/Mail (Opt In auf "Personenbezogen")
value('TA01'), //speichert Wunschtermin
statistic('count', 'TA01', 1), //speichert, wie häufig welche Terminoption angeklickt wurde
statistic('count', 'TA01', 2),
statistic('count', 'TA01', 3),
statistic('count', 'TA01', 4),
statistic('count', 'TA01', 5),
statistic('count', 'TA01', 6),
);
dbSet($key, $data);
Erste Frage(n):
In der Theorie und beim Ausprobieren funktioniert die Speicherung. Ich weiß aber bereits, dass der "key" (zumind. bei der ersten Person) keine Werte abrufen kann und daher der ganze Code (noch) nicht funktioniert. Vermutlich ist hier die caseSerial() als key nicht das richtige, oder? Was würde man stattdessen nehmen? Alles was ich ausprobiere, wird als "ungültiger Schlüssel" deklariert.
Ich bin mir nicht sicher, ob das damit zusammenhängt, aber der Eintrag wird auch immer überschrieben. Liegt dies ebenfalls am Code oder ggf. einfach am debug-Modus?
Außerdem erhalte ich die Meldung, dass man mit dem Befehl statistic() sparsam umgehen soll. Warum und wie kann ich diesen Befehl für unser Vorhaben ggf. umgehen/ gegen was austauschen?
Zweite Frage:
Wie kann man diese Information jetzt bei den folgenden Teilnehmenden abrufen?
Der Befehl dafür liegt vor dbSet auf der Terminvereinbarungsseite (statt die Frage auf die Seite zu ziehen, ist nur der Code auf der Seite). Diese wird aber derzeit nicht angezeigt, weil wie gesagt der key so nicht funktioniert. Der dbSet Befehl folgt auf einer leeren Seite direkt danach.
Bisher sieht dies so aus:
$key = 'TN-'.caseSerial();
$data = dbGet($key);
if ($data[3] >= 2) {
question('TA01', ('2-6'));
} else if ($data[4] >= 2) {
question('TA01',('1,3-6'));
} else if ($data[5] >= 2) {
question('TA01',('1-2,4-6'));
} else if ($data[6] >= 2) {
question('TA01',('1-3,5-6'));
} else if ($data[7] >= 2) {
question('TA01',('1-4, 6'));
} else if ($data[8] >= 2) {
question('TA01',('1-5'));
}
Diese Lösung führt zwar zu dem Ziel, dass, wenn die erste Option zwei Mal angeklickt wurde, diese nicht mehr angezeigt wird. Die anderen Optionen werden aber weiterhin angezeigt, auch wenn diese mehr als zwei Mal angeklickt wurden. Vermutlich stimmt also etwas an den "else if" Befehlen nicht?
Bitte entschuldigen Sie die komplexe Frage. Ich hoffe, dass Sie mir helfen können.
Vielen herzlichen Dank im Voraus und freundliche Grüße!