Formular verarbeiten
Seb.
- cgi
Hallo,
ich lese mit dem folgenden CGI-Skript (Ausschnitt) ein Formular aus:
my @Feldnamen = $cgi->param();
print $cgi->header(),
$cgi->start_html('CGI-Feedback'),
$cgi->h1('CGI-Feedback vom Programm ',$cgi->i('comments.pl'));
foreach my $Feld (@Feldnamen) {
print $cgi->b('Feldname: '),
$Feld,
$cgi->b(', Inhalt: '),
$cgi->param($Feld), "<br>";
}
(Vgl. http://de.selfhtml.org/perl/module/cgi.htm#formularverarbeitung.)
Nun sollen aber nicht alle Felder des Formulars ausgelesen werden, sondern - beispielsweise - erst alle Felder ab dem dritten Feld.
Wie muß ich das Skript ändern, damit dies funktioniert?
Dank & Gruß
Seb.
Tag Seb.
my @Feldnamen = $cgi->param();
Nun sollen aber nicht alle Felder des Formulars ausgelesen werden, sondern - beispielsweise - erst alle Felder ab dem dritten Feld.
Obiger Code liefert dir alle Formularfelder in einem Array. Willst du also nur alles ab dem dritten Element haben, dann schreibe:
for(my $i = 2; $i <= $feldnamen; $i++) {
print $cgi->b('Feldname: '),
$Feld,
$cgi->b(', Inhalt: '),
$cgi->param($Feld), "<br>";
}
(ungetestet)
Siechfred
Korrektur:
my @Feldnamen = $cgi->param();
for(my $i = 2; $i <= $Feldnamen; $i++) {
print $cgi->b('Feldname: '), $Feldnamen[$i],
$cgi->b(', Inhalt: '), $cgi->param($Feldnamen[$i]), "<br>";
}
Siechfred
my @Feldnamen = $cgi->param();
Wobei ich nicht sicher wäre, ob die Felder wirklich immer in einer definierten Reihenfolge ankommen (ich weiß es aber nicht), deshalb benutzt man ja Namen für die Parameter.
for(my $i = 2; $i <= $Feldnamen; $i++) {
keine schöne Perl Schleife und du benutzt nicht strict oder?
$Feldnamen existiert nicht.
Schöner:
for my $i (2...@Feldnamen){
Struppi.
Tag Struppi.
Wobei ich nicht sicher wäre, ob die Felder wirklich immer in einer definierten Reihenfolge ankommen (ich weiß es aber nicht), deshalb benutzt man ja Namen für die Parameter.
Ja, daran hatte ich gar nicht gedacht. Besser wäre es dann natürlich, die unerwünschten Formularfelder anhand ihres Namens auszuschließen.
for(my $i = 2; $i <= $Feldnamen; $i++) {
keine schöne Perl Schleife und du benutzt nicht strict oder?
$Feldnamen existiert nicht.
Ups, da fehlte eine Raute, es sollte $#Feldnamen heißen.
Siechfred
Wobei ich nicht sicher wäre, ob die Felder wirklich immer in einer definierten Reihenfolge ankommen (ich weiß es aber nicht), deshalb benutzt man ja Namen für die Parameter.
Ja, daran hatte ich gar nicht gedacht. Besser wäre es dann natürlich, die unerwünschten Formularfelder anhand ihres Namens auszuschließen.
Da wären wir wieder mal bei der typischen, was will der OP eigentlich, Frage.
for(my $i = 2; $i <= $Feldnamen; $i++) {
keine schöne Perl Schleife und du benutzt nicht strict oder?
$Feldnamen existiert nicht.Ups, da fehlte eine Raute, es sollte $#Feldnamen heißen.
Dadurch machst du es dir schwerer als nötig, da das der Index des letzten Elements ist musst du den Vergleich kleiner, gleich als bemühen. Mit
for(my $i = 2; $i < @Feldnamen; $i++) {
reicht das kleiner als, aber perliger ist auf jeden Fall 2...@Feldname
Struppi.
Tag Struppi.
Ups, da fehlte eine Raute, es sollte $#Feldnamen heißen.
Dadurch machst du es dir schwerer als nötig, da das der Index des letzten Elements ist musst du den Vergleich kleiner, gleich als bemühen.
Das halte ich hier für völlig unproblematisch.
aber perliger ist auf jeden Fall 2...@Feldname
Nö, "perliger" wäre for $i (0 .. $#Feldnamen).
Siechfred