Login
Login-Name Passwort


 
Newsletter
Werbung

Sa, 11. Dezember 1999, 00:00

Perl/CGI-Workshop, Teil 16

Hallo CGI!

Unser "Hallo, CGI"-Programm soll so aussehen: Wir haben eine HTML-Datei (index.html), auf der ein Eingabefeld ist, in das man einen beliebigen Text eingeben kann. Drückt man dann den OK-Button, wird vom CGI-Script eine Seite generiert, die "Sie sagten:" anzeigt, gefolgt von dem Text, den man im Eingabefeld eingegeben hatte. Kopieren Sie die HTML-Datei in /home/httpd/html oder wo auch immer Ihr Server-Root ist und die Datei hallo.cgi (das Perl-Script) entsprechend nach /home/httpd/cgi-bin.

Schauen wir uns doch einfach mal das Perl-Script an. Aber halt, ein paar Kleinigkeiten möchte ich noch loswerden: Die Werte der Eingabefelder werden einem CGI-Programm über die Standardeingabe übergeben, doch den Aufwand, den man betreiben müsste, um diese in entsprechende Variablen zu quetschen und zu dekodieren, lassen wir lieber vom Modul CGI erledigen (Wenn Sie wissen wollen, was man mit diesem Modul noch machen kann, schauen Sie sich mal /usr/lib/perl5/*/CGI.pm an). Der HTML-Code, den dann der Browser des Benutzers bekommen wird, wird einfach an die Standard-Ausgabe geschrieben.

<em>#!/usr/bin/perl -w</em>
<em># hello.cgi -- by W. Jährling</em>
use CGI;
$form = new CGI;
$feld1 = $form->param('feld1');
print "Content-type: text/html\n\n";
print <<"END_OF_TEXT";
<html>
<head><title>Test</title></head>
<body>
<h1>Sie sagten: $feld1</h1>
</body>
</html>
END_OF_TEXT

Damit der Browser des Benutzers auch weiß, dass es sich um HTML handelt (ein CGI-Programm kann alles mögliche, sogar ein GIF-Bild erzeugen!), ist es nötig, dass "Content-type: text/html" gefolgt von zwei Newline-Zeichen ausgegeben wird. Und wenn Sie in den bisherigen Teilen dieses Workshops aufgepasst haben, werden Sie auch gleich erkannt haben, dass der HTML-Code als HERE-Dokument in das Script eingebettet ist. Viel mehr gibt es dazu nicht zu sagen, außer vielleicht, dass angenommen wird, dass das Feld, in dem der Text eingegeben wurde, den Namen feld1 hat.

Der HTML-Code der index.html sieht dann so aus:

<html>
<head>
 <title>X</title>
</head>
<body>
 <form action="/cgi-bin/hallo.cgi" method="post">
 <input type="text" name="feld1"><br>
 <input type="submit" value="OK">
 <input type="reset" value="Abbrechen>"
 </form>
</body>
</html>

Wenn auf den Submit-Button gedrückt wird, werden dem Script, das beim form-Tag als Wert von action angegeben wurde, alle Felder innerhalb des gleichen form-Tags übergeben. Dadurch können auf einer Seite auch mehrere voneinander unabhängige Formulare stehen (z.B. eines zum Durchsuchen aller Seiten auf dem Server nach Begriffen, zum Bestellen eines Newsletters und eine Umfrage).

Das Feld method kann entweder get oder post enthalten. Die veraltete Methode get hat den Nachteil, dass nur eine beschränkte Menge Daten übergeben werden (denn statt der Standardeingabe wird eine Umgebungsvariable verwendet), der Rest wird abgeschnitten. Außerdem würden eingegebene Passwörter in der URL-Zeile des Browsers sichtbar, denn die Parameter werden mit dem Fragezeichen an die URL angehängt. (Zum Beispiel http://www.nowhere.de/cgi-bin/script.cgi?feld1=Hallo).

Der Rest sollte selbsterklärend sein.


[<< Zurück]
Kommentare (Insgesamt: 0 || Kommentieren )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung