|
HTML Einführung: Formulare aus Serversicht
|
|
Formulare aus der Sicht des Servers
|
Verweise
In diesem Kapitel finden Sie Informationen über:
- Die Methode GET
- Daten in der Umgebungsvariable QUERY_STRING
- Prüfung der Daten
- Skriptsprache
- Antwort
Allgemeines
Im vorletzten Kapitel wurde beschrieben,
wie Formulare in HTML-Seiten eingesetzt werden. Dort wurde gesagt, dass die
Eingaben von dem unter dem <form>-Tag mit action angegebenen
URL abgearbeitet werden. Das Programm unter diesem URL verarbeitet die erhaltenen
Daten und generiert die gewünschte Antwort, welche an den Browser geschickt
wird. In diesem Kapitel wollen wir uns nun mit diesen "Programmen", den Scripts,
beschäftigen, die hinter dem URL der action-Option stehen.
Wichtige Hinweise:
- Die Scripts in diesem Kapitel müssen vom Server ausführbar sein.
Solche Scripts liegen meistens im Verzeichnis "cgi-bin", auf das in der
Regel nur der Webmaster Zugriff hat. Klären Sie also mit Ihrem Webmaster
ab, ob Sie Scripts im "cgi-bin" Verzeichnis ablegen dürfen.
- Die Scripts, die hier vorgestellt werden, zeigen nur auf wie
die Methode praktisch funktioniert. Sie stellen aber keinesfalls
endgültige Scripts dar, die allen Sicherheitsanforderungen genügen!!
Die Methode GET
Die Methoden "post" und "get" aus der method-Option des
<form>-Tags unterscheiden sich haupt-sächlich dadurch, wie
die Daten aus dem Formular an das Script übergeben werden. Bei "get"
(was im restlichen Kapitel eingesetzt wird) erhält das Script die Daten
des Formulars aus der Umgebungsvariable QUERY_STRING. - Das Script muss
also diese Variable auswerten und eine Antwort generieren.
Die Daten in QUERY_STRING
In der Variablen QUERY_STRING stehen also die Daten des Formulars.
Die Daten sind dabei immer im folgenden Format abgelegt:
Dabei ist jedes Datenfeld (Daten1, Daten2, ...) wie folgt aufgebaut:
Variablenname ist hier der Name des Eingabeelementes, welcher mittels
name-Option im input-, select- oder textarea-Tag
definiert wurde. Wert ist der Inhalt des Eingabeelementes oder der mittels
value-Option definierte Wert (beim Element einer Auswahlliste). Dabei
werden Leerzeichen in den übergebenen Werten immer durch das Zeichen "+"
(Plus) ersetzt. - Bei Auswahllisten mit mehrfacher Auswahl (multiple)
kann der Variablenname dieser Liste durchaus nicht oder auch mehrfach
auftauchen.
Die erste Aufgabe des Scripts wird also sein, den beschriebenen String in die
besprochenen Teile aufzuteilen und den Inhalt für weitere Bearbeitungen
in eigenen Variablen abzulegen.
Die Prüfung
Dieser Abschnitt ist sehr wichtig, kann aber leider nur ganz kurz angesprochen werden.
Bei den erhaltenen Daten sollten Sie sicherstellen, dass keine Shell-Metazeichen
wie !, &, $ usw. enthalten sind. Dies kann findigen Leuten Zugriff auf Ihr System
geben. Prüfen Sie also und weisen Sie im Zweifelsfall die Eingaben ab!
Die Skriptsprache
Sie können jede Sprache wählen, die Ihnen liegt:
- C, C++
- Shellskripte wie ksh
- Perl, Python
- Java
Jede hat Ihre Vor- und Nachteile. Wenn Sie jedoch viele Daten im QUERY_STRING
übergeben, sollte die gewählte Sprache einfache Stringmanipulationen
erlauben. Perl hat sich in diesem Zusammenhang im Web-Bereich zunehmend
durchgesetzt. (Man erkennt Perl-Skripte an ihrer Erweiterung .pl)
Die Antwort
Ihr Script sollte in jedem Fall eine Ausgabe an den Benutzer schicken. Dadurch
kann dieser erkennen, ob alles geklappt hat oder nicht. Seien Sie ruhig ausführlich,
ein "Shell-Metazeichen in Feld E-Mail gefunden" sagt immer noch mehr aus
als ein "Error 0815".
Grundsätzlich gibt der HTTP-Server als Ergebnis an den Browser das zurück,
was das Script auf die Standardausgabe gibt. Allerdings muss als erste Zeile folgendes
ausgegeben werden (hier beispielhaft in Java realisiert):
System.out.println("Content-type: text/html\n\n");
|
Danach sollten Sie eine HTML-Seite mit den Tags <html>, <head>,
<body> usw. ausgeben. Ihre Ausgaben sollten also ein gültiges
HTML-Dokument darstellen. - Wieder etwas Java-Code, der abhängig von einer
boole'schen Variable isFormCheckOK eine positive oder negative Antwort
generiert:
private static void ContactFormAnswer()
{
System.out.println("Content-type: text/html\n\n");
System.out.println("<html>\n<head>");
System.out.println("<title>Unsere Antwort</title>");
System.out.println("</head>\n<body>");
if (isFormCheckOK==Boolean.TRUE)
{
System.out.println("<h1>Anfrage abgeschickt</h1>");
System.out.println("Ihre Anfrage konnte korrekt weitergeleitet");
System.out.println("werden. Sie bekommen von uns innerhalb der");
System.out.println("nächsten 24 Stunden Antwort.<br>");
System.out.println("Vielen Dank für Ihr Interesse,");
System.out.println("auf Wiedersehen!<p> Zurück zum");
System.out.println("<a href=\"formular.html\">Formular</a>");
}
else
{
System.out.println("<h1>Fehler!</h1>");
System.out.println("Ihre Daten wurden nicht weitergeleitet. Ein");
System.out.println("Fehler ist aufgetreten. Überprüfen");
System.out.println("Sie Ihre Eingaben. Verwenden Sie keine");
System.out.println("Sonderzeichen im Formular! - Bei chronischen");
System.out.println("Problemen wenden Sie sich bitte an den");
System.out.println("<a href=\"mailto:joe@home.com\">Webmaster</a>");
System.out.println("<p> Zurück zum");
System.out.println("<a href=\"formular.html\">Formular</a>");
}
System.out.println("</body>\n</html>");
}
|
Wie Ihre Antwort aussieht bleibt ganz Ihnen überlassen. Natürlich
kann auch eine komplette Seite mit allen Resultaten als Ergebnis des Formulars
(z.B. beim Suchformular einer Internetdatenbank) ausgegeben und verschickt
werden.
Zusammenfassung und Beispiel
Dieses Beispiel ist so simpel wie nur möglich. Es erwartet ein Formular
mit einem Texteingabefeld dessen Inhalt in allen Dateien unterhalb des root-Verzeichnisses
gesucht wird. Daraus wird eine Liste erstellt und als Ergebnis zurückgegeben.
Dabei wird weder auf Metazeichen noch auf fehlerhafte Eingaben überprüft.
(Es ist also nicht alltagstauglich!!!)
#!/bin/sh
echo "Content-type: text/html\n\n"
echo "<html>"
echo "<head>"
echo "<title>Suchergebnis</title>"
echo "</head><body>"
# Eine simple Prüfung ...
a=`echo $QUERY_STRING | grep "@"`
b=`echo $QUERY_STRING | grep "&"`
c=`echo $QUERY_STRING | grep "!"`
d=`echo $QUERY_STRING | grep "$"`
e=`echo $QUERY_STRING | grep "|"`
erg="$a$b$c$d$e"
if [ "$erg" != "" ] ; then
echo "<h2>Illegale Zeichen in der Eingabe!</h2>"
else
file=/tmp/grep$$
filt=/tmp/grep$$.tmp
cd /var/www/htdocs
such=`echo $QUERY_STRING |cut -f 2 -d"="`
grep -l $such `find . -name "*html" -print` >$file
echo "Es wurde nach dem Stichwort <i> $such </i> gesucht."
echo "Hier das Ergebnis:<p>"
if [ -s $file ] ; then
len=`cat $file|wc -l`
while [ $len -gt 0 ]; do
inp=""
read inp <$file
len=`expr $len - 1`
cat $file |tail -$len >$filt
mv $filt $file
ref=`echo $inp |cut -c 2-"`
echo "Gefunden in <a href=$ref> $inp </a><p>"
done
else
echo "Keine Übereinstimmungen gefunden!<p>"
fi
rm $file
fi
echo "<hr>"
# Gibt einen Standardfuss aus ...
cat /var/web/docs/footer.shtml
echo "</body></html>"
|
Soviel zum Thema Formulare auf der Serverseite. - Wie bereits das letzte
Kapitel über Servertags war wohl auch dieses eher ein Kapitel für
fortgeschrittene Web-Designer, besonders für solche, die direkt am Server
arbeiten.
Aber Kopf hoch! - Jetzt gibt's wieder Nahrung für den Home-Web-Designer:
Frames! - Das letzte Kapitel dieser HTML-Einführung.
Version 1.2, Jänner 2000 - Copyright © 1999-2000 by Peter Bittner
|