Fehler bei Parameterübergabe
Redflash
- php
Hallo, ich hoffe es kann mir einer Helfen.
Habe einen Formmailer auf meine Seite eingebaut.
Der gleiche, der auf einer anderen optimal funktioniert.
Nur auf der neuen funktionierts jetzt plötzlich nichtmehr.
Die html-Datei soll Parameter (email und empfänger) an das php-Skript übergeben und das php-Skript soll die Mail abschicken.
Das Kontaktieren des php-Skripts funktioniert. Nur bekommt dieses Skript keine Eingabe, sprich die Parameter. Kann also keine email versenden, weil es keine empfängeradresse bekommt.
Hat jemand Ahnung davon?
Liegt das Problem vielleicht bei meinem Webhoster?
Oder hab ich irgendwelche Einstellungen zu machen?
Ansonsten funktioniert php problemlos auf der Seite.
Gruss
redflash
Hallo,
Hat jemand Ahnung davon?
Ahnung haben hier viele. Jedoch wäre 'ne URL und etwas Quelltext nett, damit wir Dein Problem genau analysieren können. Bei so einer Fehlerbeschreibung kann es wirklich alles sein.
Liegt das Problem vielleicht bei meinem Webhoster?
Dürfte nicht.
Ich rate einfach mal und denke, Du hast ein mailto:-Formular durch den Formmailer ersetzt. Du hast aber enctype="text/plain" aus dem <form>-Element _nicht_ herausgenommen und verwendest IE als Browser. Wenn das alles der Fall ist, nimm enctype="text/plain" raus und versuch's nochmal, wenn nicht, komm mit einer _ordentlichen_ Fehlerbeschreibung wieder.
Ach ja: (weil das in letzter Zeit so viele falsch gemacht haben, muss ich das sagen) Wenn Du mit einer richtigen Fehlerbeschreibung wiederkommst, mache bitte _keinen_ neuen Thread auf sondern bleibe in diesem.
Grüße,
Christian
Nachtrag:
Ich würde die Empfängeremailadresse _unbedingt_ ins Formmailer-Script hardcoden - sonst werden Spammer an deinem Formmailer ein gefundenes fressen haben ...
Grüße,
Christian
hier die HTML-Datei
<html>
<head>
<title>FC Stirnband Zeller</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="main.css" type="text/css">
</head>
<style type="text/css">
Body {
background-image:url(_back.jpg);
background-repeat:no-repeat;
background-position:center;
background-attachment:fixed;}
</style>
<body bgcolor="#000000">
<table border="0" align="center">
<tr>
<td width="500"> </td>
<table align="center" width="450">
<tr>
<td align="center"><div id="inhalt10_white">MAILINGLISTE</div></td>
</tr>
<TR><TD height="20"></td></tr>
<tr>
<td align="left" width="450"><div id="inhalt9_white">Durch die Mailingliste kann jeder an alle, die sich angemeldet haben, Mails schreiben.
Wer eine e-Mail an den Verteiler schicken möchte, der richtet seine e-Mail ganz einfach an <a id="inhalt9_red" href="mailto:fcstirnband@herrzeller.de">fcstirnband@herrzeller.de</a>.
<br>Für die Anmeldung/Abmeldung zur Mailingliste gilt folgendes Verfahren:<br> Ihr könnt dazu die folgenden Formulare benutzen. Als Antwort bekommt ihr zunächst eine automatische Mail, die ihr dann wiederum zurückschicken müßt. Dies wird auch nochmal in der Mail genau erklärt.
Wenn ihr aber keine Antwortmail erhaltet, dann wird wohl etwas schief gelaufen sein. Am Besten kontaktiert ihr dann mich: <a id="inhalt9_red" href="mailto:mail@herrzeller.de">mail@herrzeller.de</a>.
In naher Zukunft werde ich Spieltermine nur noch über diese Mailingliste verabreden, deshalb bitte ich euch, euch zahlreich hier anzumelden.<br>Viel Spass damit!</div></td>
</tr>
<TR><TD height="30"></td></tr>
</table>
<hr>
<br>
<br>
<form method="post" enctype="multipart/form-data" action="formmailer.php">
<input type="hidden" name="require" value="email">
<input type="hidden" name="recipient" value="fcstirnband-subscribe@herrzeller.de">
<table align="center">
<tr>
<td align="left"><div id="inhalt9_white">ANMELDUNG</div></td>
</tr>
<TR><TD height="20"></td></tr>
<tr>
<td align="center"><div id="inhalt9_white">trage hier deine e-Mail-Adresse ein: </div></td><td><input type=text name="email"></td>
</tr>
<TR><TD height="10"></td></tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="anmelden"></td>
</tr>
</table>
<br><br><hr>
</form>
<br>
<form method="post" enctype="multipart/form-data" action="formmailer.php">
<input type="hidden" name="require" value="email">
<input type="hidden" name="recipient" value="fcstirnband-unsubscribe@herrzeller.de">
<table align="center">
<tr>
<td align="left"><div id="inhalt9_white">ABMELDUNG</div></td>
</tr>
<TR><TD height="20"></td></tr>
<tr>
<td align="center"><div id="inhalt9_white">trage hier deine e-Mail-Adresse ein: </div></td><td><input type=text name="email"></td>
</tr>
<TR><TD height="10"></td></tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="abmelden"></td>
</tr>
</table>
<br><br><hr>
</form>
</td>
</tr>
</table>
</body>
</html>
...
wie gesagt, auf einem anderen Server funktioniert das ganze fehlerfrei, deshalb seh ich die Chance selsbt eigentlich sehr gering, dass der Fehler bei mir liegt.
... Die Funktionalität besteht darin sich in eine Mailingliste eintragen zu können.
Gruss
Redflash
.....
Hier das php-Script:
/* ##############################################################################
# http://www.lumbroso.com/scripts/ ##############################################################################
############################################################################## */
// formmail version (for debugging mostly) $version = "4.1b";
// referers.. domains/ips that you will allow forms to // reside on. $referers = array ('tckirrberg.de','www.tckirrberg.de','http://www.tckirrberg.de','herrzeller.de','www.herrzeller.de','fcstirnband.herrzeller.de','www.fcstirnband.herrzeller.de','http://www.herrzeller.de','http://www.fcstirnband.herrzeller.de');
// banned emails, these will be email addresses of people // who are blocked from using the script (requested)
// our mighty error function.. function print_error($reason,$type = 0) { global $version; build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet); // for missing required data if ($type == "missing") { ?> Das Formular wurde aus den folgenden Gründen nicht übermittelt:<p> <ul><? echo $reason."\n"; ?></ul> Bitte benutze den "zurück"-Button deines Browsers um es nochmal zu versuchen!.<? } else { // every other error ?> Das Formular wurde aus den folgenden Gründen nicht übermittelt:<p> <? } echo "<br><br>\n"; echo "<small>This form is powered by <a href="http://www.lumbroso.com/scripts/">Jack's Formmail.php $version!</a></small>\n\n"; exit; }
// function to check the banlist // suggested by a whole lot of people.. Thanks function check_banlist($banlist, $email) { if (count($banlist)) { $allow = true; foreach($banlist as $banned) { $temp = explode("@", $banned); if ($temp[0] == "*") { $temp2 = explode("@", $email); if (trim(strtolower($temp2[1])) == trim(strtolower($temp[1]))) $allow = false; } else { if (trim(strtolower($email)) == trim(strtolower($banned))) $allow = false; } } } if (!$allow) { print_error("You are using from a <b>banned email address.</b>"); } }
// function to check the referer for security reasons. // contributed by some one who's name got lost.. Thanks // goes out to him any way. function check_referer($referers) { if (count($referers)) { $found = false; $temp = explode("/",getenv("HTTP_REFERER")); $referer = $temp[2]; for ($x=0; $x < count($referers); $x++) { if (eregi ($referers[$x], $referer)) { $found = true; } } if (!getenv("HTTP_REFERER")) $found = false; if (!$found){ print_error("You are coming from an <b>unauthorized domain.</b>"); error_log("[FormMail.php] Illegal Referer. (".getenv("HTTP_REFERER").")", 0); } return $found; } else { return true; // not a good idea, if empty, it will allow it. } } //if ($referers) entfernt // check_referer($referers);
if ($banlist) check_banlist($banlist, $email);
// parse the form and create the content string which we will send function parse_form($array) { // build reserved keyword array $reserved_keys[] = "MAX_FILE_SIZE"; $reserved_keys[] = "required"; $reserved_keys[] = "redirect"; $reserved_keys[] = "email"; $reserved_keys[] = "require"; $reserved_keys[] = "path_to_file"; $reserved_keys[] = "recipient"; $reserved_keys[] = "subject"; $reserved_keys[] = "bgcolor"; $reserved_keys[] = "text_color"; $reserved_keys[] = "link_color"; $reserved_keys[] = "vlink_color"; $reserved_keys[] = "alink_color"; $reserved_keys[] = "title"; $reserved_keys[] = "missing_fields_redirect"; $reserved_keys[] = "env_report"; if (count($array)) { while (list($key, $val) = each($array)) { // exclude reserved keywords $reserved_violation = 0; for ($ri=0; $ri<count($reserved_keys); $ri++) { if ($key == $reserved_keys[$ri]) { $reserved_violation = 1; } } // prepare content if ($reserved_violation != 1) { if (is_array($val)) { for ($z=0;$z<count($val);$z++) { $content .= "$key: $val[$z]\n"; } } else { $content .= "$key: $val\n"; } } } } return $content; }
// mail the content we figure out in the following steps function mail_it($content, $subject, $email, $recipient) { mail($recipient, $subject, $content, "From: $email\r\nReply-To: $email\r\nX-Mailer: DT_formmail"); }
// take in the body building arguments and build the body tag for page display function build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet) { if ($style_sheet) echo "<LINK rel=STYLESHEET href="$style_sheet" Type="text/css">\n"; if ($title) echo "<title>$title</title>\n"; if (!$bgcolor) $bgcolor = "#FFFFFF"; if (!$text_color) $text_color = "#000000"; if (!$link_color) $link_color = "#0000FF"; if (!$vlink_color) $vlink_color = "#FF0000"; if (!$alink_color) $alink_color = "#000088"; if ($background) $background = "background="$background""; echo "<body bgcolor="$bgcolor" text="$text_color" link="$link_color" vlink="$vlink_color" alink="$alink_color" $background>\n\n"; }
// check for a recipient email address and check the validity of it // Thanks to Bradley miller (bradmiller@accesszone.com) for pointing // out the need for multiple recipient checking and providing the code. $recipient_in = split(',',$recipient); for ($i=0;$i<count($recipient_in);$i++) { $recipient_to_test = trim($recipient_in[$i]); if (!eregi("[1]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$", $recipient_to_test)) { print_error("<b>I NEED VALID RECIPIENT EMAIL ADDRESS ($recipient_to_test) TO CONTINUE</b>"); } }
// This is because I originally had it require but too many people // were used to Matt's Formmail.pl which used required instead. if ($required) $require = $required; // handle the required fields if ($require) { // seperate at the commas $require = ereg_replace( " +", "", $require); $required = split(",",$require); for ($i=0;$i<count($required);$i++) { $string = trim($required[$i]); // check if they exsist if((!(${$string})) || (!(${$string}))) { // if the missing_fields_redirect option is on: redirect them if ($missing_fields_redirect) { header ("Location: $missing_fields_redirect"); exit; } $require; $missing_field_list .= "<b>Missing: $required[$i]</b><br>\n"; } } // send error to our mighty error function if ($missing_field_list) print_error($missing_field_list,"missing"); }
// check the email fields for validity if (($email) || ($EMAIL)) { $email = trim($email); if ($EMAIL) $email = trim($EMAIL); if (!eregi("[2]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$", $email)) { print_error("your <b>email address</b> is invalid"); } $EMAIL = $email; }
// check zipcodes for validity if (($ZIP_CODE) || ($zip_code)) { $zip_code = trim($zip_code); if ($ZIP_CODE) $zip_code = trim($ZIP_CODE); if (!ereg("([3]{5})-([0-9]{4}$)", trim($zip_code)) && (!ereg("[4][0-9][a-zA-Z][[:space:]][0-9][a-zA-Z][0-9]$", trim($zip_code))) && (!ereg("([5]{5})", trim($zip_code)))) { print_error("your <b>zip/postal code</b> is invalid"); } }
// check phone for validity if (($PHONE_NO) || ($phone_no)) { $phone_no = trim($phone_no); if ($PHONE_NO) $phone_no = trim($PHONE_NO); if (!ereg("(^(.)[0-9]{3})(.)([0-9]{3})(.*)([0-9]{4}$)", $phone_no)) { print_error("your <b>phone number</b> is invalid"); } }
// check phone for validity if (($FAX_NO) || ($fax_no)) { $fax_no = trim($fax_no); if ($FAX_NO) $fax_no = trim($FAX_NO); if (!ereg("(^(.)[0-9]{3})(.)([0-9]{3})(.*)([0-9]{4}$)", $fax_no)) { print_error("your <b>fax number</b> is invalid"); } }
// prepare the content $content = parse_form($HTTP_POST_VARS);
// check for a file if there is a file upload it if ($file_name) { if ($file_size > 0) { if (!ereg("/$", $path_to_file)) $path_to_file = $path_to_file."/"; $location = $path_to_file.$file_name; if (file_exists($path_to_file.$file_name)) $location .= ".new"; copy($file,$location); unlink($file); $content .= "Uploaded File: ".$location."\n"; } }
// second file. if ($file2_name) { if ($file_size > 0) { if (!ereg("/$", $path_to_file)) $path_to_file = $path_to_file."/"; $location = $path_to_file.$file2_name; if (file_exists($path_to_file.$file2_name)) $location .= ".new"; copy($file2,$location); unlink($file2); $content .= "Uploaded File: ".$location."\n"; } }
// if the env_report option is on: get eviromental variables if ($env_report) { $env_report = ereg_replace( " +", "", $env_report); $env_reports = split(",",$env_report); $content .= "\n------ eviromental variables ------\n"; for ($i=0;$i<count($env_reports);$i++) { $string = trim($env_reports[$i]); if ($env_reports[$i] == "REMOTE_HOST") $content .= "REMOTE HOST: ".$REMOTE_HOST."\n"; else if ($env_reports[$i] == "REMOTE_USER") $content .= "REMOTE USER: ". $REMOTE_USER."\n"; else if ($env_reports[$i] == "REMOTE_ADDR") $content .= "REMOTE ADDR: ". $REMOTE_ADDR."\n"; else if ($env_reports[$i] == "HTTP_USER_AGENT") $content .= "BROWSER: ". $HTTP_USER_AGENT."\n"; } }
// if the subject option is not set: set the default if (!$subject) $subject = "Form submission";
// send it off mail_it(stripslashes($content), stripslashes($subject), $email, $recipient);
// if the redirect option is set: redirect them if ($redirect) { header ("Location: $redirect"); exit; } else { print "Danke für deinen Eintrag\n"; echo "<br><br>\n"; echo "<small>This form is powered by <a href="http://www.lumbroso.com/scripts/">Jack's Formmail.php $version!</a></small>\n\n"; exit; }
// <---------- THE END ----------> //
Hallo,
[...]
Hmmm - sieht auch in Ordnung aus. Probier mal folgendes: ersetzte mal formmailer.php durch folgende Datei:
<?php
echo "<pre>\n";
var_dump ($HTTP_POST_VARS);
echo "</pre>\n";
?>
Dann siehst Du, welche Daten beim Script ankommen ...
Grüße,
Christian
Also hab mal nachgeschaut
Bei dieser Abfrage nach den Sachen die reinkommen, hab ich
"array(0) zurückbekommen.
Das sollte wohl soviel heißen wie nix!
Hab jetzt auf beiden Servern das phpinfo hochgeladen.
http://www.tckirrberg.de/formmailer/phpinfo.php ... hier funktionierts nicht
http://www.herrzeller.de/phpinfo.php ... hier funktioniert das Skript
Das einzige was mir daran Spontan an Unterschieden aufgefallen ist, ist die Tatsache, dass auf dem Server wo es nicht funktioniert die PHP-Version höher ist als auf dem anderen.
Gut da sind natürlich noch andere Unterschiede, aber des sagt mir alles nix.
Gruß
Redflash
Hallo,
Also hab mal nachgeschaut
Bei dieser Abfrage nach den Sachen die reinkommen, hab ich
"array(0) zurückbekommen.
Das sollte wohl soviel heißen wie nix!
Genau, das heißt "Nix, nada, null, gar nix" -- das Script bekommt keine Daten. Probier's mal, indem Du statt $HTTP_POST_VARS (in der Mini-Test-Datei) $_POST verwendest.
Hab jetzt auf beiden Servern das phpinfo hochgeladen.
http://www.tckirrberg.de/formmailer/phpinfo.php ... hier funktionierts nicht
http://www.herrzeller.de/phpinfo.php ... hier funktioniert das Skript
Hmmm - die typischen Kandidaten register_globals und variables_order sind's nicht ...
Das einzige was mir daran Spontan an Unterschieden aufgefallen ist, ist die Tatsache, dass auf dem Server wo es nicht funktioniert die PHP-Version höher ist als auf dem anderen.
Du meinst wohl umgekehrt (bei "hier funktionierts nicht" ist die PHP-Version 4.1.2, bei "hier funktionierts" ist sie 4.2.1).
Vielleicht sind auf dem Server, wo es nicht läuft, POST-Requests abgeschaltet. Es gab mal eine PHP-Sicherheitslücke bei der Behandlung von POST-Daten und der einzige Workaround außer einem Upgrade war die Deaktivierung von POST auf dem ganzen Server ...
Ich empfehle sowieso, auf 4.2.3 aufzurüsten, da da alle in letzter Zeit bekannten Sicherheitslücken geschlossen sind.
Grüße,
Christian
Hallo,
...
die HTML-File ist zwar nicht die sauberste, aber in der Richtunng scheint alles in Ordnung zu sein. Inhalt von formmailer.php? Einstellungen der INI-Datei (register_globals, variables_order - kann man mit phpinfo() herausbekommen)?
Grüße,
Christian