If-Abfrage funktioniert nicht
Richard Krause
- perl
Hallo zusammen!
Versuche seit Tagen die folgende Abfrage zum Funktionieren zu bringen. Das Script soll prüfen, ob im Formularfeld ein Namen
eingegeben wurde.
Wenn ich das Script ausführe, wird aufgrund der if-Überprüfung immer jene Subroutine ausgeführt, zuerst notiert ist (in diesem Fall "ohne"). Die Überprüfung scheint nicht durchgeführt zu werden, was mach ich falsch?
Ich verwende ActivePerl 5.6 und Apache 1.3.23.
#!c:/perl/bin/perl
require "cgi-lib.pl";
require "datum.pl";
$date = &ctime(time);
chop($date);
&parse_form;
if($username eq '')
{&ohne}
else {&mit}
sub mit {
print "Content-type: text/html\n\n";
print "\n";
print "<HTML>\n";
print "Dein Name lautet: <i>$in{'username'}</i>\n";
}
sub ohne {
print "Content-type: text/html\n\n";
print "\n";
print "<HTML>\n";
print "Name fehlt\n";
}
hi,
in deinem Script ist auf den ersten Blick eigentlich nichts Fehlerhaftes zu entdecken. Aber du hast mit
require "cgi-lib.pl";
require "datum.pl";
zwei weitere Scripts sogar als "erforderlich" eingebunden, die du (noch) nicht dargestellt hast. Möglicherweise gibts darin irgendeinen Fehler.
Und dann:
#!c:/perl/bin/perl
das heißt, du hast den Apache und Perl auf einem Windows-Rechner installiert. Was sagen denn die Apache-logs dazu ? Die müßten dir eine ziemlich exakte Fehlermeldung liefern, wenn alles korrekt installiert ist.
Christoph S.
Hallo Christoph
Ich hab alles was sich auf "datum.pl" bezieht auskommentiert (wobei ich sagen muss, dass ich diese Bibiliothek auch schon in anderen scripts ohne Probleme verwendet hatte) und es hat sich nichts geändert.
Das Log-File enthält keine Fehlermeldung. Sieht so aus, als ob das Script ohne Fehler abgearbeitet würde.
Ich steh vor einem Rätsel.
Richard
Hallo Richard,
if($username eq '')
Sollte das nicht eher
if ($in{'username'} eq '')
sein? Ich hab zwar kaum Ahnung von Perl und keine Ahnung, wie die Request-Variablen vom Modul eingelesen werden, aber in Deiner Unterroutine greifst Du so darauf zu, also koennte das die Loesung sein...
Beste Gruesse
Jan
use Mosche;
Ich verwende ActivePerl 5.6 und Apache 1.3.23.
Und leider auch die veraltete cgi-lib.pl. Verwende besser CGI.pm, siehe hierzu das entsprechende Kapitel in SelfHTML 8.
require "cgi-lib.pl";
use Tschoe qw(Matti);
Kann das der Grund sein, weshalb mein Script nicht funktioniert?
cgi-lib.pl enthält ja eigentlich nur die Subroutine "parse_form" die
die einzelnen Variablen verarbeitet und lokale Variablen gleichen Namens erzeugt, die dann weiterverarbeitet werden können. Und dieses
Teil funktioniert ja auch.
Hoi,
#!c:/perl/bin/perl
#!c:/perl/bin/perl -w
use strict;
require "cgi-lib.pl";
besser: use CGI qw/param/;
require "datum.pl";
$date = &ctime(time);
chop($date);
&parse_form;
Dieses &subroutine; ist perl4-Syntax. Ueberleg mal, auf subroutine(); umzusteigen.
if($username eq '')
wo wird $username gesetzt? Und, verwende mal $username !~ /\S/ oder so.
{&ohne}
else {&mit}sub mit {
print "Content-type: text/html\n\n";
print "\n";
print "<HTML>\n";
print "Dein Name lautet: <i>$in{'username'}</i>\n";
Siehe das Posting von Jan R.: meintest du oben vielleicht $in{'username'}?
Gruesse,
CK
Hello
Hab das alles getestet.
Wenn ich #!c:/perl/bin/perl -w setze läuft das Script nicht mehr. Mit "use CGI qw/param/;" statt "require "cgi-lib.pl";" ändert sich nichts. Das &subroutine; hab ich aus dem Lama-Buch (3. Auflage für Perl 5.6). "<i>$in{'username'}</i>\n";" gibt den übergebenen Wert der Variablen aus und funktioniert, demzufolge auch die Übergabe.
Weiter Ideen?
Hoi,
#!c:/perl/bin/perl
#!c:/perl/bin/perl -w
use strict;
require "cgi-lib.pl";
besser: use CGI qw/param/;
require "datum.pl";
$date = &ctime(time);
chop($date);
&parse_form;
Dieses &subroutine; ist perl4-Syntax. Ueberleg mal, auf subroutine(); umzusteigen.
if($username eq '')
wo wird $username gesetzt? Und, verwende mal $username !~ /\S/ oder so.
{&ohne}
else {&mit}
»»
sub mit {
print "Content-type: text/html\n\n";
print "\n";
print "<HTML>\n";
print "Dein Name lautet: <i>$in{'username'}</i>\n";
Siehe das Posting von Jan R.: meintest du oben vielleicht $in{'username'}?
Gruesse,
CK
Hoi,
Wenn ich #!c:/perl/bin/perl -w setze läuft das Script nicht mehr.
Dann hast du da deinen Fehler. Lasse dein Script in der Konsole laufen mit perl -w
und achte auf die Fehlermeldungen.
Weiter Ideen?
Du hast immer noch nicht gesagt, ob du nicht statt $username $in{'username'} meinst.
Gruesse,
CK
Hallo
Vielen Dank für die Tipps. Hab nun die Abfrage (auch aufgrund des Postings in de.comp.lang.perl.cgi) so geschrieben:
if ($in{'username'} eq '')
{ohne();}
else {mit();}
und das läuft tiptop!
War mir nicht bewusst, dass ich bei der Prüfung die Variable mit "$in" angeben muss, ich hatte eigentlich gedacht, dass dies nur für die Ausgabe der html-Seite so ist. Was die () hinter den Subroutinen bedeuten, ist mir auch noch nicht ganz klar.
Hab es spasseshalber noch mit (defined ($in{'username')}getestet, das ging aber wieder nicht.
MfG
Richard