Beat: $1 mit $schritte++; oder so

Beitrag lesen

Hi Struppi

Hier dass Komplette Skript:

  
#!/usr/bin/perl -w  
  
# hier mach ich mal weiter.  
  
# dann fehlt was:  
  
use strict;  
  
# zwingt uns dazu alle Variablen mit my zu deklarieren. nämlich  
  
use CGI;  
# > $cgi = new CGI;  
my $cgi = new CGI;  
  
# Aufgabe aller CGI Programmierung: Jeder Userinput ist böse  
# wir müssen also den Userinput waschen und ihn dann zwischenspeichern.  
  
# Das CGI Modul nimmt uns Arbeit ab. Aber waschen müssen wir selber.  
# Wie waschen wir? Wir melden jeden Parameter an, den wir benutzen wollen  
  
# Ein hash von Listen  
# Das erste listenelement ist eine reguläre Expression.  
# Das zweite Element ist der Defaultwert, bei Tiere einfach '';  
my %DirtyInput = (  
   tiere => [ qr/^(?:kuh|pferd|schaf)$/, '' ],  
       # Ich will jedes Tier verwerfen,  
       # das nicht ein kuh ein schaf oder ein pferd ist  
   # hier weitere Parameter  
   # ...  
);  
  
my %CleanInput = ();  
# in diesem Hash sollen unsere gewaschenen Inputs gespeichert werden.  
  
# Nun will ich vom CGI Modul eine Liste aller Parameter,  
# um darüber iterieren zu können.  
  
foreach my $par ( $cgi->param ){  
   # in $_ ist der name des Parameter  
   # existiert dieser Name als Key in DirtyInputs ?  
   # sonst gehe einfach zum nächsten name  
   exists $DirtyInput{ $_ } or next;  
  
   # Der Wert jedes Parameters ist eine Liste, nicht ein einzelner Wert.  
   # Dies weise ich nun $CleanInput{$_} zu  
   # Der Ausdruck ist etwas kompliziert  
   $CleanInput{$_} = [];  #initialisiere mit leerer Liste  
   @{ $CleanInput{$_} } = grep/$DirtyInput{$_}[0]/, $cgi->param{$_};  
  
   # grep holt alle Elemente aus $cgi->param{$_}, welche  
   # die reguläre Expression,. die in $DirtyInput{$_}[0] gespeicert ist  
   # erfolgreich passieren.  
   # expandiert läuft also im Moment ab:  
   # @{ $CleanInput{tiere} } = grep/$DirtyInput{tiere}[0]/, $cgi->param{tiere};  
   # bzw...  
   # @{ $CleanInput{tiere} } = grep/^(?:kuh|pferd|schaf)$/, $cgi->param{tiere};  
  
}  
  

So, das macht er jetzt mit allen parametern.

Abfragen kannst du jetzt

  
  
foreach( @{ $CleanInput{tiere} } ) {  .... }  
  
print $CleanInput{tiere}[0];  
  
push @{ $CleanInput{tiere} }, "ziege";  
  
$CleanInput{haustiere} = $CleanInput{tiere};  
  

Weitere Kommentare

print "Content-Type: text/html\n\n";
if($in{'tiere'} ne ''){
$mailp = "/usr/lib/sendmail";

$emailauto = " test@aol.com";

my $emailauto

$subjectauto = "Test";

my ...

open(MAIL,"|$mailp -t");
print MAIL "To: $emailauto\n";
print MAIL "From: $emailauto\n";
print MAIL "Subject: $subjectauto\n\n";
print MAIL "$in{'tiere'}";

hier müsstest du jetzt schreiben

print MAIL @{ $CleanInput{'tiere'} }, "\n";

close (MAIL);
print "Vielen Dank für die $in{'tiere'}";
}
print "<form action= "" method=post>
<input type="checkbox" name="tiere" value="Hund">Hund<BR>

label Felder !

<input type="checkbox" name="tiere" value="Katze">Katze<BR>
<input type="checkbox" name="tiere" value="Maus">Maus<BR>
<input type=submit></form>";

mfg Beat

--
><o(((°>           ><o(((°>
   <°)))o><                     ><o(((°>o
Der Valigator leibt diese Fische