Brauche Hilfe: CGI-Skript läuft nicht (Internal Server Error)
Marc
- cgi
Hallo allerseits,
ich möchte mir Daten aus einem Formular senden lassen.
Da die Versendung per E-Mail scheinbar nicht immer funktioniert, wollte ich es per CGI-Skript machen.
Habe leider überhaupt keinen Schimmer vom Programmieren,
deshalb habe ich ein fertiges Skript versucht zu modifizieren (nach der "Abschreibe-Methode", wie gesagt hab ich keine Ahnung von Perl, CGI oder wasauchimmer).
Irgendwas hab ich aber scheinbar falsch gemacht, hier mein Skript:
#!/usr/bin/perl
&parse_form_data (*formular_feld);
&start_mail();
#***************************************************
#***************************************************
$Vorname = $formular_feld{'Vorname'};
$Nachname = $formular_feld{'Nachname'};
$Land = $formular_feld{'Land'};
$E-Mail = $formular_feld{'E-Mail'};
$Frage1 = $formular_feld{'Frage1'};
$Frage2 = $formular_feld{'Frage2'};
$Frage3 = $formular_feld{'Frage3'};
$Kommentar = $formular_feld{'Kommentar'};
$Email_Empfaenger = $formular_feld{'an'};
$Email_Von = $formular_feld{'von'};
$Email_Antwort_An = $formular_feld{'antwort'};
$Betreff = $formular_feld{'betreff'};
$Ziel = $formular_feld{'ziel'};
#***************************************************
#***************************************************
$Mail_Text = <<Ende_Mail;
Email von der Website
Vorname: $Vorname
Nachname: $Nachname
Land: $Land
E-Mail: $E-Mail
Frage1: $Frage1
Frage2: $Frage2
Frage3: $Frage3
Kommentar: $Kommentar
Ende_Mail
#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
open (SENDMAIL, "| /usr/sbin/sendmail -t -n");
print SENDMAIL "From: $Email_Von\n";
print SENDMAIL "To: $Email_Empfaenger\n";
print SENDMAIL "Reply-To: $Email_Antwort_An\n";
print SENDMAIL "Subject: $Betreff\n";
print SENDMAIL "\n";
print SENDMAIL $Mail_Text;
print "Location: $Ziel","\n\n";
exit(0);
sub parse_form_data
{
local (*FORM_DATA) = @_;
local ( $request_method, $query_string, @key_value_pairs, $key_value, $key, $value);
$request_method = $ENV{'REQUEST_METHOD'};
if ($request_method eq "GET") {
$query_string= $ENV{'QUERY_STRING'};
} elsif ($request_method eq "POST") {
read (STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
}
@key_value_pairs = split (/&/, $query_string);
foreach $key_value (@key_value_pairs) {
($key, $value) = split (/=/, $key_value);
$value =~ tr/+/ /;
$value =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C", hex ($1))/eg;
if (defined($FORM_DATA{$key})) {
$FORM_DATA{$key} = join ("\0", $FORM_DATA{$key}, $value);
} else {
$FORM_DATA{$key} = $value;
}
}
}
sub start_mail
{
$Email_Empfaenger = $formular_feld{'an'};
$Email_Von = $formular_feld{'von'};
$Email_Antwort_An = $formular_feld{'antwort'};
$Betreff = $formular_feld{'betreff'};
$Ziel = $formular_feld{'ziel'};
}
Vielen herzlichen Dank für Eure Hilfe!
Hallo
Das Script studier ich jetzt sicher nicht auf Fehler durch,
aber dieser FormMailer hier funktioniert grundsätzlich problemlos:
http://www.worldwidemart.com/scripts/formmail.shtml
LG
Aquariophile
Hi Marc,
Irgendwas hab ich aber scheinbar falsch gemacht
<cite>"funktioniert nicht" funktioniert nicht. Fehlerbeschreibung, bitte.</cite>
&parse_form_data (*formular_feld);
Weh-oh-weg. Das scheint ja aus der frühen Programmier-Steinzeit zu stammen.
open (SENDMAIL, "| /usr/sbin/sendmail -t -n");
Dir ist bewußt, wovon Du Dich an dieser Stelle abhängig gemacht hast?
Und daß eine Fehlerbehandlung Dir das Leben sehr erleichtern würde?
Vielen herzlichen Dank für Eure Hilfe!
Ich fürchte, die beste Hilfe wird sein, Dir zu sagen:
"Dieses Skript taugt nichts, weil es nur im absoluten Schönwetterbetrieb
halbwegs funktionieren wird und beim kleinsten Problemchen alle Viere
von sich strecken wird - insbesondere ohne Dir irgend einen Anhaltspunkt
zu liefern, wo das Problem steckt.
Insbesondere ist es nicht darauf ausgelegt, von jemandem eingesetzt zu
werden, der nicht selbst programmieren kann."
Also wirst Du Dir entweder ein wesentlich robusteres Skript suchen oder
selbst programmieren lernen müssen.
Viele Grüße
Michael