Private Funktionen << ^ MPForm Hilfeseiten ^ >> Referenz der Feldtypen
MPForm-Dokumentation: Formularschleifen
Schwierigkeitsgrad C
Wenn Sie eine bestimmte Seite aus einem mehrseitigen Formular mehrfach aufrufen wollen,
dann brauchen Sie eine Schleife.
Ein Beispiel:
Sie müssen eine Frage wie "Geben Sie Namen, Geburtsdatum usw.
Ihrer Kinder an" in einem Formular unterbringen, mit einem separaten Feld für
jedes Datenelement. Die mögliche Anzahl von Kindern kann dabei je nach Benutzer
unterschiedlich sein.
Sie benötigen also eine Schleife, die die gleiche Formularseite immer wieder aufruft, bis der Benutzer die Frage "Haben Sie weitere Kinder" mit Nein beantwortet.
Wie kann man das mit einem Formular in LEPTON umsetzen?
- Auf die Seite vor der Formularschleife platzieren Sie ein Optionsfeld "Haben Sie Kinder" mit den möglichen Antworten Ja und Nein.
- Auf die Seite mit der Formularschleife platzieren Sie als letztes ein Optionsfeld "Haben Sie weitere Kinder" mit den möglichen Antworten Ja und Nein.
- In der Datei private.php gibt es eine Funktion private_function_on_success, die schon darauf ausgelegt ist, dass sie die Schleife ausführt. Sie müssen lediglich die 8 vordefinierten Variablen mit den richtigen Werten, die Sie alle aus dem Backend holen können, belegen.
Und schon ist die Formularschleife fertig.
Nun haben ein paar hundert Benutzer Ihren umfangreichen mehrseitigen Fragebogen ausgefüllt und Sie sollen eine Statistik der Daten anfertigen. Die beste Methode, diese Daten im Frontend zur Verfügung zu stellen, besteht in der Verwendung des Moduls CSV Export. Beachten Sie die dort angegebenen Sicherheitshinweise!
Jede Zeile in der exportierten CSV-Datei repräsentiert die Antworten eines Benutzers für alle Seiten mit der identischen Namensendung für die Ergebnistabelle, die im Backend eingestellt wird. Diese sollte nicht für andere Formulare in dieser WB-Installation verwendet werden.
LEPTON erkennt an Hand der Session-ID, welche Einträge in welche Zeile gehören. Selbst wenn mehrere Benutzer zeitgleich den Fragebogen ausfüllen, wird es keinen Datenmüll geben.
Aber wie ist das bei einer Formularschleife, werden die Daten des ersten Kindes dann mit denen des zweiten Kindes überschrieben? Die Antwort lautet nein, da die Funktion private_function_on_success für jedes zusätzliche Kind ein Zeichen an die Session-ID anhängt. Dann landen weitere Kinder einfach in neuen Zeilen, z. B. könnten sich bei 3 Kindern folgende Session-IDs ergeben:
- Formular bis zum ersten Kind: w63fr46t
- zweites Kind: w63fr46t_
- drittes Kind: w63fr46t__
- Rest des Formulars: w63fr46t
Die Zuordnung der Folgekinder ist dann kein Problem, weil die ersten 8 Stellen ja identisch sind.