Vinzenz Mai: Formmailer Attachment

Beitrag lesen

Hallo,

Das hier *ist* ganz genau dieser von Dir verlinkte einfache PHP-Formmailer.

fast! Wenn Du genau hinschaust, dann fehlt im OP der Teil mit der magic-quotes-Geschichte. Mag sein, dass der gepostete Code eine veraltete Version

nicht veraltet, die aktuelle Version.

des im verlinkten Artikel beschriebenen Formmailers ist (die Variablennamen deuten darauf hin, auch diverses am Code-Layout), jedoch nicht das vermurkste Markup im HTML-Teil.

Ach Gott, so schrecklich ist der HTML-Teil doch gar nicht. Kann man alles mit CSS regeln. Definitionslisten für Formulare sind Murks. Ich persönlich bevorzuge in der Regel Tabellen zur Formulargestaltung, weil es sich bei Formularinhalten fast immer um tabellarische Daten handelt, siehe Archiv. Den Missbrauch von Listen für solche Zwecke halte ich für Murks ;-)

Ich habe den PHP-Code aus dem Artikel kopiert, den Code aus dem OP füge ich Zeile für Zeile mit // auskommentiert ein. Damit man leichter vergleichen kann, habe ich den Originalcode um drei Leerzeichen eingerückt. Es ist leicht zu sehen, dass es sich - bis auf eine (im Grunde belanglose) Modifikation - um den Originalcode aus dem Artikel in dessen Originalformatierung handelt.

   <?php  
// <?php  
  
   ### Konfiguration ###  
  
   # Bitte passen Sie die folgenden Werte an, bevor Sie das Script benutzen!  
  
   # An welche Adresse sollen die Mails gesendet werden?  
   $strEmpfaenger = 'IhrName@provider.xy';  
// $strEmpfaenger = 'test@testmail.de';  
  
   # Welche Adresse soll als Absender angegeben werden?  
   # (Manche Hoster lassen diese Angabe vor dem Versenden der Mail ueberschreiben)  
   $strFrom       = '"Formmailer" <IhrAndererName@provider.xy>';  
// $strFrom       = '"Absendername" <Absendermail>';  
  
   # Welchen Betreff sollen die Mails erhalten?  
   $strSubject    = 'Feedback';  
// $strSubject    = 'Upload';  
  
   # Zu welcher Seite soll als "Danke-Seite" weitergeleitet werden?  
   # Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben!  
   $strReturnhtml = 'http://www.provider.xy/IhrName/IhreSeite.htm';  
// $strReturnhtml = 'http://www.meine-seite.de';  
  
   # Welche(s) Zeichen soll(en) zwischen dem Feldnamen und dem angegebenen Wert stehen?  
   $strDelimiter  = ":\t";  
// $strDelimiter  = ": ";  
  
   ### Ende Konfiguration ###  
// ### Ende Konfiguration ###  
  
   if($_POST)  
// if($_POST)  
   {  
// {  
//    if($_POST['name'] && $_POST['mail'] && $_POST['nachricht'] && $_POST['anhang'])  
// {  
  
    $strMailtext = "";  
//  $strMailtext = "";  
  
    while(list($strName,$value) = each($_POST))  
//  while(list($strName,$value) = each($_POST))  
    {  
//  {  
     if(is_array($value))  
//   if(is_array($value))  
     {  
//   {  
      foreach($value as $value_array)  
//    foreach($value as $value_array)  
      {  
//    {  
       $strMailtext .= $strName.$strDelimiter.$value_array."\n";  
//     $strMailtext .= $strName.$strDelimiter.$value_array."\n";  
      }  
//    }  
     }  
//   }  
     else  
//   else  
     {  
//   {  
      $strMailtext .= $strName.$strDelimiter.$value."\n";  
//    $strMailtext .= $strName.$strDelimiter.$value."\n";  
     }  
//   }  
    }  
//  }  
// }  
//  else die('Es wurden nicht alle Felder ausgefuellt. Bitte ueber die Browsernavigation zurueck.');  
  
  
    if(get_magic_quotes_gpc())  
//  if(get_magic_quotes_gpc())  
    {  
//  {  
     $strMailtext = stripslashes($strMailtext);  
//   $strMailtext = stripslashes($strMailtext);  
    }  
//  }  
  
    mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)  
     or die("Die Mail konnte nicht versendet werden.");  
//  mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)  
//   or die("Die Mail konnte nicht versendet werden.");  
    header("Location: $strReturnhtml");  
//  header("Location: $strReturnhtml");  
    exit;  
//  exit;  
   }  
// }  
  
   ?>  
// ?>  

Der PHP-Code ist bis auf eine zusätzliche Überprüfung der Formularfelder identisch. Die Überprüfung ist nicht besonders und die Reaktion eine Zumutung. Aber es *ist* der Code des Formmailers.

Der HTML-Teil ist aufs Formular gekürzt, enthält jedoch identisches PHP und enthält halt keine Definitionsliste (die ich selbst ebenfalls *nicht* verwendete), dafür Verstöße gegen das DRY-Prinzip.

<!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">  

Und so sieht es im OP aus:

        <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post"> -->  

[...] Formularfelder gekürzt

            <!-- 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>  

Wenn ich Deine harsche Kritik an der Programmstruktur im OP in Erinnerung rufe,

Verwechselst Du Sven und mich?

und Deine Behauptung, der gepostete Code sei 1:1 der im Artikel vorgeschlagene,
dann bekommst Du von mir ein <I> für den Artikel.

Ich gebs Dir gerne zurück, da: <I> :-)

Freundliche Grüße

Vinzenz