CGI zur Formular verarbeitung

NgiseD

Mitglied
Problem: CGI zur Formular verarbeitung

Hi,
hab mir ein cgi zur Formular verarbeitung geschrieben.
geht leider nicht. kann mir da jemand helfen.
bin in perl ein totaler newbie.

#!/usr/bin/perl -w

use CGI qw/:all fatalsToBrowser/;
use strict;
my $MailPgm = '/usr/sbin/sendmail'; #E-Mail Proggy 'sendmail'
my $Mail= "philme@web.de"; #Empfänger eMail-Adresse


my $Firma = param('firma'); #Firma
my $Abteilung = param('abteilung'); #Abteilung

my $Nachname = param('nachname'); #Nachname
my $Vorname = param('vorname'); #Vorname

my $Strasse = param('strasse'); #Strasse
my $Plz = param('plz'); #PLZ
my $Ort = param('ort'); #Ort
my $Land = param('land'); #Land

my $Telefon = param('telefon'); #Telefon
my $Fax = param('fax'); #Fax
my $Email = param('email'); #Email
my $Website = param('website"); #URL

my $Mitteilung = param('mitteilung'); #Mitteilung
my $Antwort = param('Antwort'); #Antwort

print header();
open (MAIL, "|$MailPgm $Mail") || die "Fehler beim Zugriff auf $MailPgm!\n";

print MAIL "Anfrage // Kontaktformular http://www.corepractice4u.de\n\n\n";

print MAIL "Firma: $Firma\n";
print MAIL "Abteilung: $Abteilung\n\n";

print MAIL "Nachname: $Nachname\n";
print MAIL "Vorname: $Vorname\n\n";

print MAIL "Strasse: $Strasse\n";
print MAIL "PLZ: $Plz\n";
print MAIL "Ort: $Ort\n";
print MAIL "Land: $Land\n\n";

print MAIL "Telefon: $Telefon\n";
print MAIL "Fax: $Fax\n";
print MAIL "Email: $Email\n";
print MAIL "Website: $Website\n\n\";

print MAIL "Mitteilung:\n";
print MAIL "$mitteilung\n\n";

print MAIL "Antwort bitte per $Antwort\n"

close MAIL;
 
Zuletzt bearbeitet:
Hallo NgiseD,

Code:
use CGI qw/:all fatalsToBrowser/;
führt bei mir zu:
Code:
:all is not exported by the CGI::Carp module
mir ist ":all" auch nicht bekannt, also sofern du nicht sicher weist, das es das gibt, begnüge dich doch mit:
Code:
use CGI qw/fatalsToBrowser/;

So, weiter im Code:
Code:
my $Mail= "philme@web.de"; #Empfänger eMail-Adresse

Hier versucht perl den Array "@web" zu Interpolieren (aufzulösen, also die Werte zu bekommen, die in "@web" stecken, der Array "@web" besteht aber nicht, also wird in $Mail "philme.de" gespeichert bzw. bei use strict; ein Kompilierungsfehler ausgegeben)

Richtig wäre:
Code:
my $Mail= "philme\@web.de"; #Empfänger eMail-Adresse
order
my $Mail= 'philme@web.de'; #Empfänger eMail-Adresse

Wenn du "" (Doppelte Anführungszeichen) verwendest, musst du bestimmte Zeichen mit einem \ auskommentieren. Wenn du '' (Einfache Anführungszeichen) verwendest versucht Perl den String nicht zu interpolieren und du musst auch keine Sonderzeichen maskieren.

Code:
print header();
Führt zu einem Fehler, da die Subroutine "header" nicht existiert. Wenn du hier einen HTML-Header ausgeben willst, musst du das so machen:
Code:
print "Content-Type: text/html\n\n";

Besser wäre aber:

use CGI;
my $cgi = new CGI;
print $cgi->header("text/html");

Desweiteren ist dein Umgamg mit Sendmail mir so nicht bekannt, evtl. tut es ja so, wenn die anderen Fehler ausgemerzt sind, aber ich würde dir mal PerlFaq9 How do i send mail empfehlen, da haste die Garantie das es tut.



Was du noch beachten solltest, wäre das du zum Schluss, nachdem die Mail erfolgreich gesendet wurde sowas wie:
Code:
print "content-type: text/html\n\n"; #nur ausgeben, wenn du noch keinen HTML-Header ausgegeben hast!
print "E-Mail erforlgreich versandt!";

ausgibst, da sonst ein Internal Server Error entsteht und du in deinem Logfile was von "Premature End Of Script Headers" lesen kannst.

Mehr ist mir jetzt nicht aufgefallen. :)

//Noch ein paar Schreibfehler ausgemerzt :)
 
Zuletzt bearbeitet:
Zurück