Artikel - Detailansicht

Icon Aktuelles Programmieren von Wizards I

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">
<cfparam name="FORM.prevNr" default="0">
<cfparam name="FORM.action" default="">

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="<<">
<cfset NEXTTEXT=">>">
<cfset OKTEXT="speichern">

Dann definieren wir noch die Nutzdaten, d.h. die Variablen/Infos, die wir von dem User erfragen wollen:

<cfparam name="FORM.vorname" default="">
<cfparam name="FORM.nachname" default="">
<cfparam name="FORM.plz" default="">
<cfparam name="FORM.ort" 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:

<!--- jetzt Nummer des naechsten Formulars berechnen --->
<cfif FORM.action eq NEXTTEXT>
  <cfset nr=FORM.nextNr>

  <cfelseif FORM.action eq BACKTEXT>
  <cfset nr=FORM.prevNr>

  <cfelseif FORM.action eq OKTEXT>

  <!-----jetzt speichern------------------->
  <cfquery datasource="dsn">
  insert into...
  </cfquery>
  ok
  <cfabort>

  <cfelse>

  <!--- defaultmaessig das 1. Formular --->
  <cfset nr=1>
</cfif>


<cfinclude template="form#nr#.cfm">

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.

Online Demo des Wizards



Steffen Goldfuss steffen@goldfuss.de - 06.09.2000

Zurück


Das deutsche ColdFusion-Forum cfml.de ist das Portal für Einsteiger und Experten zum Thema ColdFusion und der ColdFusion Markup Language (CFML).

© 2017 Webdesign & Hosting: CHC ONLINE Kassel | SOLVA Content-Management-System CMS
Urlaub-Angebote.de - Urlaub mit Bestpreis-Garantie buchen