Das sogenannte komplexe Formular bezieht sich hier auf ein Formular, das mehrere verschiedene Eingabetypen enthält, z. B. Dropdown-Listenfelder, einzeiliger Text, mehrzeiliger Text, numerische Werte usw. In Situationen, in denen solche Formulare häufig ersetzt werden müssen, ist ein dynamisches Generierungsprogramm für das Formular erforderlich. In diesem Artikel wird ein solches System vorgestellt, das eine Datenbank zum Speichern von Formulardefinitionsdaten verwendet und ASP-Skripte verwendet, um Formular-HTML-Codes und Skripte dynamisch zu generieren, um Formulareingaben zu überprüfen.
1. Definieren Sie die Datenbanktabellenstruktur.
Im Web finden Sie häufig Formulare wie „Wöchentliche Umfrage“. Wenn es ein Programm gibt, das Formulare und ihre Validierungsskripte dynamisch generiert, kann der Arbeitsaufwand für die Erstellung dieser Formulare erheblich reduziert werden.
Im Beispiel für die dynamische Formulargenerierung und -validierung in diesem Artikel verwenden wir eine Access-Datenbank, um die Definitionsinformationen zum Formular zu speichern. Gleichzeitig werden der Einfachheit halber auch die vom Benutzer in das Formular eingegebenen Daten in derselben Datenbank gespeichert . Zum Definieren eines Formulars sind zwei Tabellen erforderlich: Die erste Tabelle (Definitons) dient zur Definition der Formulareingabefelder und die zweite Tabelle (Lists) speichert zusätzliche Informationen zu jedem Eingabefeld, beispielsweise die Auswahlelemente der Auswahlliste.
Die Tabelle Definitionen enthält die folgenden Felder:
FieldName – der Variablenname, der dem Formulareingabefeld zugewiesen ist
Beschriftung – Textbeschriftung, der informative Text, der vor dem Eingabefeld angezeigt wird
Typ – ein einzelnes Zeichen, das die Form des Formulareingabefelds und den Typ des Eingabewerts wie folgt darstellt:
(t) Texteingabefeld, d. h. < INPUT TYPE="TEXT" >.
(n) Ein Texteingabefeld, erfordert jedoch einen numerischen Wert.
(m) Notizinhalt, wird zur Eingabe von Kommentaren oder anderen großen Textmengen verwendet. Es handelt sich um ein mehrzeiliges Textbearbeitungsfeld.
(b) Erfordert die Eingabe von „Ja“ oder „Nein“. In dieser Implementierung wird ein Kontrollkästchen verwendet, um diese Eingabe zu erhalten, wobei die Textbezeichnung des Kontrollkästchens „Ja“ lautet. Wenn der Benutzer es auswählt, ist der Rückgabewert „on“.
(r) Optionsfeld.
(l) Dropdown-Listenfeld.
Min – nur gültig für numerische Eingabewerte, hier wird der Mindestwert angegeben. In diesem Beispiel gibt es ein numerisches Eingabefeld „Alter“, dessen Mindestwert auf 1 eingestellt ist.
Max – Der Wert dieses Feldes ist relativ zum Eingabefeldformular. Bei numerischen Eingabefeldern stellt es den maximal zulässigen Wert dar. Der Maximalwert von „Alter“ beträgt beispielsweise 100. Bei Texteingabefeldern stellt „Max“ die maximal zulässige Anzahl von Zeichen dar. Bei mehrzeiligen Textbearbeitungsfeldern stellt „Max“ die Anzahl der Textzeilen im sichtbaren Bereich dar.
Erforderlich – Gibt an, ob eine Eingabe erforderlich ist. Wenn kein Wert dieses Typs eingegeben wird, meldet der Eingabevalidator einen Fehler. Im Formular sind die einzugebenden Werte mit einem Sternchen gekennzeichnet und der Benutzer wird in Form einer Fußnote darauf hingewiesen, dass solche Werte eingegeben werden müssen.
Das Beispielformular in diesem Artikel ist ein Fragebogen für ASP-Programmierer. Die Definition des Formulars in der Tabelle „Definitionen“ lautet wie folgt:
Feldname Bezeichnungstyp Min. Max. Erforderlicher
Name Namenstext (t) – 50 Kein
Alter Altersnummer (n) 1 100 Kein
Geschlecht Geschlecht Single Auswahltaste (r) - - Ja
E-Mail E-Mail-Adresstext (t) - - Ja
Dropdown-Listenfeld Sprache Programmiersprache (l) - - Nein
Listen werden verwendet, um einige zusätzliche Informationen zu speichern, die im Eingabefeld definiert sind. In diesem Beispiel wird „Geschlecht“ für die beiden Eingabewerte verwendet und „Sprachen“. Die Tabelle Lists ist sehr einfach und enthält nur die folgenden drei Felder:
FieldName – welches Formulareingabefeld der aktuelle Datensatz gehört
Value – der Wert der Auswahl
Label – der Eingabeaufforderungstext der Auswahl, den der Benutzer sieht
Das Eingabefeld „Sex“ kann nur eingegeben werden von Zwei Werte zur Auswahl: „Männlich“ oder „Weiblich“. „Sprache“ listet mehrere Programmiersprachen auf, die auf die ASP-Umgebung angewendet werden können, darunter: VBScript, JavaScript, C, Perl und „Andere“.
Die dritte Tabelle „Datensätze“ speichert den vom Benutzer übermittelten Inhalt. Sie enthält außerdem drei Felder. Jeder Datensatz entspricht einer Übermittlung durch den Benutzer:
Datensatz – Bemerkungstyp, Benutzereingaben werden in Form einer Abfragezeichenfolge gespeichert.
Erstellt – Das Datum und die Uhrzeit, zu der der Benutzer das Formular übermittelt hat. RemoteIP – Die IP-Adresse des Formularabsenders.
In tatsächlichen Anwendungen kann es erforderlich sein, weitere Informationen über Benutzer zu sammeln. Der Einfachheit halber werden in diesem Beispiel nur zwei zusätzliche Informationen erfasst: Übermittlungszeitpunkt und Benutzer-IP-Adresse.
2. Vorbereitung
Nachdem Sie die Definition der oben genannten Datenstruktur und Form abgeschlossen haben, können Sie das Skript schreiben. Die Aufgabe des Skripts besteht darin, Formulare zu generieren und vom Benutzer übermittelte Formulare zu verarbeiten.
Unabhängig davon, ob ein Formular generiert oder verarbeitet wird, sind die folgenden drei Prozesse (Aufgaben) von wesentlicher Bedeutung: Der erste besteht darin, den Validierungstyp zu bestimmen. Beim Generieren des Formulars wird der Validierungstypwert über die Abfragezeichenfolge abgerufen, und wenn das Formular verarbeitet wird , werden die ausgeblendeten Felder aus dem Formular abgerufen. Das Programm unterstützt vier Arten von Formularüberprüfungsmethoden: keine Überprüfung, clientseitige JavaScript-Überprüfung, serverseitige ASP-Skriptüberprüfung und sowohl clientseitige als auch serverseitige Überprüfung (Codenamen sind jeweils 0 bis 3). Wenn in der Abfragezeichenfolge keine gültige Authentifizierungsmethode angegeben ist, wird standardmäßig die vierte Authentifizierungsmethode verwendet. Mit dieser Überprüfungsverarbeitungsmethode können wir dieses Formulargenerierungs- und -verarbeitungssystem flexibel anwenden. Wenn der Client die Verwendung der JavaScript-Überprüfung verbietet, kann der Überprüfungsprozess nur auf der Serverseite durchgeführt werden. Hier ist der Code zur Bestimmung des Validierungstyps:
Überprüfen Sie den Validierungstyp.
Hier ist der Zitatausschnitt:
iValType = Request.QueryString("val")
Wenn IsNumeric(iValType) = False, dann ist iValType = 3
Wenn iValType > 3 oder iValType < 0, dann ist iValType =3
Die zweite Aufgabe besteht darin, eine Datenbankverbindung zu öffnen und zwei Recordset-Objekte zu erstellen: das RS-Objekt, das das Haupt-Recordset-Objekt in diesem Programm ist und zum Betrieb der Definitionstabelle verwendet wird und hauptsächlich zum Lesen von Daten aus der Lists-Tabelle verwendet wird. Das Beispielprogramm bietet zwei Datenbankverbindungsmethoden: die Verwendung von ODBC DSN oder die Nichtverwendung von ODBC DSN (bei Verwendung von DSN müssen Sie zuerst einen DSN mit dem Namen „Dynamic“ erstellen, und der Code für die Verwendung von DSN zum Herstellen einer Verbindung mit der Datenbank wurde auskommentiert).
Die dritte Aufgabe besteht darin, vor (und nach) der Generierung (oder Verarbeitung) des Formularskripts statischen HTML-Code auszugeben, z. B. <HEAD>< /HEAD>, und die belegten RS-, RSList- und anderen Objekte freizugeben, wenn die Skriptressource endet .
Zusätzlich zu dem Code, der die oben genannten Aufgaben ausführt, gibt es zwei Arten von Seiten, die von den verbleibenden ASP-Skripten in der Beispielanwendung generiert werden können: das Frageformular (siehe Abbildung oben) und die Ergebnisseite, die nach dem Formular angezeigt wird übermittelt (Letzterer ist auch für die Protokollierung der vom Nutzer übermittelten Ergebnisse verantwortlich). Der einfachste Weg, um zu bestimmen, welcher Teil des Skripts ausgeführt werden soll, besteht darin, zu überprüfen, ob das Formular gesendet wurde: Wenn ja, verarbeiten Sie das Formular, andernfalls generieren Sie das Formular.
Generiert es ein Formular oder verarbeitet es ein Formular?
Das Folgende ist ein Zitatausschnitt:
Wenn Len(Request.Form) = 0, dann
'Form erzeugen... leicht...
Anders
„Bearbeiten Sie das Formular... leicht...
Ende Wenn
3. Formular dynamisch generieren
Beim Generieren des Formulars definiert das Programm Datensätze entsprechend jedem Eingabefeld in der Definitionstabelle und generiert nacheinander den entsprechenden Formular-HTML-Code und JavaScript-Code. Das erste, was im HTML-Code generiert wird, ist das Text-Tag:
Hier ist der Zitat-Snippet:
sHTML = sHTML & vbTab & "< TR >" & vbCrLf & vbTab & vbTab
sHTML = sHTML & "< TD VALIGN=" & Chr(34) & "TOP" & Chr(34)
sHTML = sHTML & " >" & vbCrLf & vbTab & vbTab & vbTab
sHTML = sHTML & "< B >" & RS.Fields("Label")
Das Programm prüft dann, ob das aktuelle Eingabefeld eine Eingabe erfordert. Fügen Sie bei Bedarf nach dem Beschriftungstext ein Sternchen hinzu (um anzuzeigen, dass der Wert eingegeben werden muss). Für den einzugebenden Wert muss der entsprechende JavaScript-Code generiert werden, um ihn zu überprüfen. Bei Optionsfeldern oder Auswahllisten gibt es eine weitere Prüfung, ob der Benutzer tatsächlich eine Option ausgewählt hat. Bei allen anderen Eingabetypen muss lediglich überprüft werden, ob der Eingabewert nicht leer ist.
Auf die Textbeschriftung folgen die Eingabeelemente des Formulars, und der HTML-Code für diese Elemente wird basierend auf den in der Definitionstabelle angegebenen Typen und Attributen generiert. Der nächste Schritt besteht darin, JavaScript-Code zu generieren, der clientseitige Verifizierungsaufgaben basierend auf den Eingabewertanforderungen ausführt. In diesem Beispiel müssen nur numerische Werte weiter überprüft werden, um sicherzustellen, dass es sich bei der Benutzereingabe tatsächlich um eine Zahl handelt und der numerische Wert zwischen den zulässigen Maximal- und Minimalwerten liegt. Nachdem Sie den obigen Code generiert haben, können Sie eine Tabellenzeile (d. h. ein Eingabefeld) beenden und mit der Verarbeitung des nächsten Datensatzes der Definitionstabelle fortfahren. Nachdem alle Datenbankeinträge verarbeitet wurden, besteht der nächste Schritt darin, den HTML-Code für die Schaltflächen „Senden“ und „Löschen“ hinzuzufügen. Aus einem anderen Blickwinkel betrachtet besteht die Aufgabe des Programms darin, jedes Eingabefeld basierend auf dem Datenbankdatensatz zu generieren. Jedes Eingabefeld belegt eine Tabellenzeile, und jede Tabellenzeile hat zwei Zellen: Die erste Zelle wird zur Anzeige verwendet Textbeschriftungen und die zweite Einheit zeigt das Eingabeelement selbst an (Code finden Sie in dForm.asp).
Nachdem der obige Vorgang abgeschlossen ist, werden der HTML-Code und die JavaScript-Validierungsfunktion des Formulars in den Variablen sHTML bzw. sJavaScript gespeichert. Bevor diese Inhalte auf die Seite geschrieben werden, prüft das Programm, ob der Client eine JavaScript-Validierung erfordert. Wenn eine solche Validierung nicht erforderlich ist, wird die sJavaScript-Variable gelöscht:
Wenn iValType = 0 oder iValType = 2, dann sJavaScript = „“
Nach der Ausgabe des BODY-Tags, Das Programm gibt die folgende JavaScript-Funktion aus:
Das Folgende ist ein Zitatfragment:
< SCRIPT LANGUAGE="JavaScript" >
< !--
Funktion validieren(TheForm){
//Client-Formularvalidierung
< %=sJavaScript% >
return true;
}
Funktion CheckRadio(objRadio){
//Ob ein Wert im Optionsfeld ausgewählt ist
for(var n = 0; n < objRadio.length; n++){
if(objRadio[n].checked){
return true;
}
}
return false;
}
Funktion CheckList(objList){
//Ob ein Wert in der Auswahlliste ausgewählt wurde
for(var n = 1; n < objList.length; n++){
if(objList.options[n].selected){
return true;
}
}
return false;
}
//-- >
</ /Script >
Wenn der Client keine JavaScript-Validierung erfordert, bleibt der Validierungsfunktion eine „return true“-Anweisung übrig. Die letzten beiden statischen JavaScript-Funktionen (CheckRadio und CheckList) im obigen Code werden zur Validierung der Optionsfelder und Dropdown-Listenfelder verwendet. Die Validierungsfunktion ruft sie auf, wenn diese beiden Eingabefelder validiert werden müssen.
Jetzt können Sie damit beginnen, das Formular auf die Seite zu schreiben:
< FORM ACTION="./dform.asp" METHOD="POST" NAME="MyForm" onSubmit="returnvalidate(this)" >
Hier nur, wenn die Validierungsfunktion zurückkehrt true Erst dann den Formularübermittlungsvorgang durchführen. Wenn daher die clientseitige JavaScript-Überprüfungsfunktion deaktiviert ist, gibt die Validierungsfunktion automatisch „true“ zurück.
Als nächstes muss ein verstecktes Feld namens val hinzugefügt werden. Wie bereits erwähnt, gibt dieser Wert den Validierungsmodus des Formulars an.
< INPUT TYPE="HIDDEN" NAME="val" VALUE="< %=iValType% >" >
Wenn der Benutzer das Formular sendet, verwendet das Verarbeitungsskript diesen Wert, um zu bestimmen, ob eine serverseitige Validierung durchgeführt werden soll.
Die Ausgabe ist dann die Tabellenmarkierung und der Tabellentitel. Der Titel wird in der Variablen sTitleLabel gespeichert, deren Wert initialisiert wird, wenn die Ausführung des Skripts beginnt:
Hier ist der Zitatausschnitt:
< TABLE BORDER="0" >
<TR>
< TD COLSPAN="2" ALIGN="CENTER" >
< H2 >< %=sTitleLable% >< /H2 >
< /TD >
< /TR >
Als Verbesserungsmaßnahme kann den Tabellen Definitionen, Listen und Datensätzen ein Feld FormID hinzugefügt werden. FormID identifiziert ein Formular eindeutig, sodass das Programm mehrere Formulare gleichzeitig definieren und die Benutzerantwortergebnisse mehrerer Formulare speichern kann. Was das obige sTitleLabel betrifft, können wir eine andere Tabelle (z. B. Forms) zum Speichern verwenden.
Nach der Tabellenmarkierung und dem Tabellentitel gibt das Programm das HTML-Formular und den Code für die Schaltflächen „Senden“ und „Löschen“ aus. Anschließend prüft das Programm, ob der sHTML-String „*“ enthält. Wenn dies der Fall ist, bedeutet dies, dass Inhalte in das Formular eingegeben werden müssen. Zu diesem Zeitpunkt wird eine Fußnote ausgegeben, um die Bedeutung des Sternchens zu erläutern.
Hier ein Zitat:
< %=sHTML% >
<TR>
< TD COLSPAN="2" ALIGN="CENTER" >
< INPUT TYPE="SUBMIT" VALUE="Formular senden" > < INPUT TYPE="reset" VALUE="Clear" >
< /TD >
<%
'Ob es ein Formularfeld gibt, das eine Eingabe erfordert, wenn ja, geben Sie die Formularfußnote aus, um die Bedeutung von '*' zu erklären.
Wenn InStr(sHTML,"*") Dann
%>
< /TR >
< TD COLSPAN="2" ALIGN="CENTER" >
< FONT SIZE="2" >Hinweis: Mit einem Sternchen gekennzeichnete Werte sind erforderlich. < /FONT>
< /TD >
< /TR >
<%
Ende wenn
%>
< /TABLE >
</ /FORM >
Bisher ist die Aufgabe der Formularerstellung abgeschlossen.
4. Verarbeitung der Übermittlungsergebnisse
Die verbleibenden Aufgaben des ASP-Skripts sind die serverseitige Formularverarbeitung, einschließlich Validierung, Speichern der Ergebnisse in der Datenbank und Anzeige der Seite „Übermittlung erfolgreich/fehlgeschlagen“. In diesem Teil des Formularvalidierungscodes wird eine Zeichenfolgenvariable sBadForm verwendet, die das Programm zum Speichern von Fehlerinformationen verwendet. Wenn sBadForm am Ende des Überprüfungsprozesses leer ist, bedeutet dies, dass das vom Benutzer übermittelte Formular zulässig ist. Andernfalls wird die Übermittlung des Formulars abgelehnt und sBadForm an den Browser zurückgegeben.
Unabhängig davon, welchen Validierungsmodus Ihr Formular verwendet, empfiehlt es sich, nach HTTP_REFERER zu suchen. Diese Prüfung verhindert Skriptdiebstahl. Um zu überprüfen, ob ein bestimmter POST von einer Seite oder einem Skript dieser Website stammt, vergleichen Sie einfach zwei Servervariablen:
Hier ist der Zitatausschnitt:
Wenn InStr(Request.ServerVariables("HTTP_REFERER"), _
Request.ServerVariables("HTTP_HOST")) = 0 Dann
sBadForm = „<LI>Das Formular wurde von einem falschen Ort gesendet.“ & vbCrlf
Ende wenn
Wenn das ausgeblendete Feld des Formulars angibt, dass eine serverseitige Überprüfung durchgeführt werden muss, durchsucht das Programm die Datensätze der Formulardefinitionsdatenbank und führt entsprechende Prüfungen durch form und fügt unzulässige Eingabewertinformationen zu Just go to sBadForm hinzu. Spezifischen Code finden Sie in dForm.asp.
Abschließend prüft das Programm, ob sBadForm leer ist. Wenn es nicht leer ist, wird die Formularübermittlung abgelehnt und sBadForm in den Browser geschrieben. Wenn sBadForm leer ist, fügen Sie einen Datensatz zur Tabelle „Datensätze“ hinzu, um die Formulardaten zu speichern. Das ausgeblendete Feld val muss vor dem Speichern des Formularinhalts gelöscht werden. Dieses ausgeblendete Feld ist immer das erste Eingabefeld des Formulars:
Das Folgende ist ein Zitatfragment:
Wenn Len(sBadForm) = 0, dann
RS.Öffnen Sie „Datensätze“, DB, 3, 2, &H0002
RS.AddNew
RS.Fields("Record") = Mid(Request.Form, InStr(Request.Form, "&") + 1)
RS.Fields("Created") = Now()
RS.Fields("RemoteIP") = Request.ServerVariables("REMOTE_ADDR")
RS.Update
Response.Write("< H1 >Vielen Dank.< /H1 >")
RS.Schließen
Anders
Response.Write("< H1 >Formularübermittlung fehlgeschlagen. < /H1 >")
Response.Write(vbCrLf & sBadForm)
Ende wenn
Ende wenn
Das ist alles für die serverseitige Formularverarbeitung. Abhängig davon, ob ein übermitteltes Formular vorhanden ist, können wir den vorherigen Formulargenerierungscode und den Formularverarbeitungscode hier mit einer If-Anweisung kapseln, sodass die beiden Teile des Skripts einen gemeinsamen Code teilen, z. B. den Header des HTML-Dokuments. die Erstellung von Datenbankobjekten und die Freigabe von Ressourcen warten.
Insgesamt verfügt dForm.asp nur über die Kernfunktionen, die für die dynamische Formulargenerierung und -überprüfung erforderlich sind, und ignoriert die Behandlung vieler detaillierter Probleme. Zum Beispiel das oben erwähnte Problem mit mehreren Formularen: Durch das Hinzufügen einer Tabelle zum Verwalten mehrerer Formulare kann das Skript bestimmte Formulare verwalten, generieren und verarbeiten. Ein weiterer eklatanter Mangel ist die Möglichkeit, formulardefinierte Daten hinzuzufügen, zu löschen und zu aktualisieren sowie auf vom Benutzer übermittelte Ergebnisdaten zuzugreifen. Eine solche Funktionalität könnte in einem eigenständigen Programm implementiert und in den meisten Fällen in ein Programm umgewandelt werden traditionelle Anwendung (Anwendungen ohne B/S-Struktur). Schließlich sind auch die von dForm.asp unterstützten Eingabefeldtypen begrenzt. In der Praxis können andere Formulareingabeanforderungen bestehen, beispielsweise ein spezielles Eingabefeld für die E-Mail-Adresse. Für Websites, die häufig Formulare aktualisieren, sind die in diesem Artikel beschriebenen Funktionen zur dynamischen Formulargenerierung und dynamischen Validierung jedoch tatsächlich sehr nützlich.