SELFHTML Forums-Auslese CGI und Perl | |
Forums-Auslese |
|
Wie erzeugt man einen Hash aus den Formularangaben? |
|
Basierend auf einem Forums-Beitrag vom 23.10.1998 von:
Oliver Zwenzner, oliver.zwenzner@sietec.de
Stefan Münz, muenz@csi.com
Folgende Funktion weist einem Hash die Eingaben eines Formulars zu.
sub Formulardaten_einlesen { if ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer = $ENV{'QUERY_STRING'}; } else { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } for (split(/&/, $buffer) { tr/+/ /; s/%([a-fA-F0-9]{2})/pack("C", hex($1))/eg; ($key, $value) = split(/=/); $form{$key} = $value; } } |
Anschließend kann man auf die Werte der Formularfelder über den Hash %form zugreifen.
$wert = $form{'name'}; |
So wird der Wert des Formularfeldes name an den Skalar $wert zurückgeliefert.
Basierend auf einem Forums-Beitrag vom 31.08.1998 von:
Markus Schaber, markus.schaber@student.uni-ulm.de
Wenn beide Formulare als eine Mail ankommen sollen, nicht als zwei getrennte Mails, benötigen Sie ein CGI-Skript, das die beiden zusammenfügt. Dies ist am einfachsten, indem Sie die eingetragenen Werte des ersten Formulars an das zweite übergeben. Dazu erstellt das erste CGI-Skript dynamisch das HTML-Dokument mit dem zweiten Teil der Eingabefelder und speichert die bereits vorhandenen Werte in versteckten Formularfeldern. Das zweite CGI-Skript erstellt dann die Mail, die alle eingegebenen Werte enthält.
Es folgt ein Beispiel von der Redaktion:
Der erste Teil des Eingabeformulars befindet sich in einem HTML-Dokument. Als action wird ein CGI-Skript angegeben, das die Eingaben übernimmt und den zweiten Teil des Formulars erstellt.
<form action="feedback1.pl" method="POST"> <input name="Eingabefeld"> <!-- weitere Eingabefelder --> <input type="submit" value="Absenden"> </form> |
Dieses Skript liest die übergebenen Werte ein und speichert sie in einem Hash. Dann erstellt es eine HTML-Datei mit dem zweiten Teil des Formulars, das gleichzeitig alle Werte des ersten Teil des Formulars in versteckten Feldern enthält.
#!/usr/bin/perl read(STDIN, $EnvDaten, $ENV{'CONTENT_LENGTH'}); @Daten = split(/&/,$EnvDaten); for (@Daten) { @value = split(/=/, $_); $value[1] =~ tr/+/ /; $value[1] =~ s/%([a-fA-F0-9]{2})/pack("C", hex($1))/eg; $p{"$value[0]"} = $value[1]; } print "Content-Type: text/html\n\n"; print '<html><head><title>Zweiter Teil des Formulars</title></head><body>'; print '<form action="feedback2.pl" method="POST">'; for (keys %p) { print "<input type=\"hidden\" name=\"$_\" value=\"$p{'$_'}\">\n"; } print '<!-- weitere Eingabefelder -->'; print '<input type="submit" value="Absenden"> print '</form>%lt;/body></html>'; |
Das CGI-Skript, das vom zweiten Teil des Formulars aufgerufen wird, arbeitet ähnlich wie das erste CGI-Skript, allerdings sendet es die Daten per eMail statt diese zur Erstellung eines Formulars zu nutzen. Wie das funktioniert, wird im SELFHTML-Abschnitt Eingelesene Formulardaten als Mail zum Formularanbieter senden beschrieben.
weiter: | File-Upload |
zurück: | Perl: Sonstiges |
SELFHTML Forums-Auslese CGI und Perl |
© 2000 das Redaktionsteam