Problem mit Script
Stephan Brun
- perl
Hallo
Ich bin ein ziemlicher CGI-Anfänger, habe mich aber nun doch mal was an das Thema herangewagt. Leider mit nur mässigem Erfolg. Mein Script zur Datenaufbereitung will einfach nicht funktionieren, obwohl ich nun alles viele Male genau durchgegangen bin, ohne einen Fehler zu finden.
Das Script wird zwar anscheinend eingelesen, es dauert dann aber lange (1bis 2 Minuten), bis ich die Meldung "Keine Daten gefunden" erhalte.
Andere Scripts, welche ich erstellt habe, laufen problemlos, am Webserver oder Perlinterpreter kann es also nicht liegen, der Fehler muss im Script sein.
Kann mir jemand weiterhelfen?
Viele Dank
Stephan
Hier nun das Script:
#!c:\perl\bin\perl.exe
$daten = <STDIN>;
%daten = &CGIDatenaufbereiter ($daten);
print "Content-type: text/html\n\n";
print '<html>';
print '<head>';
print '<title>Antwortseite</title>';
print '</head>';
print '<body>';
print '<hr>';
while ( ($temp, $wert = each %daten)
{
print "$wert";
}
print '<hr>';
print '</body>';
print '</html>';
sub CGIDatenaufbereiter
{
local ($cgidatenskalar, $name, $daten);
local @cgidatenliste;
local %cgidatenhash;
if ( $_[0] )
{
$cgidatenskalar = $_[0];
}
else
{
print STDERR "Es wurden keine Daten an den CGIDatenaufbereiter übergeben\n";
}
@cgidatenliste = split(/[&;]/ , $cgidatenskalar);
foreach $listeneintrag (@cgidatenliste)
{
$listeneintrag =~ s/+/ /go;
($name, $daten) = split( /=/ , $listeneintrag );
$name =~ s/%(..)/pack("c",hex($1))/ge;
$daten =~ s/%(..)/pack("c",hex($1))/ge;
$cgidatenhash{$name} = $daten;
}
return %cgidatenhash;
}
Hallo Stephan,
Mein Script zur Datenaufbereitung will einfach nicht funktionieren, obwohl ich nun alles viele Male genau durchgegangen bin, ohne einen Fehler zu finden.
Ein Syntaxfehler ist mir aufgefallen: In der while-Schleife werden 2 Klammern geöffnet, nur eine geschlossen.
Das Script wird zwar anscheinend eingelesen, es dauert dann aber lange (1bis 2 Minuten), bis ich die Meldung "Keine Daten gefunden" erhalte.
Es wartet auf eine Eingabe über STDIN. Führe das Script mal unter DOS/Eingabeaufforderung aus und gebe einen Text ein, dann erhältst du auch eine Ausgabe.
Schau dir mal <../../tga.htm> und <../../tgcm.htm>] an.
Dort wird beschrieben, wie du Daten auslesen bzw. übergeben kannst.
Johannes
Hallo Stephan,
Hallo
Ich bin ein ziemlicher CGI-Anfänger, habe mich aber nun doch mal
was an das Thema herangewagt. Leider mit nur mässigem Erfolg.
Du meinst wahrscheinlich Perl.
Mein Script zur Datenaufbereitung will einfach nicht
funktionieren, obwohl ich nun alles viele Male genau
durchgegangen bin, ohne einen Fehler zu finden.
starte es von der Konsole aus und Du bekommst folgenden Fehler:
syntax error at C:\test.pl line 13, near ")
{"
Execution of C:\test.pl aborted due to compilation errors.
Aber dazu spaeter mehr.
Das Script wird zwar anscheinend eingelesen, es dauert dann aber
lange (1bis 2 Minuten), bis ich die Meldung "Keine Daten
gefunden" erhalte.
Eigentlich sollte es gar nicht laufen. Vielleicht doch nur ein Cut'n Paste Fehler
Andere Scripts, welche ich erstellt habe, laufen problemlos, am
Webserver oder Perlinterpreter kann es also nicht liegen, der
Fehler muss im Script sein.
Hmm, wie sieht denn Deine Form aus mit dem Du das Skript startest ?
Wichtig ist hier, dass Du method=post benutzt.
Kann mir jemand weiterhelfen?
Ok, lass mal sehen...
Hier nun das Script:
#!c:\perl\bin\perl.exe
#!perl -w
Damit erhaelst Du informative Meldungen, die Dir beim Debuggen helfen
use strict;
Einschraenkendes Pragma um Fehler zu vermeiden,
perldoc strict
Wenn Du das benutzt und Du solltest, muss jede Variable mit my
deklariert oder mit Package::Var zugegriffen werden.
$daten = <STDIN>;
%daten = &CGIDatenaufbereiter ($daten);
print "Content-type: text/html\n\n";
print '<html>';
print '<head>';
print '<title>Antwortseite</title>';
print '</head>';
print '<body>';
print '<hr>';
while ( ($temp, $wert = each %daten)
Hier ist ein Syntaxfehler. Dies muss
while ( ($temp, $wert *)* = each %daten)
Natuerlich ohne die *
{
print "$wert";
}
print '<hr>';
print '</body>';
print '</html>';sub CGIDatenaufbereiter
{
local ($cgidatenskalar, $name, $daten);
local @cgidatenliste;
local %cgidatenhash;
Hier solltest Du "my" nehmen
perldoc -f my
perldoc -f local
if ( $_[0] )
{
$cgidatenskalar = $_[0];
}
else
{
print STDERR "Es wurden keine Daten an den
»» CGIDatenaufbereiter übergeben\n";
}
@cgidatenliste = split(/[&;]/ , $cgidatenskalar);
foreach $listeneintrag (@cgidatenliste)
{
$listeneintrag =~ s/+/ /go;
Das /o ist hier voellig unnoetig.
perldoc perlop
($name, $daten) = split( /=/ , $listeneintrag );
$name =~ s/%(..)/pack("c",hex($1))/ge;
$daten =~ s/%(..)/pack("c",hex($1))/ge;
$cgidatenhash{$name} = $daten;
}return %cgidatenhash;
}
So jetzt sollte es funktionieren, ich wuerde jedoch vorschlagen,
das Ganze folgendermassen zu machen:
#!/usr/bin/perl -w
use strict;
use CGI qw/:standard/;
print header,
hr,
print map ($_ param($_))),param()));
Schau Dir mal
perldoc CGI
an
Viele Dank
Stephan
Gruss
Kai
Kann mir jemand weiterhelfen?
use CGI;
Peter