- Decodierung der übergebenen Daten
Die Environment-Variablen $ENV{'REQUEST_METHOD'} und $ENV{'QUERY_STRING'}, sowie der
Perl-Aufruf read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}) dienen dazu den codierten Datenstring,
welcher dem CGI-Programm übergeben wurde, zu empfangen.
In dieser Form ist der Datenstring noch verschlüsselt. Perl liefert jedoch gute Routinen, ihn
einfach zu decodieren. Der folgende Code aus einem CGI-Programm faßt das Vorgehen zusammen:
if ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer = $ENV{'QUERY_STRING'}; }
else { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
@nvpairs = split(/&/,$buffer);
foreach $pair (@nvpairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$in{$name} = $value;
}
|
Dieser Code enthält schon eine Optimierung. Dadurch, daß die Werte in einem
assoziativen Array gespeichert werden, kann der Programmierer den Zugriff auf die einzelnen
Werte flexibel handhaben.
Beim Zugriff auf ein Feld mit dem Namen "Text" wird der entsprechende Aufruf im Code der folgende
sein: $in{'Text'} .
In C werden die Environment-Variablen mittels des folgenden Aufrufes angefordert und zur Verarbeitung
freigegeben:
asdf = (char *) getenv ("QUERY_STRING");
if (asdf == NULL) {
args[0] = '\0';
} else {
strcpy (args, asdf);
}
|
Die ersten 3 Punkte haben die Grundlagen eines CGI-Programmes aufgezeigt. Im folgenden entwickeln wir
ein neues CGI-Programm Schritt-für-Schritt um zu zeigen, wie die wirkliche Programmierung neben der reinen
Theorie aussieht. Es wird dabei die Interpretersprache Perl verwendet.
Das Internet eignet sich sehr gut, um Umfragen zu den verschiedensten Themen zu machen.
Und in der Tat machen viele CGI-Programme nichts anderes. Wir werden deswegen ein ebensolches
Programm entwickeln. Dabei wird auch auf die Standard-Funktionen von Perl und HTML eingegangen.
Wie oben bereits ansatzweise gezeigt, benötigt jedes CGI-Programm eine Eingabeform.
- Schritt 1: Erstellung einer Eingabeform
Angenommen, wir sollen eine Umfrage darüber machen, wie ein Kurs von den Teilnehmern bewertet wird.
Das Aussehen und Design des Formulars sei bereits beschloßen, und wir haben nur noch die ehrenvolle
Aufgabe es umzusetzen.
Neben den normalen HTML-Tags stehen uns für Formulare folgende Tags zur Verfügung:
- <FORM ACTION= METHOD= ENCTYPE=> (Formular-Code) </FORM>
- <INPUT NAME= TYPE= SIZE= VALUE= ONCLICK=>
- <TEXTAREA NAME= ROWS= COLS= WRAP=> (Vorbelegungstext) </TEXTAREA>
- <SELECT NAME= SIZE=> <OPTION VALUE= CHECKED> Auswahltext </SELECT>
Die einzelnen Typen und Optionen lassen sich besser in HTML-Dokumentationen nachlesen.
Sie hier alle aufzuführen würde den Rahmen dieser Einführung sprengen.
Folgendermaßen könnte nun der HTML-Code unseres Formulares aussehen:
<HTML>
<HEAD><TITLE>Fragebogen</TITLE></HEAD>
<BODY LINK="#182650" VLINK="#501826">
<form action="http://www.uni-erlangen.de/cgi-bin/webadm/simpleform.cgi" method=post>
<ol>
<li><b>Ihr persönlicher Lernerfolg:</b><p>
<ul>
<li>Wieviel haben Sie in diesem Kurs gelernt?
<dl><dd>
<input type=radio name=Lernerfolg value=0>sehr viel
<input type=radio name=Lernerfolg value=1>viel
<input type=radio name=Lernerfolg value=2 selected>ausreichend
<input type=radio name=Lernerfolg value=3>wenig
<input type=radio name=Lernerfolg value=4>nichts
</dl>
<li>Das Tempo war
<select name=Tempo>
<option value="zu schnell">zu schnell
<option value="schnell">schnell
<option value="genau richtig" selected>genau richtig
<option value="etwas langatmig">etwas langsam
<option value="zu langsam">zu langsam
</select>
<li>Die Vorkenntnisse, die vorausgesetzt wurden, waren für mich
<dl><dd>
<input type=radio name=Vorkenntnisse value="viel zuviel">entschieden zuviel
<input type=radio name=Vorkenntnisse value="etwas zuviel">etwas zuviel
<input type=radio name=Vorkenntnisse value="genau richtig">genau richtig
<input type=radio name=Vorkenntnisse value="etwas wenig">etwas wenig
<input type=radio name=Vorkenntnisse value="viel zuwenig">entschieden zuwenig
</dl>
</ul>
<p><li><b>Verbesserungsvorschläge:</b><p>
<ul>
<li>Weitere Kommentare oder Anregungen:
<br>
<dl><dd><textarea name=kommentar wrap=virtual rows=3 cols=60>
</textarea><P>
</dl>
</ul>
</ol>
<input type=submit value=" Fragebogen absenden ">
<input type=reset value=" Alle Werte zurücksetzen ">
</form>
</BODY></HTML>
|
Und so sieht dann das Dokument mit dem Browser aus:
(Dieser Fragebogen funktioniert sogar schon...)
Je nach Wunsch und HTML-Standard lassen sich Eingabeformulare relativ flexibel programmieren.
Baut man zusätzlich noch Javascript ein, lassen sich HTML-Formulare sogar noch verbessern.
Probleme treten zur Zeit allerdings noch beim Ausdruck auf. Dies ist allerdings mehr ein Problem
der Browser und nichts worüber wir uns jetzt Gedanken machen sollten.
Die Erstellung der Eingabeform war der leichteste Teil. Nun müssen wir das Skript programmieren,
welches auf die Eingaben reagiert. Den Namen des Skriptes haben wir in der ACTION bereits
festgesetzt.
|