Thread Hilfe mit Formular Script: CGI - Perl ### Formular (30 answers)
Opened by Strat at 2004-01-16 12:37

Strat
 2004-01-16 12:37
#28166 #28166
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
so auf auf die schnelle fallen mir mal folgende sachen auf:

1. schreibe anstelle von
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if ($ENV{"REQUEST_METHODE"} eq "POST")
{
read(STDIN, $daten, $ENV{"CONTENT_LENGTH"});
} else {
$daten = $ENV{"QUERY_STRING"};
}
@paare = split("&", $daten);
foreach $paar (@paare)
{
$paar =~ tr/+/ /;
$paar =~ s/%(..)/pack("C", hex($1))/eg;
($name, $wert) = split("=", $paar);
$FORM{$name} = $wert;
}

besser:
Code (perl): (dl )
1
2
3
use CGI;
my &#36cgi = CGI->new();
my %FORM = &#36cgi->Vars();

dann kannst du schon mal viele probleme und Abstuerze vermeiden (perl mag z.B. nicht hex('zz'), und wenn im wert eines parameters ein = vorkommen sollte, dann wuerde alles nach dem = verloren gehen...

2. du schreibst oefter
Code: (dl )
if ($FORM{'input07'} ne "" and ne "Musterweg 10") {print MAIL "$FORM{'input07'}\n\n"; }

ne vergleicht immer zwei werte, also da besser schreiben:
Code: (dl )
1
2
3
4
if ($FORM{'input07'} ne "" and 
$FORM{'input07'}ne "Musterweg 10") {
print MAIL "$FORM{'input07'}\n\n";
}

(ebenso in den folgezeilen

4.
Code: (dl )
&falsch(Fehler 02: Bitte eine gueltige eMail Adresse eingeben !) unless ($input13 =~ m/^[a-zA-Z0-9][-\_\.]*[a-zA-Z0-9]\@[a-zA-Z0-9][-\_\.]*[a-zA-Z0-9][\.]([a-zA-Z]){2,4}$/);

Email-Adressen wie irgendwas.@irgendwas.de sind auch gueltig... zum Ueberpruefen einer Email-Adresse verwende ich gerne das Perl-Modul CPAN:Mail::RFC822::Address

5. Zeile 75: [\.] ist fuer die katz; da reicht \.

6. eine gueltige Telefonnummer sieht folgendermaszen aus?
Code: (dl )
/^[0]\d+.\d+$/

also am anfang eine 0, danach eine oder mehrere Ziffern, danach ein beliebiges Zeichen (.), danach ein oder mehrere ziffern am ende?

7. wenn die Bedingung in if/unless recht lange ist, ist die Form
Code: (dl )
1
2
3
if (langeBedingung) {
block
}

normalerweise besser lesbar als
Code: (dl )
block if langeBedingung;


8. Zu Crian's Aussage wegen der Prototypen: eigene Subroutinen rufe ich immer mit &Subroutine(...) auf, weil ich nie Prototypen verwende (wofuer auch?), und weil es mir logischer erscheint, vor der Subroutine ein & zu haben (analog zu %hash, @array, $scalar, ...). Nur eingebaute Perl-Subroutinen (auch aus Modulen) sollte man besser nicht mit &Subroutine(...) aufrufen, weil sich da das mit den Prototypen auswirken koennte (aber sogar das wuerde bei tests schnell auffallen). und so kann man gut eigene Subs von fremden unterscheiden
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/

View full thread Hilfe mit Formular Script: CGI - Perl ### Formular