Daten werden nicht übertragen
Chris
- perl
Hallo zusammen,
auf meiner Webseite ist ein Feedback Formular vorhanden.
Das Skript läuft soweit einwandfrei. Aber die eingegebenen Daten von mir werden nicht übernommen.
Ich fülle das Formular komplett aus und betätige den Submit Button. Ich werde automatisch auf eine "Dankeseite" umgeleitet, welche danach wieder auf die Startseite umleitet.
Soweit so gut. Eine Email habe ich dann auch erhalten.
Aber bei den Feldern (Name, Vorname, usw.) steht nichts. Die eingegeben Daten werden einfach nicht übernommen.
Weiß jemand warum, oder könnte mir einen Tipp geben, was ich nachsehen kann?
Gruss Chris.
Hallo zusammen,
Tach,
[Viel Info, aber keine einzige Zeile Code]
Du mußt in Zeile 17 die 0 durch "0" ersetzen.
oder auch nicht.
Wie soll man Dir helfen, wenn Du Dein Script (bzw. die relevanten Stellen) nicht zeigst?
Gruss Chris.
Andreas
Hi Andreas,
sorry hatte ich vergessen :)
Code:
#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";
read(STDIN, $input, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $input);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
@vars = split(/&/, $ENV{QUERY_STRING});
foreach $var (@vars) {
($v,$i) = split(/=/, $var);
$v =~ tr/+/ /;
$v =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$i =~ tr/+/ /;
$i =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$i =~ s/<!--(.|\n)*-->//g;
$INFO{$v} = $i;
}
if($INFO{'action'} ne "") {
$action = $INFO{'action'};
}
else {
$action = $FORM{'action'};
}
if($FORM{'anrede'} eq "Herr") { $anrede = "Herr"; }
if($FORM{'anrede'} eq "Frau") { $anrede = "Frau"; }
if($FORM{'anrede'} eq "Firma") { $anrede = "Frau"; }
$name = $FORM{'name'};
$vorname = $FORM{'vorname'};
$strasse = $FORM{'strasse'};
$hausnummer = $FORM{'hausnummer'};
$plz = $FORM{'plz'};
$wohnort = $FORM{'wohnort'};
$nachricht = $FORM{'text'};
if($FORM{'1'} eq "on") { $interesse = "Erstberatung"; }
if($FORM{'2'} eq "on") { $interesse = "Konzeptentwicklung"; }
if($FORM{'3'} eq "on") { $interesse = "Angebot"; }
if($FORM{'4'} eq "on") { $interesse = "Bannergestaltung"; }
if($FORM{'5'} eq "on") { $bewertung = "Sehr gut"; }
if($FORM{'6'} eq "on") { $bewertung = "Gut"; }
if($FORM{'7'} eq "on") { $bewertung = "Befriedigend"; }
&send_mail;
sub send_mail {
$from = $FORM{'emailadresse'};
$email = "email1@web.de";
$subject = "Kontaktformular";
open(MAIL,"|/usr/sbin/sendmail -t") || die "Error! Can't open SendMail!"; # Entsprechend anpassen: "/usr/sbin/sendmail"
print MAIL "From:$from\n";
print MAIL "To:$email\n";
print MAIL "Subject:$subject\n\n";
print MAIL <<prmail;
Absender: $from
Eingegebene Daten:
Anrede: $anrede
Name: $name
Vorname: $vorname
Strasse: $strasse
Hausnummer: $hausnummer
PLZ: $plz
Wohnort: $wohnort
Nachricht:
-----------------------------------------------
$nachricht
-----------------------------------------------
Interesse: $interesse
Bewertung: $bewertung
prmail
close (MAIL);
&danke;
}
sub danke {
open(DATA, "../danke.html") || die "Fehlermeldung: $!"; # Pfad zu "danke.html"
foreach (<DATA>) {
$dank_seite .= $_;
}
close(DATA);
print $dank_seite;
exit;
}
Gruss Chris
Hi Andreas,
Hi Chris,
sorry hatte ich vergessen :)
drum sag ich es ja.
Code:
#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
Du benutzt also Module.
Warum benutzt Du nicht strict (use strict;)? Das solltest Du Dir angewöhnen, denn es meldet viele Sachen, die sonst schwer zu finden sind.
Warum benutzt Du nicht das CGI-Modul, wo Du die Parameter ganz einfach zugreifen kannst?
Content-Header
print "Content-type: text/html\n\n";
Eingaben lesen
read(STDIN, $input, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $input);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
Ne, die Mühe mache ich mir wirklich nicht, das auch nur verstehen zu wollen. Um die Parameter zu lesen, gibt es im CGI-Modul einen schönen Hash.
[...]
if($FORM{'anrede'} eq "Herr") { $anrede = "Herr"; }
if($FORM{'anrede'} eq "Frau") { $anrede = "Frau"; }
if($FORM{'anrede'} eq "Firma") { $anrede = "Frau"; }
Warum werden Firmen mit Frau angeredet?
[...]
if($FORM{'1'} eq "on") { $interesse = "Erstberatung"; }
if($FORM{'2'} eq "on") { $interesse = "Konzeptentwicklung"; }
if($FORM{'3'} eq "on") { $interesse = "Angebot"; }
if($FORM{'4'} eq "on") { $interesse = "Bannergestaltung"; }
Benutzt Du etwa name="1" in Deinem HTML? Daß name-Attributwerte nicht mit einer Ziffer beginnen dürfen, ist Dir bekannt?
[...]
Du solltest Dir unbedingt das CGI-Modul angucken.
Das kann so vieles ganz einfach, das Du hier mühsam von Hand programmierst.
Gruss Chris
Andreas
use Mosche;
#!/usr/bin/perl
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI;
my $q = new CGI;
print "Content-type: text/html\n\n";
print $q->header;
[ alte Routinen, um CGI-Parameter einzulesen ]
$q->param('...') ist besser
Den Rest habe ich mir nicht mehr angeschaut. Korrigiere die oben stehenden Fehler.
use Tschoe qw(Matti);
Hallo,
Korrigiere die oben stehenden Fehler.
Wobei korrekterweise gesagt werden sollte, daß es sich nicht um Fehler im strengen Sinne, sondern 'nur' um Code handelt, der nicht dem hier üblichem Standard folgt.
Und nein, ich will keine Diskussion bezüglich der Sinnhaftigkeit dieser 'Standards' vom Zaun brechen.
Grüße
Klaus
Hallo,
read(STDIN, $input, $ENV{'CONTENT_LENGTH'});
Das, und der nachfolgende Code geht davon aus, daß Du die Daten mit der HTTP-Methode POST gesendet hast. Solltest Du jedoch im Formular die Methode GET eingetragen haben (oder auch keine Methode angegeben haben), so kann das nicht funktionieren, da bei GET die Formular-Daten ausschließlich über $ENV{QUERY_STRING} erreichbar sind.
Da es den Anschein hat, daß Du mit der Auswertung von Formulardaten in Perl nicht so ganz fit bist, solltest Du auf eine bewährte Schnittstelle zurückgreifen, welche Dir viel Arbeit abnehemen kann.
Die am weitesten verbreitete ist das Modul CGI.pm. Aber das hat Dir ja schon Matti ans Herz gelegt. Wichtig ist in diesem Zusammenühang auch, daß Du dann nicht mehr auf selbstgeschriebenen code oder andere Schnittstellen, wie 'cgi-lib.pl' zugreifen solltest, da dann wieder (und nicht nur damit) mit der HTTP-Methode POST Probleme auftreten.
Grüße
Klaus
Hi Klaus,
wie Du richtig gesehen hast, bin ich totaler Perl Anfänger und weiß leider die Antworten kaum zu deuten :)
Mit der Post Anweisung hast Du recht, ich hatte Get eingetragen.
Achja...ich schau mal wie ich jetzt weiterkomme.
Ein Danke auf jeden Fall für Eure Mühe.
Gruss Chris
Hi Klaus,
Mit der Post Anweisung hast Du recht, ich hatte Get eingetragen.
Jetzt klappt es Klaus. Dankeschön. Das war der Fehler.