Autor |
Nachricht |
72dpi
Threadersteller
Dabei seit: 27.12.2006
Ort: -
Alter: 43
Geschlecht:
|
Verfasst Mo 30.04.2007 14:53
Titel FORMMAILER - Wo ist hier der Fehler? |
|
|
Hallo!
Bin Newbie was PHP angeht! Es geht um einen einfachen Frommailer. Im Grunde funktioniert es, doch die Nachricht, die der User auf der Website im Formular eingibt (Formularfeldname=nachricht) wird in der E-Mail die ich erhalte zweimal angezeigt!
Im Grunde ist alles schön formatiert, doch ganz am Anfang der E-Mail steht, genauso wie weiter unten, ebenfalls die nachricht, die dort jedoch NICHT angezeigt werden soll! Ich hoffe ihr versteht was ich meine - warum wird die nachricht zweimal ausgegeben? Wo steht das in diesem Code?
Code: | <?php
if($senden) {
// Wenn eines der Felder leer ist, gebe Fehlermeldung aus
if(empty($_POST['name']) || empty($_POST['email']) || empty($_POST['betreff']) || empty($_POST['nachricht']))
{
echo "Bitte füllen Sie alle Felder aus!";
} else {
// Ansonsten: Für jedes Eingabefeld eine Zeile wie folgt erzeugen --> Feldname: Eingabe
while(list($feld,$wert)=each($HTTP_POST_VARS)) {
if($feld!="senden") {
$nachricht.=ucfirst($feld).": $wert\n";
}
}
// Zusatzdaten hinzufügen
$nachricht.="\nDatum/Zeit: ";
$nachricht.=date("d.m.Y H:i:s");
$betreff="Kontaktformular-Nachricht von: ";
$betreff.=$HTTP_POST_VARS['name'];
// Mail versenden
mail("anmich@gmx.de", $betreff, $nachricht, "From: ".$_POST['email']);
echo "Vielen Dank! Ihre Nachricht wurde erfolgreich versandt.";
}
} else {
echo "ERROR! Ein Fehler ist aufgetreten.";
}
?> |
Edith by maily:
Hab den Code mal in Klammern gebracht.
Zuletzt bearbeitet von airball am Di 01.05.2007 08:05, insgesamt 1-mal bearbeitet
|
|
|
|
|
Jan Petersen
Dabei seit: 25.04.2007
Ort: Hamburg
Alter: -
Geschlecht:
|
Verfasst Mi 02.05.2007 12:18
Titel
|
|
|
Wie schaut die abgeschickte Mail aus? Bitte mal quoten. Ich versteh das Problem nämlich nicht ganz.
Evtl. liegt der Fehler im "while(list($feld,$wert)=each($HTTP_POST_VARS))", das würd ich mal umbauen und schauen, ob der Fehler dann noch auftaucht.
Also z.B. Code: |
$keys = array_keys($_POST);
foreach ($keys as $next_key) {
$nachricht.=ucfirst($next_key).": ".stripslashes($_POST[$next_key])."\n";
}
|
Das "stripslashes" sorgt dafür, dass eingegebene Sonderzeichen wie " (Anführungszeichen) nicht mit Escape-Zeichen ausgegeben werden. Sonst steht in der Mail: "Hallo, ich wollte wissen ob \"PHP\" eine tolle Sache ist."
Und anstatt unten die Mail zu verschicken mit "mail(...);" würde ich zum Debuggen mal ein "echo $nachricht;" einbauen und schauen, was im String steht.
Und noch ein kleiner Tipp: Zum Verschicken der Mails würde ich immer den PHPMailer benutzen. Link: http://phpmailer.sourceforge.net/
Mit dem PHPMailer verschickst du die Mail dann wie folgt:
Code: |
include("inc.phpmailer.php");
$myMail = new PHPMailer();
$myMail->Subject = $betreff;
$myMail->From = "vonmir@irgendwo.de";
$myMail->FromName = 'Mein Name';
$myMail->Body = $nachricht;
$myMail->AddAddress("anmich@irgendwo.de","");
$myMail->Send();
|
Zuletzt bearbeitet von Jan Petersen am Mi 02.05.2007 12:23, insgesamt 1-mal bearbeitet
|
|
|
|
|
Anzeige
|
|
|
72dpi
Threadersteller
Dabei seit: 27.12.2006
Ort: -
Alter: 43
Geschlecht:
|
Verfasst Mi 02.05.2007 13:58
Titel @Jan Petersen |
|
|
Hallo!
Erstmal danke für deine Antwort!
Eine Testnachricht über mein Formular kommt wie folgt an:
---
hallo, ich bin der herr max mustermannName: max mustermann
Email: max_mustermann@gmx.de
Betreff: hallo
Nachricht: hallo, ich bin der herr max mustermann
Datum/Zeit: 02.05.2007 13:52:06
---
Wie du siehst steht die Nachricht, die im Formularfeld "nachricht" eingegeben wird ganz am Anfang der Mail. Die Frage ist ... wo im Code steht, dass er den Text ganz am Anfang der E-Mail ausgeben soll??? Dass der Text weiter unten ausgegeben wird ist klar, so solls ja auch sein. Aber so steht die Nachricht ja zweimal drin! Alles klar?
|
|
|
|
|
Kraat
Dabei seit: 05.10.2006
Ort: Köln
Alter: 42
Geschlecht:
|
Verfasst Mi 02.05.2007 14:29
Titel
|
|
|
Versuchs doch erst mal damit die Variable $nachricht zu flushen, indem Du bevor das erste mal "$nachricht.=" gefüllt wird, ganz am anfang nur mal $nachricht = ""; schreibst.
Damit sind meistens die Probs schon behoben
Also so dann
Code: | <?php
if($senden) {
// Wenn eines der Felder leer ist, gebe Fehlermeldung aus
if(empty($_POST['name']) || empty($_POST['email']) || empty($_POST['betreff']) || empty($_POST['nachricht']))
{
echo "Bitte füllen Sie alle Felder aus!";
} else {
// Flush Var $nachricht.
$nachricht = "";
// Ansonsten: Für jedes Eingabefeld eine Zeile wie folgt erzeugen --> Feldname: Eingabe
while(list($feld,$wert)=each($HTTP_POST_VARS)) {
if($feld!="senden") {
$nachricht.=ucfirst($feld).": $wert\n";
}
}
// Zusatzdaten hinzufügen
$nachricht.="\nDatum/Zeit: ";
$nachricht.=date("d.m.Y H:i:s");
$betreff="Kontaktformular-Nachricht von: ";
$betreff.=$HTTP_POST_VARS['name'];
// Mail versenden
mail("anmich@gmx.de", $betreff, $nachricht, "From: ".$_POST['email']);
echo "Vielen Dank! Ihre Nachricht wurde erfolgreich versandt.";
}
} else {
echo "ERROR! Ein Fehler ist aufgetreten.";
}
?> |
Zuletzt bearbeitet von Kraat am Mi 02.05.2007 14:31, insgesamt 1-mal bearbeitet
|
|
|
|
|
72dpi
Threadersteller
Dabei seit: 27.12.2006
Ort: -
Alter: 43
Geschlecht:
|
Verfasst Mi 02.05.2007 14:47
Titel @kraat |
|
|
Okay, das flushen hat funktioniert!
Irgendwie logisch, danke euch!
lg, 72dpi
|
|
|
|
|
Kraat
Dabei seit: 05.10.2006
Ort: Köln
Alter: 42
Geschlecht:
|
Verfasst Mi 02.05.2007 16:35
Titel
|
|
|
Gern geschehen
|
|
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst Do 03.05.2007 00:54
Titel
|
|
|
$HTTP_POST_VARS ist veraltet und fliegt aus der nächsten PHP-Version endgültig raus.
Momentan funktioniert das außerdem nur noch, weil dein Hoster eine Einstellung in der php.ini vorgenommen hat, damit diese alten Arrays aus Gründen der Rückwärstkompatibilität noch nutzbar sind.
Nutze $_POST statt $HTTP_POST_VARS.
Der Funktion mail() sollten noch ein paar zusätzliche Header übergeben werden.
Du solltest zumindest die Textkodierung angeben, damit Sonderzeichen/Umlaute auch in jedem Fall korrekt dargestellt werden.
|
|
|
|
|
|
|
|
Ähnliche Themen |
PHP: Formmailer. Wo ist der Fehler?
php formmailer
Formmailer
Umgekehrter Formmailer
Problem mit Formmailer
[PHP] FormMailer Problem!
|
|