GET und POST.... POST da klappt was nicht!
Chrisman
- perl
Hallo,
habe ein sehr schwerwiegendes Problem bei meinen Scripten! Bis vor kurzem hat alles noch super funktioniert, da liefen die Scripte noch auf einem Linux SuSe 6.1 Server. Mittlerweile hat mein Provider den Server gewechselt, es handelt sich jetzt um SuSe 7.1! Hier das komplette Test-Script:
#!/usr/bin/perl -w
print "content-type: text/html\n\n";
print "REQUEST_METHOD: $ENV{'REQUEST_METHOD'}<p>\n";
print "GET: $ENV{'QUERY_STRING'}<p>\n";
read STDIN, $query_inhalt, $ENV{'CONTENT_LENGTH'};
print "POST: $query_inhalt<p>\n";
if ($ENV{'REQUEST_METHOD'} eq "GET")
{
print "<p>Es wird die GET-Methode genutzt!";
}
else
{
print "<p>Es wird die Post-Methode genutzt! (else)";
}
print <<HTML;
<p><B>GET:</b>
<p>
<form action="http://www.dvdbombastic.de/cgi-bin/test.pl" method="GET">
<input type="text" name="user">
<input type="submit">
</form>
<p><B>POST:</b>
<p>
<form action="http://www.dvdbombastic.de/cgi-bin/test.pl" method="post">
<input type="text" name="user">
<input type="submit">
</form>
<hr>
HTML
if ($ENV{'REQUEST_METHOD'} eq "GET")
{
$query_inhalt = $ENV{'QUERY_STRING'};
}
else
{
read STDIN, $query_inhalt, $ENV{'CONTENT_LENGTH'};
}
@query = split(/&/, $query_inhalt);
for (@query)
{
($key,$value) = split /=/;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9]{2})/pack("C", hex($1))/eg;
$value =~ s/\n/<br>/g;
$value =~ s/ä/ä/g;
$value =~ s/ö/ö/g;
$value =~ s/ü/ü/g;
$value =~ s/Ä/Ä/g;
$value =~ s/Ö/Ö/g;
$value =~ s/Ü/Ü/g;
$value =~ s/ß/ß/g;
$param{$key} = $value;
}
print "HIER MUSS NUN IMMER WAS AUSGEGEBEN WERDEN UND ZWAR, WAS HINTER user= STEHT:<br>";
print "$param{'user'}";
Ich habe es alle durchgetest und es klappt alles wunderbar! Nur leider ganz am Ende, gibt er, wenn man die Post-Methode benutzt nicht den Inhalt von $param{'user'} aus!!!!???? Woran liegt das???? Auf dem alten Server hat er das gemacht!! :((((((
Ich bin verzweifelt und weiß nicht mehr weiter!!! Wer kann mir helfen??
Hallo,
[...]
read STDIN, $query_inhalt, $ENV{'CONTENT_LENGTH'};
[...]
read STDIN, $query_inhalt, $ENV{'CONTENT_LENGTH'};
Vielleicht ahnst Du nun schon, woran es liegen könnte :-)
@query = split(/&/, $query_inhalt);
for (@query) {
($key,$value) = split /=/;
[...]
$param{$key} = $value;
}
Das sieht mir aber schwer danach aus, daß Du lieber CGI.pm verwenden solltest (perldoc CGI).
print "HIER MUSS NUN IMMER WAS AUSGEGEBEN WERDEN UND ZWAR, WAS HINTER user= STEHT:<br>";
print "$param{'user'}";
Ich habe es alle durchgetest und es klappt alles wunderbar! Nur leider ganz am Ende, gibt er, wenn man die Post-Methode benutzt nicht den Inhalt von $param{'user'} aus!!!!???? Woran liegt das???? Auf dem alten Server hat er das gemacht!! :((((((
Es würde mich wundern, wenn es auf dem alten Server geklappt haben sollte. Afaik kann man nämlich aus <STDIN> nur einmal lesen. Dann ist nämlich der Puffer geleert. Du versuchst es zweimal. Einmal zu "Testzwecken" (wieso eingentlich?) und einmal um die Daten einzulesen. Im Gegensatz zur bei GET gesetzten Umgebungsvariable $ENV{QUERY_STRING} die während das Skript läuft erhalten bleibt, kann dies bei POST aus bereits erwähnten Gründen nicht funktionieren.
Nimm einfach die "Tests" vom Anfang weg, und mach` daraus ein eigenes Skript.
Gruß Alex