Perl: if-Abfrage
Daniel
- perl
Hallo Leute,
ich hätte mal eine Frage bezüglich Perl. Ich habe einen Formular auf einer Web-Seite aufgebaut. Je nachdem was eingegeben wird, erfolgt eine Weiterleitung zu einer bestimmten Seite. Leider klappt es nicht wie ich es möchte. Es wird immer die Seite im if-Rumpf geladen, und das auch wenn die Formular-Eingaben mit dem Inhalt des Zeilen-Arrays übereinstimmt. Vielleicht könnt ihr mir sagen, was ich da falsch mache, würde mich freuen.
Daniel
Anhang: Source-Code
#!/usr/bin/perl
if ($ENV{'REQUEST_METHOD'} eq 'GET')
{
$Daten = $ENV{'QUERY_STRING'}
}
else
{
read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});
}
@Formularfelder = split (/&/, $Daten);
foreach $Feld (@Formularfelder)
{
($name, $value) = split(/=/, $Feld);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9] [a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$Formular[$i] = $name;
$i = $i + 1;
$Formular[$i] = $value;
$i = $i + 1;
}
@Zeilen =("");
open(PASSDAT, "<edit.txt");
while(<PASSDAT>)
{
push(@Zeilen,$_);
}
close(PASSDAT);
print $Zeilen[0];
if (($Formular[1] eq $Zeilen[1]) && ($Formular[3] eq $Zeilen[2]))
{
print "Location: ../ml/index.html\n\n";
}
else
{
print "Location: ../fl/index.html\n\n";
}
hi!
Liegt vermutlich an den Zeilenumbrüchen, die am Ende jeder Zeile hängen, aber in den Formularfeldern nicht vorkommen. Änder dein Skript mal folgendermaßen ab:
open(PASSDAT, "<edit.txt");
while(<PASSDAT>)
{
chomp;
»» push(@Zeilen,$_);
}
close(PASSDAT);
Dann sollte es funktionieren, wenn ich mich nicht irre.
bye, Frank!
Hi,
die Reihenfolge der Parameter muß nicht unbedingt mit der der Formularfelder übereinstimmen. Schreibe also statt:
»» $Formular[$i] = $name;
»» $i = $i + 1;
»» $Formular[$i] = $value;
»» $i = $i + 1;
einfach:
$Formular{$name} = $value;
und frage dann statt
if (($Formular[1] eq $Zeilen[1]) && ($Formular[3] eq $Zeilen[2]))
if ($Formular{'feldname'} eq $Zeilen[1] && $Formular{'feldname'} eq $Zeilen[2]) # 'feldname' jeweils ersetzen
Zusammen mit chomp() sollte es dann gehen. Noch eine Kleinigkeit:
»» print "Location: ../ml/index.html\n\n";
»» print "Location: ../fl/index.html\n\n";
Möööp! Herzlichen Glückwunsch. Sie haben sich zur Reinigung des Aufzugs entschlossen :-)
IMMER eine absolute URI angeben, also:
print "Location: http://complete.path.to/your/ml/index.html\n\n";
Eine relative Angabe wird zwar meist korrekt interpretiert, ist aber trotzdem falsch.
Cheatah