totaler PHP-Newbie: totaler PHP-Newbie braucht Hilfe. Formailer (mail()-Funktion) ?

Hallo PHP-Gemeinde,

ich bin seit kurzer Zeit dabei PHP selber zu erlernen.
Um es besser verstehen zu können versuche ich, wenn es möglich ist, an praktischen Beispielen bestimmte Funktionen nachzuvollziehen.

Nun habe ich einen ganz einfachen Formmailer anhand der mail()-Funktion, ohne jegliche Sicherheitsabfragen (z.B. ob die eingegebene E-Mailadresse richtig ist, ob das Formular aus gefüllt ist, ...), zu Versuchzwecken gebastelt.
Leider gelingt das versenden einer solchen E-Mail nur teilweise, da ich nur die definierten Daten:

$Empfaenger = 'E-Mailadresse des Empfängers';
$Subjec t= 'Post von ihrer Webseite';
$Mail_Inhalt = 'Sie haben folgende E-Mail erhalten...';

als Text-email erhalte aber nicht die im Formular ein gegebenen Daten. Um es besser nach zu vollziehen zu können habe ich mal den Quelltext der Datei hier rein kopiert:

  
<?php  
$Empfaenger = 'E-Mailadresse des Empfängers';  
$Subject= 'Post von ihrer Webseite';  
$Mail_Inhalt = 'Sie haben folgende E-Mail erhalten...';  
mail($Empfaenger, $Subject, $Mail_Inhalt);  
?>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
        "http://www.w3.org/TR/html4loose.dtd">  
<html>  
<head>  
<title>Formular-Mailer</title>  
</head>  
<body text="#000000" bgcolor="#FFFFFF">  
<form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post" accept-charset="ISO-8859-1">  
<table border="0" cellpadding="0" cellspacing="4">  
  <tr>  
   <td align="right">Name:</td>  
   <td><input name="name" type="text" size="30" maxlength="30"></td>  
  </tr>  
  <tr>  
   <td align="right">E-Mail:</td>  
   <td><input name="email" type="text" size="30" maxlength="40"></td>  
  </tr>  
  <tr>  
   <td align="right">Nachricht:</td>  
   <td><textarea name="nachricht" cols="50" rows="10"></textarea></td>  
  </tr>  
</table>  
</form>  
<input type="submit" value="Senden" />  
</body>  
</html>  

Das Problem ist das, wenn jemand die Formularfelder (Name, E-Mail, Nachricht)ausfüllt und abschickt bekomme ich zwar eine E-Mail aber leider ohne die von ihm ausgefüllten Felder.
Könnt ihr mir helfen und posten was der Fehler dabei ist? Mein Webspace wo ich dieses Formular, zu Probierzwecken, hoch geladen unterstützt PHP und auch die mail()-Funktion.

Vielen Dank für eure Hilfe

Gruß totaler PHP-Newbie

  1. Das Problem ist das, wenn jemand die Formularfelder (Name, E-Mail, Nachricht)ausfüllt und abschickt bekomme ich zwar eine E-Mail aber leider ohne die von ihm ausgefüllten Felder.

    Ja, denn aus Spaß an der freude befüllt sich die Variable $Mail_Inhalt nicht mit den Werten, die das Script per POST übergeben bekommt.

    Ein einfaches print_r($_POST) an einer beliebigen Stelle im PHP-Teil deines Codes wäre mal ein Anfang - selbstredend nur zu Debug-Zwecken.

    Dir scheinen hierbei fundamentales Wissen zu fehlen - besonders wenn es darum geht, was im Hintergrund passiert.

    Könnt ihr mir helfen und posten was der Fehler dabei ist?

    Wenn du versprichst, dass du das Formular erst produktiv einsetzt, wenn es fertig und sicher ist - in der aktuellen Form ist es eine Spamschleuder die an eine ungültige E-Mail-Adresse sendet und keinen großen Schaden anrichten kann.

    Wenn du ohne Erfahrung einen Formmailer baust, kann das aber schnell böse enden.

    Selfhtml hat übrigens einen Artikel dazu.
    http://aktuell.de.selfhtml.org/artikel/php/form-mail/

  2. Hallo,

    ich bin seit kurzer Zeit dabei PHP selber zu erlernen.

    dann gewöhn dir bitte von Anfang an eine Sache an: Auch wenn's nur zum Probieren ist, nie den Sicherheits- oder Missbrauchs-Aspekt außer Acht lassen.

    Um es besser verstehen zu können versuche ich, wenn es möglich ist, an praktischen Beispielen bestimmte Funktionen nachzuvollziehen.

    Das ist als Teil der Lernstrategie in Ordnung; das Nachvollziehen und Ausprobieren von Beispielen sollte aber immer auch ergänzt werden durch Nachlesen in einschlägigen Quellen (z.B. dem PHP-Manual oder einem guten Online-Tutorial). Oder durch Diskussion des Versuchs in einem Fachforum. :-)

    Nun habe ich einen ganz einfachen Formmailer anhand der mail()-Funktion, ohne jegliche Sicherheitsabfragen (z.B. ob die eingegebene E-Mailadresse richtig ist, ob das Formular aus gefüllt ist, ...), zu Versuchzwecken gebastelt.

    Oh-oh.

    Leider gelingt das versenden einer solchen E-Mail nur teilweise, da ich nur die definierten Daten:

    $Empfaenger = 'E-Mailadresse des Empfängers';
    $Subjec t= 'Post von ihrer Webseite';
    $Mail_Inhalt = 'Sie haben folgende E-Mail erhalten...';

    als Text-email erhalte aber nicht die im Formular ein gegebenen Daten.

    Klar, du schreibst die Formulardaten ja auch nirgends in den Mailtext hinein.

    <?php

    $Empfaenger = 'E-Mailadresse des Empfängers';
    $Subject= 'Post von ihrer Webseite';
    $Mail_Inhalt = 'Sie haben folgende E-Mail erhalten...';
    mail($Empfaenger, $Subject, $Mail_Inhalt);
    ?>

      
    Bis hierher stellt dein Code ein in sich abgeschlossenes PHP-Script dar, das sofort beim Aufruf eine Mailnachricht mit fest vorgegebenem Betreff und Text an einen fest vorgegebenen Empfänger schickt.  
      
    Wäre es nicht irgendwie schlauer, die Nachricht erst zu verschicken, wenn das ausgefüllte Formular abgesendet wurde? Und dann auch die Formulareingaben in den Mailtext zu schreiben?  
      
    
    > <body text="#000000" bgcolor="#FFFFFF">  
      
    Unabhängig von PHP: Du solltest dich zugunsten von CSS von den altertümlichen HTML-Attributen zur Darstellung trennen.  
      
    
    > ~~~html
    
    <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post" accept-charset="ISO-8859-1">  
    
    > [...]  
    > </form>  
    > <input type="submit" value="Senden" />
    
    

    Das geht natürlich nicht: Der Submit-Button muss innerhalb des Formulars stehen, sonst bewirkt er nichts. Außerdem hast du im DOCTYPE angegeben, dass du HTML 4.01 verwendest - warum dann hier plötzlich die XHTML-Notation?

    Das Problem ist das, wenn jemand die Formularfelder (Name, E-Mail, Nachricht)ausfüllt und abschickt ...

    Er kann sie gar nicht abschicken, weil der Submit-Button funktionslos ist. Der Mailversand erfolgt bei deinem Entwurf auch nicht beim vermeintlichen Absenden, sondern schon beim Aufruf des leeren Formulars.

    Könnt ihr mir helfen und posten was der Fehler dabei ist?

    Ein kapitaler Denkfehler. Du machst dir keine Vorstellung, in welcher Reihenfolge hier welche Schritte ablaufen müssen. Werde dir darüber bitte erstmal klar.

    So long,
     Martin

    --
    why the heck do you jerk think, that wir ein doppelposting nicht bemerken, wenn you zwischendurch the sprache wechselst?
      (wahsaga)
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  3. Hi,

    Das Problem ist das, wenn jemand die Formularfelder (Name, E-Mail, Nachricht)ausfüllt und abschickt bekomme ich zwar eine E-Mail aber leider ohne die von ihm ausgefüllten Felder.

    Lies den Satz bitte noch mal durch.

    Wieso wunderst du dich, dass du keine Daten erhältst - wenn gar keine angegeben wurden?

    Könnt ihr mir helfen und posten was der Fehler dabei ist?

    Der Fehler ist, dass du die Mail in jedem Fall versendest - ohne vorher zu prüfen, ob auch alle erforderlichen Werte vorliegen.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?