Daniel: Perl: if-Abfrage

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";
}

  1. 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!

  2. 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