Zurück || Weiter Index Startseite

HTML Einführung: Formulare aus Serversicht
Formulare aus der Sicht des Servers

Verweise

In diesem Kapitel finden Sie Informationen über:

  1. Die Methode GET
  2. Daten in der Umgebungsvariable QUERY_STRING
  3. Prüfung der Daten
  4. Skriptsprache
  5. 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:

Daten1&Daten2&Daten3...

Dabei ist jedes Datenfeld (Daten1, Daten2, ...) wie folgt aufgebaut:
Variablenname=Wert

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&auml;chsten 24 Stunden Antwort.<br>");
   System.out.println("Vielen Dank f&uuml;r Ihr Interesse,");
   System.out.println("auf Wiedersehen!<p> Zur&uuml;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. &Uuml;berpr&uuml;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&uuml;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 &Uuml;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.

 


Zurück || Weiter Index Startseite
Version 1.2, Jänner 2000 - Copyright © 1999-2000 by Peter Bittner