#!/usr/bin/perl
# Perl-Programm, das die eingegebenen Formulardaten anzeigt

use strict;
use warnings;

$| = 1;

# global: Formulardaten
my %FORM = ();

# Header generieren
InsertHeader('Formularcheck');

# Formulareingabe parsen
ParseForm();

# Formulardaten ausgeben
ReturnForm();

# und Schluss ...
InsertTrailer();


sub ReturnForm
   {
   # Formulardaten zurueckgeben
   my $key;
   print "<h1>Formular-Check</h1>\n";
   print "<P>Die Formulardaten lauten:</P>\n";
   print '<TABLE BORDER="0" CELLPADDING="3" CELLSPACING="0">', "\n";
   foreach $key (sort(keys %FORM))
     {
     print "<TR><TD><B>$key: </B></TD><TD>$FORM{$key}</TD></TR>\n";
     }
  print "</TABLE>\n";
  print '<p><a href="javascript:history.back()">' .
        'Zur&uuml;ck zum Formular</a></p>', "\n";
  }


sub InsertHeader
  {
  # HTTP-Header und HTML-Vorspann ausgeben
  my ($htmltitle) = @_;
  print "Content-type: text/html\n\n";
  print "<HTML>\n<HEAD>\n";
  print "<TITLE> $htmltitle </TITLE>\n</HEAD>\n";
  print "<BODY>\n";
  }


sub InsertTrailer
  {
  # HTML-Nachspann ausgeben
  print "</BODY>\n</HTML>\n";
  }


sub ParseForm
    {
    my ($buffer, @pairs, $pair, $name, $value);
    # Read in text
    if ($ENV{'REQUEST_METHOD'} eq "POST")
      { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
    else
      { $buffer = $ENV{'QUERY_STRING'};  }
    @pairs = split(/&/, $buffer);
    foreach $pair (@pairs)
      {
      # Name-Wert-Paare trennen
      ($name, $value) = split(/=/, $pair);
      # Leerzeichen wieder einsetzen
      $value =~ tr/+/ /;
      # URL-codierte Zeichen (%xx) ersetzen
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
      # im hash speichern
      if (defined $FORM{$name})    # vermutlich checkbox
        { $FORM{$name} = $FORM{$name} . ", " . $value; }
      else
        { $FORM{$name} = $value; }
      }
    }

