Um Informationen von einem User zu erfragen werden oft lange Formulare
benutzt, die der User Feld für Feld ausfüllen und dann abschicken
muss. Das ist nicht immer eine brauchbare Methode, denn lange komplexe Formulare
überfordern oft Netz-unerfahrene User.
Dann bietet sich ein sogenannter Wizard an, der kleinere Informationseinheiten
auf verteilten Seiten abfragt. Dabei bekommt der User immer nur ein überschaubares
Formular zu sehen und es wird nach dem Ausfüllen und Absenden auf das nächste
Teilformular weitergeschaltet.
Dieses Prinzip wird in der normalen Softwarewelt oft benutzt, beispielsweise
bei Programminstallationen. Aber auch mit Webseiten sind Wizards problemlos
möglich.
Wir als Webprogrammierer müssen nur dafür sorgetragen, das die eingegeben
Informationen der vorherigen Formulare intern mitgeführt werden und am Ende
der Eingabeprozedur komplett in die Datenbank geschrieben werden können.
Um den User auch eine Möglichkeit zu geben zu vorherigen Formulareingaben
zurück zu gehen und die eingegebenen Daten nochmal zu ändern, muss der
Code auch ein Zurückspringen erlauben. Dabei muss das Formular wieder mit
den bereits eingegebenen Daten gefüllt werden.
Wie das ganze in ColdFusion funktionieren kann, soll jetzt gezeigt werden. Dabei wird zur Speicherung der Daten auf Session- oder Clientvariablen verzichtet und nur auf FORM-Variablen zurückgegriffen.
Unser Wizard soll die Daten Vorname, Nachname, PLZ und Ort in 3 Formularen erfragen. Dazu erzeugen wir 3 Formulardateien (form1.cfm bis form3.cfm) die die Infos abfragen. Form4.cfm soll alle Daten nochmal anzeigen und den Button zum speichern der Daten enthalten. Basisscript ist die Datei main.cfm. Sie wird jedesmal (nach jedem Submit) aufgerufen und entscheidet dann, welches Formular zu includen ist.
Wir definieren in main.cfm zuerst 3 FORM-Variablen, die die Steuerung des Programmablaufes übernehmen:
<cfparam name="FORM.nextNr" default="1"> In FORM.nextNr wird immer die Nummer des nächsten Formulars
übergeben.
In FORM.prevNr wird immer die Nummer des vorherigen Formulars übergeben.
In FORM.action wird der Wert des gedrückten Buttons übergeben (">>"
wenn das nächste Formular gezeigt werden soll, "<<" wenn zum vorherigen
Formular zurückgeschaltet werden soll).
Um die Beschriftung der Buttons besser ändern zu können ohne an den Code zu müssen benutzen wir Variablen (die hier als Konstanten fungieren) um die Buttonwerte festzulegen:
<cfset BACKTEXT="<<">Dann definieren wir noch die Nutzdaten, d.h. die Variablen/Infos, die wir von dem User erfragen wollen:
<cfparam name="FORM.vorname" default="">In diesem Beispiel sind es 4 Werte. Diese Variablen werden wir dann im Formular stets mitgeführen. Da die Variablen beim ersten aufruf von main.cfm nicht existieren, weisen wir ihnen mit <cfparam> Default-Werte zu.
Nach den einleitendeten Definitionen müssen wir nun in einer
<CFIF>-Struktur entscheiden, welches Formular included werden soll. Das können
wir beim Aufruf von main.cfm anhand des Wertes in FORM.action entscheiden. Durch
diesen Wert können wir wählen ob es weiter oder zurück gehen
soll.
Wenn wir das wissen, können wir das entsprechende Formular aus den Variablen
FORM.nextNr oder FORM.prevNr berechnen und das ensprechende File includen:
Hat FORM.action den Wert "speichern", d.h. der Speichern-Button
wurde am Ende der Serie gedrückt, können wir nun die Daten komplett
in die DB schreiben.
Soweit zur Funktion der main.cfm.