Subrosa: Felder eintragen.

Tag,
Ich lerne grade in der Schule PHP und wollte etwas praktisches Training. Darum bastel ich grade eine Homepage. Nun wollte ich folgenden Formmailer einbauen. Ich verstehe den Code. Nur eine Sache macht mir Probleme.

<?php  
$strEmpfaenger = 'thomasweiss_bw@yahoo.de';  
$strFrom       = '"Kontakt" <Feedback@Homepage.de>';  
$strSubject    = 'Feedback';  
$strReturnhtml = 'http://thomasweiss_bw.th.ohost.de/homepage/';  
$strDelimiter  = ":\t";  
  
if($_POST)  
{  
 $strMailtext = "";  
  
 while(list($strName,$value) = each($_POST))  
 {  
  if(is_array($value))  
  {  
   foreach($value as $value_array)  
   {  
    $strMailtext .= $strName.$strDelimiter.$value_array."\n";  
   }  
  }  
  else  
  {  
   $strMailtext .= $strName.$strDelimiter.$value."\n";  
  }  
 }  
  
 if(get_magic_quotes_gpc())  
 {  
  $strMailtext = stripslashes($strMailtext);  
 }  
  
 mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)  
  or die("Die Mail konnte nicht versendet werden.");  
 header("Location: $strReturnhtml");  
 exit;  
}  
  
?>  

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">  
    <head>  
        <title>Einfacher PHP-Formmailer</title>  
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />  
    </head>  
    <body>  
        <h1>Beispielformular</h1>  
        <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">  
            <!-- Hier die eigentlichen Formularfelder eintragen. Die folgenden sind Beispielangaben. -->  
            <dl>  
                <dt>Ihr Name:</dt>  
                <dd><input type="text" name="Versender" /></dd>  
                <dt>Ihre E-Mail:</dt>  
                <dd><input type="text" name="E-Mail" /></dd>  
                <dt>Sie k&ouml;nnen:</dt>  
                <dd><input type="checkbox" name="kannwas[]" value="HTML" />HTML <input type="checkbox" name="kannwas[]" value="PHP" />PHP</dd>  
                <dt>Sie sind:</dt>  
                <dd><input type="radio" name="sexus" value="M" />Mann <input type="radio" name="sexus" value="Frau" />Frau</dd>  
                <dt>Sie m&ouml;gen:</dt>  
                <dd><select name="Browser"><option value="Opera">Opera</option><option value="Mozilla">Mozilla</option></select></dd>  
                <dt>Bemerkungen:</dt>  
                <dd><textarea name="Bemerkungen" rows="3" cols="20">Bemerkungen</textarea></dd>  
            </dl>  
            <!-- Ende der Beispielangaben -->  
            <p>  
            <input type="submit" value="Senden" />  
            <input type="reset" value="Zurücksetzen" />  
            </p>  
        </form>  
    </body>  
</html>  

Wo trage ich jetzt die Felder in den PHP Code ein? Und vor allem wie? (Fotmatierung?)

  1. Hallo

    Ich lerne grade in der Schule PHP und wollte etwas praktisches Training. Darum bastel ich grade eine Homepage. Nun wollte ich folgenden Formmailer einbauen. Ich verstehe den Code. Nur eine Sache macht mir Probleme.

    Wo trage ich jetzt die Felder in den PHP Code ein? Und vor allem wie? (Fotmatierung?)

    Na hier:

    <?php

    // Wenn Daten per POST übermittelt wurden
    if($_POST)
    {
    // Lege den Emailtext als leeren String an
    $strMailtext = "";
    // Splitte jeden POST-Wert in Name ($strName) und Wert ($value) auf
    while(list($strName,$value) = each($_POST))
    {
      // Falls der Wert ein Array ist (z.B. Checkboxen)
      if(is_array($value))
      {
       // gehe das Array Element für Element durch
       foreach($value as $value_array)
       {
        // trage jeden Wert jedes Arrayelements in den Emailtext ein
        $strMailtext .= $strName.$strDelimiter.$value_array."\n";
       }
      }
      // Der Wert ist kein Array, es wird ein String angenommen
      else
      {
       // trage den String in den Emailtext ein
       $strMailtext .= $strName.$strDelimiter.$value."\n";
      }
    }
    // Entferne eventuell bei der Datenübergabe eingefügte Backslashes
    if(get_magic_quotes_gpc())
    {
      $strMailtext = stripslashes($strMailtext);
    }
    // versende die Email
    mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)
      or die("Die Mail konnte nicht versendet werden.");
    header("Location: $strReturnhtml");
    exit;
    }

    ?>

      
    Tschö, Auge  
    
    -- 
    Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.  
    Terry Pratchett, "Wachen! Wachen!"  
      
    [Veranstaltungsdatenbank Vdb 0.3](http://termindbase.auge8472.de/)
    
    1. Danke schonmal. :)

      Aber wenn ich das Gebilde so wie es oben steht in die html packe und auf den Server lad kommt keine Mail an...

      Woran kann das liegen? Mail Adresse stimmt.

      1. Hallo,

        ohne deinen Code auf Fehler überprüft zu haben:

        Versuche es mal mit einer anderen Mail Adresse oder such mal im Junk Mail Ordner.

        Ich nutze die Klasse PHPMailer und da die Sendmail MEthode, weil ich über mail() extreme Probleme hatte. Mail sind entweder nicht angekommen oder sind im Spam Ornder gelandet - und das bei vielen Adressen...

      2. Mahlzeit Subrosa,

        Aber wenn ich das Gebilde so wie es oben steht in die html packe und auf den Server lad kommt keine Mail an...

        Woran kann das liegen? Mail Adresse stimmt.

        An gefühlten 1.000.000 Ursachen - schaue dazu in den entsprechenden Log-Dateien (Webserver, PHP, Mailserver usw.) des Servers nach, stelle ggf. den Log-Level genügend hoch.

        Ansonsten ist das von Alex angesprochene Problem ein sehr häufiges: Freemail-Anbieter (in Deinem Fall Yahoo!) nehmen häufig E-Mails, die nicht über authentifizierte Mailserver eingeworfen werden, gar nicht erst an oder lassen sie in irgendwelchen Spam-Ordnern versickern ...

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  2. Mahlzeit Subrosa,

    Wo trage ich jetzt die Felder in den PHP Code ein? Und vor allem wie? (Fotmatierung?)

    Welche Felder meinst Du? Die, die Du in Deinem HTML-Code definiert hast? Also Deine Textfelder, Checkboxen, Radiobuttons und die Auswahlliste? Und was meinst Du mit "eintragen"?

    Die Namen und Inhalte aller Formularelemente, die Dein Browser per POST an den Server zurücksendet, findest Du im superglobalen Array $_POST. Dieses wird an dieser Stelle

    if($_POST)
    {
    $strMailtext = "";

    while(list($strName,$value) = each($_POST))

    überprüft und jedes darin enthaltene Element (also jeder Wert jedes Formularelements des abgeschickten Formulars) nacheinander verarbeitet.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  3. 'ǝɯɐu$ ıɥ

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
        <head>
            <title>Einfacher PHP-Formmailer</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        </head>
        <body>
            <h1>Beispielformular</h1>
            <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">
                <!-- Hier die eigentlichen Formularfelder eintragen. Die folgenden sind Beispielangaben. -->
                <dl>
                    <dt>Ihr Name:</dt>
                    <dd><input type="text" name="Versender" /></dd>
                    <dt>Ihre E-Mail:</dt>
                    <dd><input type="text" name="E-Mail" /></dd>
                    <dt>Sie k&ouml;nnen:</dt>
                    <dd><input type="checkbox" name="kannwas[]" value="HTML" />HTML <input type="checkbox" name="kannwas[]" value="PHP" />PHP</dd>
                    <dt>Sie sind:</dt>
                    <dd><input type="radio" name="sexus" value="M" />Mann <input type="radio" name="sexus" value="Frau" />Frau</dd>
                    <dt>Sie m&ouml;gen:</dt>
                    <dd><select name="Browser"><option value="Opera">Opera</option><option value="Mozilla">Mozilla</option></select></dd>
                    <dt>Bemerkungen:</dt>
                    <dd><textarea name="Bemerkungen" rows="3" cols="20">Bemerkungen</textarea></dd>
                </dl>
                <!-- Ende der Beispielangaben -->
                <p>
                <input type="submit" value="Senden" />
                <input type="reset" value="Zurücksetzen" />
                </p>
            </form>
        </body>
    </html>

    
    >   
    > Wo trage ich jetzt die Felder in den PHP Code ein? Und vor allem wie? (Fotmatierung?)  
      
    Na da wo steht: `<!-- Hier die eigentlichen Formularfelder eintragen. Die folgenden sind Beispielangaben. -->`{:.language-html}  
    Was zwischen <form> und </form> steht ist das Formular. Wenn du das ganze im Browser aufrufst wird es angezeigt, das hat mit PHP nichts zu tun, das ist HTML.  
      
      
    ssnɹƃ  
    ʍopɐɥs
    
    -- 
    I like children. If they're properly cooked.  
      
    - W.C. Fields