mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Do 18.04.2024 06:08 Benutzername: Passwort: Auto-Login

Thema: FORMMAILER - Wo ist hier der Fehler? vom 30.04.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> FORMMAILER - Wo ist hier der Fehler?
Autor Nachricht
72dpi
Threadersteller

Dabei seit: 27.12.2006
Ort: -
Alter: 43
Geschlecht: Männlich
Verfasst Mo 30.04.2007 14:53
Titel

FORMMAILER - Wo ist hier der Fehler?

Antworten mit Zitat Zum Seitenanfang

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&uuml;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
  View user's profile Private Nachricht senden
Jan Petersen

Dabei seit: 25.04.2007
Ort: Hamburg
Alter: -
Geschlecht: Männlich
Verfasst Mi 02.05.2007 12:18
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden
Anzeige
Anzeige
72dpi
Threadersteller

Dabei seit: 27.12.2006
Ort: -
Alter: 43
Geschlecht: Männlich
Verfasst Mi 02.05.2007 13:58
Titel

@Jan Petersen

Antworten mit Zitat Zum Seitenanfang

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?
  View user's profile Private Nachricht senden
Kraat

Dabei seit: 05.10.2006
Ort: Köln
Alter: 42
Geschlecht: Männlich
Verfasst Mi 02.05.2007 14:29
Titel

Antworten mit Zitat Zum Seitenanfang

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 *zwinker*

Also so dann *zwinker*

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&uuml;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
  View user's profile Private Nachricht senden
72dpi
Threadersteller

Dabei seit: 27.12.2006
Ort: -
Alter: 43
Geschlecht: Männlich
Verfasst Mi 02.05.2007 14:47
Titel

@kraat

Antworten mit Zitat Zum Seitenanfang

Okay, das flushen hat funktioniert! *Thumbs up!*

Irgendwie logisch, danke euch! * Ich bin unwürdig *

lg, 72dpi
  View user's profile Private Nachricht senden
Kraat

Dabei seit: 05.10.2006
Ort: Köln
Alter: 42
Geschlecht: Männlich
Verfasst Mi 02.05.2007 16:35
Titel

Antworten mit Zitat Zum Seitenanfang

Gern geschehen
  View user's profile Private Nachricht senden
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Do 03.05.2007 00:54
Titel

Antworten mit Zitat Zum Seitenanfang

$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.
  View user's profile Private Nachricht senden
 
Ähnliche Themen PHP: Formmailer. Wo ist der Fehler?
php formmailer
Formmailer
Umgekehrter Formmailer
Problem mit Formmailer
[PHP] FormMailer Problem!
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.