neue *pl erstellen
Martiano
- perl
Hallo,
mein Freund der einen kleinen Buchversand hat wurde das CGI abgeschaltet.
Ich habe einen Server auf dem ich es laufen lassen könnte habe aber keine Ahnung von Perl. Nur html und css.
Ich habe versucht das script von hier ein bisschen anzupassen weiss aber nicht ob es funktionieren kann.
Vor allem weiss ich nicht wo ich www.meine_website.de/danke.htm einsetzen soll.
Wenn jemand mir helfen will hier der gekürzte Code des Formulars, darunter das von mir umgeschriebene buchversand.pl.
Formular:
<HTML>
<HEAD>
<TITLE>Online-Bestellung</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
gekürzt...
//-->
</SCRIPT>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" ALINK="#400080" VLINK="#880088">
<P>
<FONT COLOR="#000000" size="2" FACE="Arial,MS Sans Serif,Helvetica">
<h1>Bestellformular </h1>
<HR>
<BR><BR>
<FONT>
</p>
<SCRIPT LANGUAGE="JavaScript">
<!--
tag("P");
document.write("<FONT COLOR="#000000" size="2" FACE="Arial,MS Sans Serif,Helvetica">");
document.write("<H3>An:</H3>");
if ("mein_name"!="") {document.write("mein_name<BR>");}
if ("mein_Buchversand Buchversand"!="") {document.write("mein_Buchversand Buchversand<BR>");}
document.write("Strasse Nr.<BR>");
document.write("PLZ Ort<BR>");
if ("04532-82949"!="") {document.write("Tel: 04532-82949 ");}
if ("04532-82942"!="") {document.write("Fax: 04532-82942");}
document.write("<BR>");
if ("meine-Email@xxx.de"!="") {document.write("E-Mail: <a href="mailto:meine-Email@xxx.de">meine-Email@xxx.de</a><BR>");}
if ("http://www.meine-website.de"!="") {document.write("Homepage: <a href="http://www.meine-website.de">http://www.meine-website.de</a><BR>");}
document.write("<BR>");
document.write("<H3>Ihre Daten:</H3>");
gekürzt...
//-->
</SCRIPT>
<BR>
<table border="1" cellpadding="0" cellspacing="1">
<Tr BGCOLOR="#000000">
<th align="right">
<FONT color="#FFFFFF" size="2" FACE="Arial,MS Sans Serif,Helvetica">
Menge
</FONT>
</th>
<th align="right">
<FONT color="#FFFFFF" size="2" FACE="Arial,MS Sans Serif,Helvetica">
Artikelnr
</FONT>
</th>
<th align="left">
<FONT color="#FFFFFF" size="2" FACE="Arial,MS Sans Serif,Helvetica">
Bezeichnung
</FONT>
</th>
<th align="left">
<FONT color="#FFFFFF" size="2" FACE="Arial,MS Sans Serif,Helvetica">
Einzelpreis <br> in €
</FONT>
</th>
<th align="left">
<FONT color="#FFFFFF" size="2" FACE="Arial,MS Sans Serif,Helvetica">
Gesamtpreis <br> in €
</FONT>
</th>
<th align="left">
<FONT color="#FFFFFF" size="2" FACE="Arial,MS Sans Serif,Helvetica">
<SCRIPT LANGUAGE="JavaScript">
<!--
var i,ua=navigator.appName;
if (parent.waehr.length>0)
{
document.write(" Gesamtpreis <br> in ");
if (ua.indexOf("Microsoft")>-1)
{
document.write("<SELECT NAME="WAEHR" ONBLUR="javascript:wchange(value)" ONCHANGE="javascript:wchange(value)">");
i=parent.awaehr;
document.write("<OPTION VALUE=""+i+"">"+parent.waehr[i].land+"</OPTION>");
for (var i=0; i<parent.waehr.length; i++)
{
if (parent.waehr[i].land != "" && i!=parent.awaehr)
{
document.write("<OPTION VALUE=""+i+"">"+parent.waehr[i].land+"</OPTION>");
}
}
document.write("</SELECT>");
}
else
{
document.write(parent.waehr[parent.awaehr].land);
}
}
//-->
</SCRIPT>
</FONT>
</th>
</tr>
<SCRIPT LANGUAGE="JavaScript">
<!--
Code für den Warenkorb gekürzt...
s="meine-Email@xxx.de";
if (s=="") {s="meine-Email@xxx.de"}
var sub="";
if (sub.length>0)
{
if (sub.substring(sub.length-1,sub.length)=="/")
{
sub=sub.substring(0,sub.length-1) ;
}
if(sub.search("http") == -1){sub="http://"+sub;}
}
if (""!="")
{
sub=sub+"/"+"";
if (sub.substring(sub.length-1,sub.length)=="/")
{
sub=sub.substring(0,sub.length-1) ;
}
}
if (sub.length>0)
{
sub=sub+"/submit.htm";
}
else
{
sub="submit.htm";
}
if ("0"=="1")
{
document.write("<FORM ACTION="" METHOD="POST" ONSUBMIT="return Bestellung(this)">");
}
else
{
if ("0"=="2")
{
document.write("<FORM ACTION="http://www.afs-online.de/cgi-bin/FormMail.pl" METHOD="POST" ONSUBMIT="return Bestellung(this)">");
}
else
{
document.write("<FORM ACTION="mailto:"+s+" ?subject=Bestellung von "+Name+"" METHOD="POST" ENCTYPE="text/plain" ONSUBMIT="return Bestellung(this)">");
}
}
document.write("<P>");
document.write("<INPUT TYPE="HIDDEN" NAME="recipient" VALUE=""+s+"">");
document.write("<INPUT TYPE="HIDDEN" NAME="subject" VALUE="Bestellung von "+Name+"">");
document.write("<INPUT TYPE="HIDDEN" NAME="email" VALUE=""+parent.anschrift.E_Mail+"">");
if (""!="Wahr")
{
document.write("<INPUT TYPE="HIDDEN" NAME="redirect" VALUE=""+sub+"">");
}
else
{
document.write("<INPUT TYPE="HIDDEN" NAME="afssub" VALUE=""+sub+"">");
}
document.write("<INPUT TYPE="HIDDEN" NAME="ORDER" VALUE=""+bestell+"">");
//-->
</SCRIPT>
<INPUT TYPE="BUTTON" NAME="" VALUE="<- zurück" ONCLICK="JavaScript:history.back()">
<INPUT TYPE="BUTTON" NAME="" VALUE="- Ausdrucken -" ONCLICK="JavaScript:print()">
<INPUT TYPE="SUBMIT" NAME="" VALUE="Bestellung absenden ->">
</p>
</FORM>
</FONT>
</div>
</BODY>
</HTML>
..............................................................
Hier das geänderte buchversand.pl:
#!/usr/bin/perl
$Sendmail_Prog = "/usr/lib/sendmail";
$mailto = 'meine-Email@xxx.de';
use CGI;
$query = new CGI;
@names = $query->param;
$delimiter = $query->param('delimiter'); # ---> Begrenzerzeichen zwischen name und value
$returnhtml = $query->param('return'); # ---> URL für Dankeseite
$subject = $query->param('subject'); # ---> E-Mail-Subject
# VERHINDERT sonst möglichen MISSBRAUCH des Skripts
$subject =~ s/\s/ /g;
$mailtext = "";
foreach(@names) {
$name = $_;
@values = "";
@values = $query->param($name);
if($name ne "return" && $name ne "subject" && $name ne "delimiter") {
foreach $value (@values) {
$mailtext = $mailtext.$name;
$mailtext = $mailtext.$delimiter;
$mailtext = $mailtext.$value."\n";
}
}
}
open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
print MAIL "To: $mailto\n";
print MAIL "Subject: $subject\n\n";
print MAIL "$mailtext\n";
close(MAIL);
print "Location: $returnhtml\n\n";
.........................................................................
Wo wird die $returnhtml als "www.meine_website.de/danke.htm" definiert?
Klappt das überhaupt?
Formular:
Brrr, schnell skip...
..............................................................
Hier das geänderte buchversand.pl:
#!/usr/bin/perl
#!/pfad/zu/perl
#kann auf verschiedenen Servern anders lauten,
#deshalb zuerst nachfragen, falls nix funzt
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
-------> Individuelle Parameter des Skriptes - bitte anpassen!
Wo wird die $returnhtml als "www.meine_website.de/danke.htm" definiert?
my $returnhtml als "www.meine_website.de/danke.htm";
--> SMTP-Programm zum Versenden der Mail:
$Sendmail_Prog = "/usr/lib/sendmail";
my $Sendmail_Prog = "/usr/lib/sendmail";
--> Ziel-Mailadresse, an die gesendet werden soll:
$mailto = 'meine-Email@xxx.de';
my $mailto = 'meine-Email@xxx.de';
-------> Modul für CGI-Scripts einbinden:
use CGI;
use CGI;
-------> Modul für CGI-Scripts zum Einlesen der Formulardaten anwenden:
$query = new CGI;
my $query = new CGI;
@names = $query->param;
my @names = $query->param;
-------> interne Daten aus den erwarteten hidden-Feldern auslesen:
$delimiter = $query->param('delimiter'); # ---> Begrenzerzeichen zwischen name und value
my $delimiter = $query->param('delimiter');
$returnhtml = $query->param('return'); # ---> URL für Dankeseite
my $returnhtml = $query->param('return');
$subject = $query->param('subject'); # ---> E-Mail-Subject
my $subject = $query->param('subject');
-------> alle Whitespace-Zeichen (Leerzeichen, Tabulator, Newline) in Leerzeichen wandeln
# VERHINDERT sonst möglichen MISSBRAUCH des Skripts
$subject =~ s/\s/ /g;
$subject =~ s/\s/ /g;
use Encode qw/encode decode/;
$subject = decode('MIME-B', $subject);
-------> Text der E-Mail aus den Formulardaten ermitteln:
$mailtext = "";
my $mailtext = "";
foreach(@names) {
$name = $_;
foreach my $name(@names){
@values = "";
@values = $query->param($name);
if($name ne "return" && $name ne "subject" && $name ne "delimiter") {
foreach $value (@values) {
foreach my $value (@values) {
$mailtext = $mailtext.$name;
$mailtext = $mailtext.$delimiter;
$mailtext = $mailtext.$value."\n";
}
}
}
-------> E-Mail versenden:
open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
open(MAIL,"|$Sendmail_Prog -t")
or die("Fehler beim Aufruf des mailprogramms $!");
print MAIL "To: $mailto\n";
print MAIL "To: $mailto\r\n";
print MAIL "Subject: $subject\n\n";
print MAIL "Subject: $subject\r\n";
print MAIL "\r\n";
print MAIL "$mailtext\n";
print MAIL "$mailtext\n";
close(MAIL);
-------> Dankeseite an Browser senden:
print "Location: $returnhtml\n\n";
print "Location: $returnhtml\r\n\r\n";
.........................................................................
Klappt das überhaupt?
Das wird sich erweisen.
mfg Beat
Formular:
Brrr, schnell skip...
soo schlimm? ;-)
ok, ich werde es so probieren.
Vielen Dank für die schnelle Hilfe
sorry für das doppelposting, hatte einiges verändert und wollte nicht verwirren. Wenn möglich bitte löschen.Hier nochmal hoffentlich an richtiger Stelle:
mein aktuelles Problem ist folgende Fehlermeldung wenn ich das Formular abschicke:
Premature end of script headers: FormMail.pl
Hier der Teil des Formulars der das Schicken regelt:
--------------------------------------------------------------------
s="meine@email.de";
if (s=="") {s="meine@email.de"}
var sub="";
if (sub.length>0)
{
if (sub.substring(sub.length-1,sub.length)=="/")
{
sub=sub.substring(0,sub.length-1) ;
}
if(sub.search("http") == -1){sub="http://"+sub;}
}
if (""!="")
{
sub=sub+"/"+"";
if (sub.substring(sub.length-1,sub.length)=="/")
{
sub=sub.substring(0,sub.length-1) ;
}
}
if (sub.length>0)
{
sub=sub+"/submit.htm";
}
else
{
sub="submit.htm";
}
if ("1"=="1")
{
document.write("<FORM ACTION="http://www.meine-url.de/cgi-bin/FormMail.pl" METHOD="POST" ONSUBMIT="return Bestellung(this)">");
}
else
{
if ("1"=="2")
{
document.write("<FORM ACTION="http://www.meine-url.de/cgi-bin/FormMail.pl" METHOD="POST" ONSUBMIT="return Bestellung(this)">");
}
else
{
document.write("<FORM ACTION="mailto:"+s+" ?subject=Bestellung von "+Name+"" METHOD="POST" ENCTYPE="text/plain" ONSUBMIT="return Bestellung(this)">");
}
}
document.write("<P>");
document.write("<INPUT TYPE="HIDDEN" NAME="recipient" VALUE=""+s+"">");
document.write("<INPUT TYPE="HIDDEN" NAME="subject" VALUE="Bestellung von "+Name+"">");
document.write("<INPUT TYPE="HIDDEN" NAME="email" VALUE=""+parent.anschrift.E_Mail+"">");
if ("Falsch"!="Wahr")
{
document.write("<INPUT TYPE="HIDDEN" NAME="redirect" VALUE=""+sub+"">");
}
else
{
document.write("<INPUT TYPE="HIDDEN" NAME="afssub" VALUE=""+sub+"">");
}
document.write("<INPUT TYPE="HIDDEN" NAME="ORDER" VALUE=""+bestell+"">");
//-->
</SCRIPT>
----------------------------------------------------------------------
hier mein FormMail.pl:
#!/usr/bin/perl
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
my $returnhtml = "http://www.meine-url.de/submit.htm";
my $Sendmail_Prog = "/usr/sbin/sendmail -t -i";
my $mailto = 'meine@email.de';
use CGI;
my $query = new CGI;
my @names = $query->param;
my $delimiter = $query->param('delimiter'); # ---> Begrenzerzeichen zwischen name und value
my $returnhtml = $query->param('return'); # ---> URL für Dankeseite
my $subject = $query->param('subject'); # ---> E-Mail-Subject
$subject =~ s/\s/ /g;
use Encode qw/encode decode/;
$subject = decode('MIME-B', $subject);
my $mailtext = "";
foreach my $name(@names){
@values = "";
@values = $query->param($name);
if($name ne "return" && $name ne "subject" && $name ne "delimiter") {
foreach my $value (@values) {
$mailtext = $mailtext.$name;
$mailtext = $mailtext.$delimiter;
$mailtext = $mailtext.$value."\n";
}
}
}
open(MAIL,"|$Sendmail_Prog -t")
or die("Fehler beim Aufruf des mailprogramms $!");
print MAIL "To: $mailto\r\n";
print MAIL "Subject: $subject\r\n";
print MAIL "\r\n";
print MAIL "$mailtext\n";
close(MAIL);
print "Location: $returnhtml\r\n\r\n";
-----------------------------------------------------------------------
auf was weisst dieser Fehler hin?
Ich kann weder javascript noch perl.
Was kann ich ändern oder ist offensichtlich falsch?
sorry für das doppelposting, hatte einiges verändert und wollte nicht verwirren. Wenn möglich bitte löschen.Hier nochmal hoffentlich an richtiger Stelle:
mein aktuelles Problem ist folgende Fehlermeldung wenn ich das Formular abschicke:
Premature end of script headers: FormMail.pl
Dann sieh in den error.log auf dem Server nach.
Hier der Teil des Formulars der das Schicken regelt:
will ich nicht analysieren.
hier mein FormMail.pl:
...
foreach my $name(@names){
@values = "";
my @values=();
@values = $query->param($name);
...
-------> Dankeseite an Browser senden:
Das ändern wir:
print "Content-type: text/plain; charset=UTF-8\r\n\r\n";
print "Testausgabe, Dankeseite\n";
exit;
Erst nach Erfolg
Wir haben es mit HTTP-Header zu tun:-> Network-Newlines
print "Location: $returnhtml\r\n\r\n";
Das kann an diesem Punkt fehlschlagen wenn Warnungen ausgegeben werden.
Es kann aber nicht ein ein Location-header UND ein response-body gesendet werden.
auf was weisst dieser Fehler hin?
siehe error.log auf dem Server.
Ich kann weder javascript noch perl.
Dein Problem.
mfg Beat
Dann sieh in den error.log auf dem Server nach.
kurze Zwischenfrage, ich finde kein error.log auf dem server.
Per FTP-Zugang finde ich keine solche Datei.
Wie muss ich das anfordern?
Hier habe ich das von dir vorgeschlagene eingefügt. Wenn ich das richtig verstehe dann soll ich es erstmal so ausprobieren:
#!/usr/bin/perl
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
my $returnhtml = "http://www.meine-url.de/submit.htm";
my $Sendmail_Prog = "/usr/sbin/sendmail -t -i";
my $mailto = 'meine@email.de';
use CGI;
my $query = new CGI;
my @names = $query->param;
my $delimiter = $query->param('delimiter');
my $returnhtml = $query->param('return'); # ---> URL für Dankeseite
my $subject = $query->param('subject'); # ---> E-Mail-Subject
$subject =~ s/\s/ /g;
use Encode qw/encode decode/;
$subject = decode('MIME-B', $subject);
my $mailtext = "";
foreach my $name(@names){
@values = "";
my @values=();
@values = $query->param($name);
if($name ne "return" && $name ne "subject" && $name ne "delimiter") {
foreach my $value (@values) {
$mailtext = $mailtext.$name;
$mailtext = $mailtext.$delimiter;
$mailtext = $mailtext.$value."\n";
}
}
}
# -------> E-Mail versenden:
open(MAIL,"|$Sendmail_Prog -t")
or die("Fehler beim Aufruf des mailprogramms $!");
print MAIL "To: $mailto\r\n";
# Wir geben Network-Newlines aus!
print MAIL "Subject: $subject\r\n";
# schliesse die Header-Sektion ab:
print MAIL "\r\n";
print MAIL "$mailtext\n";
close(MAIL);
print "Content-type: text/plain; charset=UTF-8\r\n\r\n";
print "Testausgabe, Dankeseite\n";
exit;
my @values=();
habe ich auch reingesetzt.
print "Content-type: text/plain; charset=UTF-8\r\n\r\n";
print "Testausgabe, Dankeseite\n";
exit;
muss ich Testausgabe und Dankeseite durch andere Eingaben ersetzen wenn ich es testen will?
Erst nach Erfolg
die untenstehende Angabe wieder austauschen gegen das Eingefügte, so wie ich dich verstanden habe.
Wir haben es mit HTTP-Header zu tun:-> Network-Newlines
print "Location: $returnhtml\r\n\r\n";
Das kann an diesem Punkt fehlschlagen wenn Warnungen ausgegeben werden.
Es kann aber nicht ein ein Location-header UND ein response-body gesendet werden.
verstehe ich nicht ohne mehr zu lernen...
Ich kann weder javascript noch perl.
Dein Problem.
leider, leider ;-)
falls es zu umfangreich wird bitte sagen, es sollte nur ein Versuch sein den unzuverlässigen E-mail Client abzuschalten.
Da ich gesehen hatte wie kurz so ein CGI ist dachte ich dass sich die Hilfe im Rahmen hält.
schönen Dank bis hierher
Dann sieh in den error.log auf dem Server nach.
kurze Zwischenfrage, ich finde kein error.log auf dem server.
Per FTP-Zugang finde ich keine solche Datei.
in dem Fall erzeuge eine Datei error.txt. Setze entsprechende Schreibrechte auf diese Datei und ersetze ersetze die folgende Zeile
use CGI::Carp qw(fatalsToBrowser);
durch
BEGIN {
use CGI::Carp qw(carpout);
open(LOG, ">>","error.txt")
or die "Unable to append to error.txt: $!\n";
carpout(*LOG);
}
Fehler werden dann in diese Datei geschrieben.
Es kann aber nicht ein ein Location-header UND ein response-body gesendet werden.
verstehe ich nicht ohne mehr zu lernen...
Ein Location Header bedeutet, dass ein Redirect gesendet wird (Status Code, 301)
Bei einem solchen ist es nicht vorgesehen dass der Client einen Response body anzeigt.
falls es zu umfangreich wird bitte sagen, es sollte nur ein Versuch sein den unzuverlässigen E-mail Client abzuschalten.
Die Zuverlässigkeit des Scriptes ist so auch nicht besser. Es gibt keinerlei serverseitige Validierung.
Unter anderem Fehlen solche Dinge wie ein Mail-Header zum charset.
mfg Beat
Die Zuverlässigkeit des Scriptes ist so auch nicht besser. Es gibt keinerlei serverseitige Validierung.
Unter anderem Fehlen solche Dinge wie ein Mail-Header zum charset.
Ich schliesse daraus dass es aber auch so funktionieren müsste.
Aber durch Deine Antwort blicke ich schon etwas besser durch, vielen Dank.
Ich werde das so gut wie möglich heute alles abarbeiten und melde mich hoffentlich mit Erfolg wieder.
BEGIN {
use CGI::Carp qw(carpout);
open(LOG, ">>","error.txt")
or die "Unable to append to error.txt: $!\n";
carpout(*LOG);
}
Ersetzung habe ich gemacht und die Datei
error.txt wurde erstellt im cgi-bin Verzeichnis. Schreibrechte sehen so aus:
-rw-rw-r-- 1 ftpxx- users 1965 Oct 22 13:36 FormMail.pl
-rw-rw-rw- 1 ftpxx- users 0 Oct 22 13:04 error.txt
Leider kommt immer noch diese Fehlermeldung:
Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.
Fehlermeldung:
Premature end of script headers: FormMail.pl
Im Internet habe ich immer wieder die Schreibrechte als Fehlerursacher für diese Meldung gesehen. Aber das scheint ja hier nicht vorzuliegen.
Das Verzeichnis selbst (cgi-bin) hat die Rechte 755.
Aber auch in der Datei error.txt wird nichts geschrieben nachdem ich den Fehler reproduziert habe.
Die FormMail.pl sieht jetzt so aus:
#!/usr/bin/perl
use strict;
use warnings;
BEGIN {
use CGI::Carp qw(carpout);
open(LOG, ">>","error.txt")
or die "Unable to append to error.txt: $!\n";
carpout(*LOG);
}
# schreibt Fehler in die datei error.txt
my $returnhtml = "http://www.meine-adresse.de/submit.htm";
my $Sendmail_Prog = "/usr/sbin/sendmail -t -i";
my $mailto = 'meine@email.de';
use CGI;
my $query = new CGI;
my @names = $query->param;
my $delimiter = $query->param('delimiter');
my $returnhtml = $query->param('return'); # ---> URL für Dankeseite
my $subject = $query->param('subject'); # ---> E-Mail-Subject
$subject =~ s/\s/ /g;
use Encode qw/encode decode/;
$subject = decode('MIME-B', $subject);
my $mailtext = "";
foreach my $name(@names){
@values = "";
my @values=();
@values = $query->param($name);
if($name ne "return" && $name ne "subject" && $name ne "delimiter") {
foreach my $value (@values) {
$mailtext = $mailtext.$name;
$mailtext = $mailtext.$delimiter;
$mailtext = $mailtext.$value."\n";
}
}
}
open(MAIL,"|$Sendmail_Prog -t")
or die("Fehler beim Aufruf des mailprogramms $!");
print MAIL "To: $mailto\r\n";
print MAIL "Subject: $subject\r\n";
print MAIL "\r\n";
print MAIL "$mailtext\n";
close(MAIL);
print "Content-type: text/plain; charset=UTF-8\r\n\r\n";
print "Testausgabe, Dankeseite\n";
exit;
Kann ich noch etwas testen?
Ersetzung habe ich gemacht und die Datei
error.txt wurde erstellt im cgi-bin Verzeichnis. Schreibrechte sehen so aus:
-rw-rw-r-- 1 ftpxx- users 1965 Oct 22 13:36 FormMail.pl
Diese Rechte sind zu wenig. Ein script, dass über einen handler vom Perl interpreter ausführbar sein soll, muss schon auch ein x als Recht in der richtigen Gruppe enthalten.
-rw-rw-rw- 1 ftpxx- users 0 Oct 22 13:04 error.txt
Leider kommt immer noch diese Fehlermeldung:
Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.
Fehlermeldung:
Premature end of script headers: FormMail.pl
Im Internet habe ich immer wieder die Schreibrechte als Fehlerursacher für diese Meldung gesehen. Aber das scheint ja hier nicht vorzuliegen.
Das Verzeichnis selbst (cgi-bin) hat die Rechte 755.Aber auch in der Datei error.txt wird nichts geschrieben nachdem ich den Fehler reproduziert habe.
foreach my $name(@names){
@values = "";
Die obige Zeile erscheint irgendwie falsch.
Was denkt der Noob?
my @values=();
@values = $query->param($name);
mfg Beat
Diese Rechte sind zu wenig. Ein script, dass über einen handler vom Perl interpreter ausführbar sein soll, muss schon auch ein x als Recht in der richtigen Gruppe enthalten.
»»
nur zum testen habe ich jetzt diese Rechte:
-rwxrwxrwx 1 ftpxx- users 1965 Oct 22 13:36 FormMail.pl
-rwxrwxrwx 1 ftpxx- users 0 Oct 22 13:04 error.txt
die ist erstmal immer noch da:
Fehlermeldung:
Premature end of script headers: FormMail.pl
und error.txt 0Byte
foreach my $name(@names){
@values = "";Die obige Zeile erscheint irgendwie falsch.
Was denkt der Noob?
»»
Grundsätzlich würde ein Noob vermutlich nicht beachten dass hinter @names die geschweifte Klammer ist und damit schon mal alles schiefläuft.
Ansonsten versteht er vielleicht noch dass er erst die geschweifte Klammer lösen muss weil das dann wieder @names ergibt.
Und vielleicht noch dass die Variable $name den Inhalt von @names hat.
Sowas denkt der Noob vielleicht. Mir wär das zu schwer. ;-)
my @values=();
@values = $query->param($name);
Meine Werte werden so gesammelt?
Ich hab dem Code nichts getan...
foreach my $name(@names){
@values = "";Die obige Zeile erscheint irgendwie falsch.
Was denkt der Noob?
»»
Grundsätzlich würde ein Noob vermutlich nicht beachten dass hinter @names die geschweifte Klammer ist und damit schon mal alles schiefläuft.
Ansonsten versteht er vielleicht noch dass er erst die geschweifte Klammer lösen muss weil das dann wieder @names ergibt.
Und vielleicht noch dass die Variable $name den Inhalt von @names hat.
Sowas denkt der Noob vielleicht. Mir wär das zu schwer. ;-)my @values=();
@values = $query->param($name);
use strict; verlangt, dass jeder neue Variable mit my declariert werden mus.
@values="";
stellt einen undeklarierte neue Variable dar.
Diese Zeile sollte gar nicht im Code stehen. Sie ist durch dich im Code verblieben.
Ich hab dem Code nichts getan...
Tut mir leid, aber du als Betreiber bist für den Code verantwortlich.
Entweder du brichst das unternehmen ab, oder du arbeitest dich in die Materie hinein.
Schmeiss mal folgendes Script hoch:
#!/usr/bin/perl
use strict;
use warnings;
print "Content-type: text/plain\r\n\r\n", "Hello World\n";
mfg Beat
@values="";
stellt einen undeklarierte neue Variable dar.
Diese Zeile sollte gar nicht im Code stehen. Sie ist durch dich im Code verblieben.
»»
hab die Zeile entfernt.
aber sorry, du hast recht. Ich muss beim Umschreiben nicht aufgepasst haben. Ich wusste auch das mit strict nicht. Soweit bin ich noch nicht beim Lehrgang. Hab ja erst gestern gestartet.
foreach my $name(@names){
my @values=();
@values = $query->param($name); # Muss hier kein my vor?
}
Schmeiss mal folgendes Script hoch:
#!/usr/bin/perl
use strict;
use warnings;print "Content-type: text/plain\r\n\r\n", "Hello World\n";
auwei, schon hierbei kommt dieselbe Meldung.
Jedesmal dachte ich gleich hab ichs.
Und jetzt ist das anscheinend etwas grundsätzliches.
$subject = decode('MIME-B', $subject);
Dies ist falsch. Richtig muss es lauten:
$subject = encode…
Der Encodingname ist vorzugsweise 'MIME-Header' statt 'MIME-B', damit der Wartungsprogrammierer auch auf Anhieb die passende Dokumentationsseite findet.