Moin,
(Ich habe erst vor einigen Tagen angefangen Perl zu lernen, also
#!/usr/local/bin/perl
#!/usr/local/bin/perl -w
use strict;
damit vermeidest du (u.a.) typische Anfaengerfehler.
(siehe perldoc perlrun
[1] und perldoc strict
[2])
use CGI qw(:standard);
gut ;)
@notwendig=("name","email"); #Formularfelder
nicht so gut; wenn du strict benutzt, bekommst du hier auch einen Fehler.
besser und eleganter:
my @notwendig = qw(name email);
&checkfields;
das ist gar nicht gut. Globale Variablen in einer Funktion zu benutzen, sollte man nur in gut begruendbaren Faellen tun.
also beispielsweise:
&checkfields (@notwendig);
dann waere folgendes zu tun:
##############################################
sub checkfields
{
my @notwendig = @_;
foreach $check(@notwendig)
die Variable $check brauchst du nicht. Wenn du sie weglaesst, stehen die Elemente jeweils in $_:
for (@notwendig)
{
if (defined param($check))
{
if ($fields{$check} eq "")
was ist %fields?
{
&nochmal; # daten unvollständig
}
}
else
{
&fehler; # hmmm! Am Code rummanipuliert?!
}
}
}
... etwa so:
unless (defined param($_)) {
&fehler;
} else {
unless (length (param($_))) {
&nochmal;
} else {
# hier ok
}
}
Bei normalen Textfeldern ist das so erstmal ok. Bei Checkboxen waere zu beachten, dass sie, wenn nicht aktiviert 'not defined' sind, weil sie gar nicht gesendet werden.
Das naechste Problem tritt ueblicherweise auch bei Checkboxen auf, die mit gleichem Namen gruppiert werden. Dann werden naemlich bei mehreren Aktivierungen die Namen auch mehrfach versendet. Das ist eine der Stellen, wo der "herkoemmliche" Code zum CGI-Parameter-Parsen nicht greift. CGI.pm kann das und liefert die bei param('name') dann ein Array. Siehe perldoc CGI
[3].
Ansonsten, fuer den Anfang schon mal nicht schlecht. Viel Spass weiterhin mit Perl ;-)
Viele Gruesse,
n.d.p.
[1] http://www.perldoc.com/perl5.6/pod/perlrun.html#Command Switches
[2] http://www.perldoc.com/perl5.6/lib/strict.html
[3] http://www.perldoc.com/perl5.6/lib/CGI.html#FETCHING THE VALUE OR VALUES OF A SINGLE NAMED PARAMETER%3A