SELFHTML Forums-Auslese CGI und Perl


Forums-Auslese
Formularauswertung

Diese Seite ist ein Dokument mit Informationstext

 Wie erzeugt man einen Hash aus den Formularangaben?
 Wie erstellt man ein mehrseitiges Formular?

 

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.

Beispiel:

$wert = $form{'name'};

Erläuterung:

So wird der Wert des Formularfeldes name an den Skalar $wert zurückgeliefert.

 

Wie erstellt man ein mehrseitiges Formular?

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:

Erster Teil des Formulars

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>

Erstes CGI-Skript

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>';

Zweites CGI-Skript

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

© 1999  das Redaktionsteam