Caezar: Formmailer sendet nichts, sondern listet nur das PHP Script auf

Ich habe das Problem das beim versenden keine Email ankommt, sondern sobald ich auf meinen Button Senden klinke, werde ich auf ein weißes Browserfester geleitet, wo das php Script steht.
was muss ich machen, damit das Formular richtig funktioniert???

hier ist mein Formular und mein PHP Script:

<form method="post" action="phpjs/formmail.php">  
<span id="page_top" style="display: inline;"></span><table align="center" class="table" border="0" cellspacing="1" cellpadding="3">  
  
<tr>  
<td colspan="2" class="main" height="16" width="100%"><span class="font-small">Bitte f&uuml;llen Sie alle mit * markierten Felder aus. (Pflichtfelder)</span></td>  
</tr>  
<tr>  
<td class="main" width="30%"><div class="align">Ihr Name*</div></td>  
<td class="main"><input class="input" type="text" name="absender_name" size="20" /></td>  
</tr>  
<tr>  
<td class="main" width="30%"><div class="align">Ihre E-Mail Adresse*</div></td>  
<td class="main"><input class="input" type="text" name="absender_mail" size="20" /></td>  
</tr>  
<tr>  
<td class="main" width="30%"><div class="align">Ihre Telefonnummer</div></td>  
<td class="main"><input class="input" type="text" name="absender_tel" size="20" maxlength="100" /></td>  
</tr>  
<tr>  
<td class="main" width="30%"><div class="align">Ihre Faxnummer</div></td>  
<td class="main"><input class="input" type="text" name="absender_fax" size="20" maxlength="100" /></td>  
</tr>  
<tr>  
<td class="main" width="30%"><div class="align">Ihr Kommentar*</div></td>  
<td class="main">(Restzeichen: <span id="count_1">2500</span>)<br />  
<textarea class="textarea" name="absender_text" id="absender_text" cols="35" rows="8" onKeyDown="rest(this,2500,'count_1',event)" onKeyUp="rest(this,2500,'count_1',event)" onChange="rest(this,2500,'count_1',event)"></textarea></td>  
</tr>  
<tr>  
<td class="main" width="30%"><div class="align">Datei Upload 1</div></td>  
<td class="main"><input class="input" type="file" name="datei_upload" /><div style="display:inline" id="stat"></div></td>  
</tr>  
<tr>  
<td class="main" width="30%"><div class="align">Bitte nehmen Sie Kontakt mit mir auf:</div></td>  
<td class="main"><select class="select" size="1" name="absender_men&uuml;">  
<option value="telefon">telefon</option><option value="email">email</option></select>  
</td>  
</tr>  
  
<tr><td class="foot" colspan="2" align="left" height="70" width="100%"><input class="button_send" type="submit" value="Abschicken" />&nbsp;&nbsp;&nbsp;&nbsp;<input class="button" type="reset" value="Zur&uuml;cksetzen" /></td></tr>  
</table>  
</form>
<?php  
  
  
$Empfaenger = "info@proprint-werbung.de";  
  
ini_set('display_errors', '1');  
error_reporting(-1);  
  
if($_REQUEST['Send'])  
{  
if(empty($_REQUEST['Name']) || empty($_REQUEST['Email']) || empty($_REQUEST['Nachricht']))  
{  
echo"Bitte gehen Sie <a href="javascript:history.back();">zurück</a> und füllen Sie alle Felder aus!";  
}  
else  
{  
$Mailbetreff = "Kontakt: ";  
$Mailbetreff .= $_REQUEST['Betreff'];  
  
$Trenner = md5(uniqid(time()));  
  
$header = array();  
$Header = "From: ".$_REQUEST['Email'];  
$Header .= "n";  
$Header .= "MIME-Version: 1.0";  
$Header .= "n";  
$Header .= "Content-Type: multipart/mixed; boundary=$Trenner";  
$Header .= "nn";  
$Header .= "This is a multi-part message in MIME format";  
$Header .= "n";  
$Header .= "--$Trenner";  
$Header .= "n";  
$Header .= "Content-Type: text/plain; charset=utf-8;"  
$Header .= "n";  
$Header .= "Content-Transfer-Encoding: 8bit";  
$Header .= "nn";  
$Header .= "Sie haben folgende Nachricht erhalten: nn";  
  
while(list($Formularfeld, $Wert) = each($_REQUEST))  
{  
if($Formularfeld != "Send" && $Formularfeld != "Anhang")  
{  
$Header .= $Formularfeld.": ".$Wert."n";  
}  
}  
  
$Header .= "nDatum/Zeit: ";  
$Header .= date("d.m.Y H:i:s");  
$Header .= "n";  
$Header .= "--$Trenner";  
$Header .= "n";  
$Header .= "Content-Type: ";  
$Header .= $_FILES['Anhang']['type'];  
$Header .= "; name=";  
$Header .= $_FILES['Anhang']['name'];  
$Header .= "n";  
$Header .= "Content-Transfer-Encoding: base64";  
$Header .= "n";  
$Header .= "Content-Disposition: attachment; filename=";  
$Header .= $_FILES['Anhang']['name'];  
$Header .= "nn";  
$Dateiinhalt = fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);  
$Header .= chunk_split(base64_encode($Dateiinhalt));  
$Header .= "n";  
$Header .= "--$Trenner--";  
  
mail($Empfaenger, $Mailbetreff, "", $Header);  
echo"Vielen Dank für Ihre eMail!";  
}  
}  
else  
{  
?>

Vielen Dank für jede Hilfe

  1. Ich habe das Problem das beim versenden keine Email ankommt, sondern sobald ich auf meinen Button Senden klinke, werde ich auf ein weißes Browserfester geleitet, wo das php Script steht.
    was muss ich machen, damit das Formular richtig funktioniert???

    In dem Fall, dass das PHP-Skript gesendet statt ausgeführt wird, ist es stets so, dass der Webserver falsch konfiguriert ist.

    Wenn es sich nicht um Ihren eigenen (virtuellen) Server handelt, dann sollten Sie Ihren Hoster kontaktieren, eventuell haben Sie ein Paket ohne PHP "gekauft".

    Wenn es sich um Ihren  eigenen (virtuellen) Server handelt, dann scheint es so, als sei die Deaktivierung der Bearbeitung von PHP-Skripten zu Ihrem Schutz erfolgt. Sie sollten sich in diesem Fall die Hilfe eines entsprechend qualifizierten Mitarbeiters oder Dienstleister in Anspruch nehmen.

    Falls es sich nur um einen Server handelt, den Sie zu Lernzwecken in einer gesicherten, aus dem Internet NICHT erreichbare Umgebung handelt, so lesen Sie bitte Istallation und Konfiguration im PHP-Manual nach. Auf Grund der Umstände, welche Sie [nicht] nannten, kann Ihnen ohnehin zunächst keine andere sinnvolle Auskunft gegeben werden.

    Jörg Reinholz

  2. Hallo Caezar,

    Ich habe das Problem das beim versenden keine Email ankommt, sondern sobald ich auf meinen Button Senden klinke, werde ich auf ein weißes Browserfester geleitet, wo das php Script steht.
    was muss ich machen, damit das Formular richtig funktioniert???

    <?php

    $Empfaenger = "info@proprint-werbung.de";

    ini_set('display_errors', '1');
       error_reporting(-1);

      
    [php.net empfiehlt für den Einsatz von error_reporting vordefinierte Konstanten zu nehmen.](http://www.php.net/manual/de/errorfunc.constants.php) Abgesehen davon weiss ich nicht, was bei Übergabe von "-1" passiert. Auf jeden Fall entspricht -1 keinem der vorgesehenen Werte. Evtl. siehst du somit auftretende Fehler nicht.  
      
    
    > ~~~php
      
    if($_REQUEST['Send'])  
    {  
      if(empty($_REQUEST['Name']) || empty($_REQUEST['Email']) || empty($_REQUEST['Nachricht']))  
      {  
        echo"Bitte gehen Sie <a href="javascript:history.back();">zurück</a> und füllen Sie alle Felder aus!";  
      }  
      else  
      {  
       $Mailbetreff = "Kontakt: ";  
       $Mailbetreff .= $_REQUEST['Betreff'];  
      
       $Trenner = md5(uniqid(time()));  
      
       $header = array();  
       $Header = "From: ".$_REQUEST['Email'];  
       $Header .= "n";  
       $Header .= "MIME-Version: 1.0";  
       $Header .= "n";  
       $Header .= "Content-Type: multipart/mixed; boundary=$Trenner";  
       $Header .= "nn";  
       $Header .= "This is a multi-part message in MIME format";  
       $Header .= "n";  
       $Header .= "--$Trenner";  
       $Header .= "n";  
       $Header .= "Content-Type: text/plain; charset=utf-8;"  
       $Header .= "n";  
       $Header .= "Content-Transfer-Encoding: 8bit";  
       $Header .= "nn";  
       $Header .= "Sie haben folgende Nachricht erhalten: nn";  
      
       while(list($Formularfeld, $Wert) = each($_REQUEST))  
       {  
         if($Formularfeld != "Send" && $Formularfeld != "Anhang")  
         {  
           $Header .= $Formularfeld.": ".$Wert."n";  
         }  
       }  
      
       $Header .= "nDatum/Zeit: ";  
       $Header .= date("d.m.Y H:i:s");  
       $Header .= "n";  
       $Header .= "--$Trenner";  
       $Header .= "n";  
       $Header .= "Content-Type: ";  
       $Header .= $_FILES['Anhang']['type'];  
       $Header .= "; name=";  
       $Header .= $_FILES['Anhang']['name'];  
       $Header .= "n";  
       $Header .= "Content-Transfer-Encoding: base64";  
       $Header .= "n";  
       $Header .= "Content-Disposition: attachment; filename=";  
       $Header .= $_FILES['Anhang']['name'];  
       $Header .= "nn";  
       $Dateiinhalt = fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);  
       $Header .= chunk_split(base64_encode($Dateiinhalt));  
       $Header .= "n";  
       $Header .= "--$Trenner--";  
      
       mail($Empfaenger, $Mailbetreff, "", $Header);  
       echo"Vielen Dank für Ihre eMail!";  
      }  
    }  
    else  
    {  
    ?>
    

    else was? (entweder hast du vergessen, den fehlenden Code hier zu posten, oder genau da liegt der Fehler...)

    noch eine Anmerkung: An diversen Stellen fehlt (wahrscheinlich) ein Backslash vor dem "n". Statt

    $Header .= "n";

    sollte stehen:

    $Header .= "\n";

    Viele Grüße

    mbr

    1. Danke erst mal für die schnelle Hilfe, doch ich komme mit diesem error_reporting(-1) nicht klar, ich hab mal ne 8 reingeschrieben um zusehen ob es Veränderung gibt...und peng... nur noch ein weißer Bildschirm.
       ...aber keine Mail im Postfach ^^.

      ich bin leider noch ein php beginner,... bitte helf mir ^^

      1. Danke erst mal für die schnelle Hilfe, doch ich komme mit diesem error_reporting(-1) nicht klar, ich hab mal ne 8 reingeschrieben um zusehen ob es Veränderung gibt...und peng... nur noch ein weißer Bildschirm.

          
        <?php [link:http://php.net/manual/de/function.error-reporting.php@title=error_reporting](E_ALL); ?>  
        
        

        In die ERSTE Zeile!

        Deine Fehlermeldung war missverständlich. "Listet nur das PHP-Skript auf" kann man so verstehen, dass Du den Quelltext siehst.

        Ansonsten gibt es noch ein error-log. Frag ggf. Deinen Provider, wie Du da ran kommst.

        Jörg Reinholz

    2. Hallo Caezar,
      habe es gerade ausprobiert: wenn ich deinen PHP-Code per copy&paste genauso übernehme und auf meinem lokalen Server ausführe, bekomme ich diverse Syntaxfehler:

      Ich habe mir wirklich überlegt, ob ich diesen "Roman" hier abschicken soll. Schließlich soll hier bei "SELFHTML" ja Hilfe zur Selbsthilfe gegeben werden und nicht irgendwelcher Code vorgekaut werden und zweitens bin ich selbst nur "Hobby PHP Schreiber" und kann auch gar nicht abschätzen, was da evtl. noch für Sicherheitslücken im Script sind. (Dass zumindest der Empfänger hart codiert ist, ist schonmal gut). Also jetzt zu den Fehlermeldungen:

      Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in C:\xampp_1.7.7\htdocs\php_experiments\SELFHTML_t=215286&m=1474104.php on line 14

      echo"Bitte gehen Sie <a href="javascript:history.back();">zurück</a> und füllen Sie alle Felder aus!";

      Hier fehlen vor den Anführungszeichen beim href die Backslashes (siehe das Kapitel zu strings in PHP - speziell der Absatz "double quoted")

      echo "Bitte gehen Sie <a href=\"javascript:history.back();\">zurück</a> und füllen Sie alle Felder aus!";

      Parse error: syntax error, unexpected T_VARIABLE in C:\xampp_1.7.7\htdocs\php_experiments\SELFHTML_t=215286&m=1474104.php on line 35

      Hier liegt der Fehler schon in Zeile 34. Es fehlt ein ";"

      $Header .= "Content-Type: text/plain; charset=utf-8;"

      wird zu

      $Header .= "Content-Type: text/plain; charset=utf-8;";

      Parse error: syntax error, unexpected $end in C:\xampp_1.7.7\htdocs\php_experiments\SELFHTML_t=215286&m=1474104.php on line 74

      Das bereits vorher erwähnte "else - was?", also einfach eine geschweifte Klammer ergänzt

        
      else  
      {  
      
      

      wird zu

        
      else  
      {  
      }  
      
      

      Notice: Undefined index: Send in C:\xampp_1.7.7\htdocs\php_experiments\SELFHTML_t=215286&m=1474104.php on line 10

      Das Array $_REQUEST enthält keinen Eintrag mit dem Index 'Send' - was daran liegt, dass im HTML der Button "Abschicken" keinen Namen hat; dazu gleich in Punkt 5) - also folgende Änderung:

      if($_REQUEST['Send'])

      wird zu

      if(isset($_REQUEST['Send']))

      Jetzt geht das Skript in den else Zweig (siehe Punkt 3)), der aber noch leer ist ==> weisser Bildschirm, also evtl. noch eine Fehlermeldung einbauen. Wenn die Variable $_REQUEST['Send'] nicht vorhanden ist, heißt das: a) Das Formular ist fehlerhaft, oder b) der Nutzer hat das PHP-script direkt aufgerufen

      Das HTML Formular ist nicht valide. Außerdem fehlt der Name für den "Abschicken" Button. (im HTML Teil ändern)

      <input name="Send" class="button_send" type="submit" value="Abschicken" />

      Die Namen im Formular passen nicht zu den Namen im PHP-Script ==> Ich bekomme immer die Fehlermeldung, dass nicht alle Felder ausgefüllt sind. Übrigens: die Fehlermeldung wird als (invalider) HTML Schnippsel ausgegeben (weil das Grundgerüst drumherum fehlt). Der Link mit dem "javascript:history.back();" funktioniert zwar bei mir, ist aber auch keine schöne Lösung

      1. nach Korrektur von 6) für alle Felder ausser dem fileupload kommen noch ein paar Warnings und Notices:

      Notice: Undefined index: Anhang in C:\xampp_1.7.7\htdocs\php_experiments\SELFHTML_t=215286&m=1474104.php on line 54

      Notice: Undefined index: Anhang in C:\xampp_1.7.7\htdocs\php_experiments\SELFHTML_t=215286&m=1474104.php on line 56

      Notice: Undefined index: Anhang in C:\xampp_1.7.7\htdocs\php_experiments\SELFHTML_t=215286&m=1474104.php on line 61

      Notice: Undefined index: Anhang in C:\xampp_1.7.7\htdocs\php_experiments\SELFHTML_t=215286&m=1474104.php on line 63

      Warning: fopen() [function.fopen]: Filename cannot be empty in C:\xampp_1.7.7\htdocs\php_experiments\SELFHTML_t=215286&m=1474104.php on line 63

      Notice: Undefined index: Anhang in C:\xampp_1.7.7\htdocs\php_experiments\SELFHTML_t=215286&m=1474104.php on line 63

      Warning: fread() expects parameter 1 to be resource, boolean given in C:\xampp_1.7.7\htdocs\php_experiments\SELFHTML_t=215286&m=1474104.php on line 63

      Das überlasse ich mal dir. (Irgendwas muss ja noch "SELF" sein hier)

      Der Erfolg (oder Mißerfolg) des Absendens der mail sollte übrigens auch geprüft werden.

        
      $erg=mail($Empfaenger, $Mailbetreff, "", $Header);  
      if($erg===false)  
      {  
              echo "Fehler beim Verschicken mail";  
      }  
      else  
      {  
              echo "Vielen Dank für Ihre eMail!";  
      }  
      
      

      So, wenn alles gut gegangen ist, hat "info@proprint-werbung.de" jetzt von mir (mbr@planet-brueckner.de) eine mail bekommen. Ich hoffe, die Adresse gehört wirklich dir (oder deinen Kunden) und eine einzelne mail wird nicht als zu störend empfunden...

      Nimms mir nicht übel, aber es wäre evtl. gut, sich mit den Grundlagen von HTML und PHP zu befassen.

      Viele Grüße

      mbr

      1. Hi,

        Der Erfolg (oder Mißerfolg) des Absendens der mail sollte übrigens auch geprüft werden.

        das wäre schön, ja - ist aber nicht möglich, wenn man die PHP-Funktion mail() verwendet.

        $erg=mail($Empfaenger, $Mailbetreff, "", $Header);

        if($erg===false)
        {
                echo "Fehler beim Verschicken mail";
        }

          
        Erstens halte ich es für unnötig, das Funktionsergebnis von mail() erst noch zwischenzuspeichern; in meinen Augen ist das ein Schritt, der die Sache nur ein kleines bisschen unübersichtlicher macht, aber keinen Vorteil bringt. Zweitens liefert mail() immer ein boolsches Ergebnis, der typsichere Vergleich mit false ist also auch unnötig kompliziert. Also stattdessen einfach:  
          
        ~~~php
        if (!mail(...))  
         { echo "Fehler beim Verschicken mail";  
         }
        

        Didaktisch und formal falsch ist an dem verwendeten Formmailer-Script auch, dass es sozusagen eine leere Nachricht verschickt: Für den Parameter "message" wird der Leerstring übergeben. Stattdessen wird die eigentliche Nachricht an die Header angehängt und mit denen zusammen als lange Textwurst übergeben.
        Das funktioniert zwar prima, weil PHP intern auch nichts weiter macht, als den Parameter "message" noch an die Header anzuhängen. Schön ist es trotzdem nicht.

        Aber der eigentliche Knackpunkt ist, dass mail() mit dem Ergebnis true nur anzeigt, dass die Nachricht erfolgreich an einen MTA übergeben wurde, mehr nicht. Gerade so, als hättest du einen Brief eben in den gelben Kasten eingeworfen. Es ist keine Aussage über den Erfolg der Mail-Zustellung.

        Ciao,
         Martin

        --
        Die letzten Worte des Hardware-Bastlers:
        Das Netzkabel lass ich wegen der Erdung lieber dran.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hallo an alle freundlichen Helfer,

          Ich bin jetzt soweit das die Mail ankommt aber nur im header der betreff und die Absender email zu sehen ist.
          Was muss ich denn machen damit ich auch den Text, Dateianhang sowie die anderen Felder in der Email sehe und nicht nur im header?

          vielen Dank!

            
          <?php  
          	$empfaenger = "Ceazar@example.com";  
          		  
          	if(isset($_POST['send'])) {  
          		if(!isset($_POST['absender_name']) || $_POST['absender_name'] == "" ||  
          		   !isset($_POST['absender_mail']) || $_POST['absender_mail'] == "" ||  
          		   !isset($_POST['absender_text']) || $_POST['absender_text'] == "") {  
          			echo "<br /><div class='error'>Bitte füllen Sie alle Pflichtfelder aus!</div><br />";  
          		} else {  
          			$mailbetreff = "Kontakt: ";  
          			$mailbetreff .= $_POST['absender_betreff'];		  
          			  
          			$trenner = md5(uniqid(time()));  
          			  
          			$header = array();			  
          			$header = "From: ".$_POST['absender_mail'];  
          			$header .= "\n";  
          			$header .= "MIME-Version: 1.0";  
          			$header .= "\n";  
          			$header .= "Content-Type: multipart/mixed; boundary=$Trenner";  
          			$header .= "nn";  
          			$header .= "This is a multi-part message in MIME format";  
          			$header .= "\n";  
          			$header .= "--".$trenner;			  
          			$header .= "\n";  
          			$header .= "Content-Type: text/plain; charset=utf-8;";  
          			$header .= "\n";  
          			$header .= "Content-Transfer-Encoding: 8bit";  
          			$header .= "nn";  
          			$header .= "Sie haben folgende Nachricht erhalten: n";		  
          			  
          			while(list($formularfeld, $wert) = each($_POST)) {  
          			if($formularfeld != "send" && $formularfeld != "datei_upload") {  
          			$header .= $formularfeld.": ".$wert."\n";		  
          				}  
          			}  
          			  
          			$header .= "nDatum/Zeit: ";  
          			$header .= date("d.m.Y H:i:s");  
          			$header .= "\n";  
          			$header .= "--".$trenner;  
          			$header .= "\n";  
          			$header .= "Content-Type: ";  
          			$header .= $_FILES['datei_upload']['type'];  
          			$header .= "; name=";  
          			$header .= $_FILES['datei_upload']['name'];  
          			$header .= "\n";  
          			$header .= "Content-Transfer-Encoding: base64";  
          			$header .= "\n";  
          			$header .= "Content-Disposition: attachment; filename=";  
          			$header .= $_FILES['datei_upload']['name'];  
          			$header .= "nn";  
          			  
          			$dateiinhalt = fread(fopen($_FILES['datei_upload']['tmp_name'], "r"), $_FILES['datei_upload']['size']);  
          			$header .= chunk_split(base64_encode($dateiinhalt));  
          			  
          			$header .= "\n";  
          			$header .= "--".$trenner."--";  
          			  
          			if(mail($empfaenger, $mailbetreff, "", $header)) {	  
          				echo "<br /><div class='success'>Vielen Dank für Ihre E-Mail!</div><br />";  
          			}  
          		}  
          	}  
          ?>  
          
          
            
          <form method="post" action="phpjs/formmail.php">  
          <span class="font-small">Bitte füllen Sie alle mit * markierten Felder aus. (Pflichtfelder)</span>  
          <table>  
           <tr>  
            <td>Ihr Name*</td>  
            <td><input class="input" type="text" name="absender_name" size="20" /></td>  
           </tr>  
           <tr>  
            <td>Ihre E-Mail Adresse*</td>  
            <td><input class="input" type="text" name="absender_mail" size="20" /></td>  
           </tr>  
           <tr>  
            <td>Ihre Telefonnummer</td>  
            <td><input class="input" type="text" name="absender_tel" size="20" maxlength="100" /></td>  
           </tr>  
           <tr>  
            <td>Ihre Faxnummer</td>  
            <td><input class="input" type="text" name="absender_fax" size="20" maxlength="100" /></td>  
           </tr>  
           <tr>  
            <td>Ihr Kommentar*</td>  
            <td>(Restzeichen: <span id="count_1">2500</span>)<br />  
              <textarea class="textarea" name="absender_text" id="absender_text" cols="35" rows="8" onKeyDown="rest(this,2500,'count_1',event)" onKeyUp="rest(this,2500,'count_1',event)" onChange="rest(this,2500,'count_1',event)"></textarea></td>  
           </tr>  
           <tr>  
            <td>Datei Upload</td>  
            <td><input class="input" type="file" name="datei_upload" /></td>  
           </tr>  
           <tr>  
            <td>Bitte nehmen Sie Kontakt mit mir auf:</td>  
            <td>  
             <select class="select" size="1" name="absender_menu">  
              <option value="telefon">telefon</option>  
              <option value="email">email</option>  
             </select>  
            </td>  
           </tr>  
           <tr>  
            <td>  
            </td>  
            <td>  
             <input name="send" type="submit" value="Abschicken" />  
             <input type="reset" value="Zurücksetzen" />  
            </td>  
           </tr>  
          </table>  
          </form>  
          
          
          1. Tach!

            Was muss ich denn machen damit ich auch den Text, Dateianhang sowie die anderen Felder in der Email sehe und nicht nur im header?

            Email versenden ist ein seit langem gelöstes Problem. Dazu gibt es fertige Bibliotheken, man muss das Rad nicht neu erfinden, besonders nicht bei mehrteiligen Mails. Siehe zum Beispiel http://wiki.selfhtml.org/wiki/Artikel:Formmailer-Advanced.

            if(isset($_POST['send'])) {

            Es gibt Browser, die senden, wenn man nicht den Button klickt sondern das Formular mit Enter absendet, nichts vom Button mit. Der Test kann also fehlschlagen. Besser ist es, die REQUEST_METHOD auszuwerten, oder ob allgemein das $_POST-Array leer ist oder nicht.

              	$header = "From: ".$\_POST['absender\_mail'];  
            

            Spam-Gefahr! Alles was im Header landet, kann weitere Headerzeilen (Cc, Bcc) enthalten, wenn du nicht prüfst, ob Zeilenumbrüche drin sind. Siehe http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel/erkennen_und_behandeln#E-Mail. Der Swiftmailer (im obigen Link) kennt sich damit aus und hat das Problem nicht.

              	$header .= "nn";  
            

            nn oder \n\n?

              	while(list($formularfeld, $wert) = each($\_POST)) {  
            

            while/list/each gibt es zwar immer noch und funktioniert, aber das nutzte man vor vielen Jahren, als es foreach noch nicht gab.

              	$dateiinhalt = fread(fopen($\_FILES['datei\_upload']['tmp\_name'], "r"), $\_FILES['datei\_upload']['size']);  
            

            Auch gibt es seit langem file_get_contents().

            dedlfix.

    3. Tach!

      error_reporting(-1);
      php.net empfiehlt für den Einsatz von error_reporting vordefinierte Konstanten zu nehmen.

      Diese Empfehlung kann ich auf der angegebenene Seite nicht finden.

      Abgesehen davon weiss ich nicht, was bei Übergabe von "-1" passiert. Auf jeden Fall entspricht -1 keinem der vorgesehenen Werte. Evtl. siehst du somit auftretende Fehler nicht.

      -1 ist üblicherweise eine Zahl, bei der alle Bits gesetzt sind. Man macht sich dabei zunutze, dass Intergerzahlen praktisch nur im Zweierkomplement abgelegt werden. Am Ende zählt für die Funktion error_reporting() und die gleichnamige Direktive nur, welche Bits gesetzt sind. Bei -1 sind nun alle Bits gesetzt, auch die nicht verwendeten. Ergebnis ist, dass alle Optionen eingeschaltet sind. Die überflüssigen Bits stören nicht. -1 entspricht also praktisch einem E_ALL + E_STRICT (in PHP kleiner als 5.4, seit 5.4 ist E_STRICT in E_ALL enthalten).

      dedlfix.

      1. Hallo dedlfix,

        error_reporting(-1);
        php.net empfiehlt für den Einsatz von error_reporting vordefinierte Konstanten zu nehmen.

        Diese Empfehlung kann ich auf der angegebenene Seite nicht finden.

        Mein Fehler: ich hatte die falsche Seite verlinkt.
        Auf der Seite zum error_reporting() steht es.

        Abgesehen davon weiss ich nicht, was bei Übergabe von "-1" passiert. Auf jeden Fall entspricht -1 keinem der vorgesehenen Werte. Evtl. siehst du somit auftretende Fehler nicht.

        -1 ist üblicherweise eine Zahl, bei der alle Bits gesetzt sind. Man macht sich dabei zunutze, dass Intergerzahlen praktisch nur im Zweierkomplement abgelegt werden. Am Ende zählt für die Funktion error_reporting() und die gleichnamige Direktive nur, welche Bits gesetzt sind. Bei -1 sind nun alle Bits gesetzt, auch die nicht verwendeten. Ergebnis ist, dass alle Optionen eingeschaltet sind. Die überflüssigen Bits stören nicht. -1 entspricht also praktisch einem E_ALL + E_STRICT (in PHP kleiner als 5.4, seit 5.4 ist E_STRICT in E_ALL enthalten).

        Danke für die Erklärung. Ich hatte nur auf der zuerst angegebenen Seite den Kommentar Nummer zwei (von Andy at Azurite (co uk)) gelesen und das "*absolutely anything* could happen" gesehen und dachte, das hört sich nicht gut an. Ich gebe zu, dass ich den Kommentar nur überflogen hatte, ohne den tieferen Sinn sofort zu verstehen (Zweierkomplement ist mir schon ein Begriff, aber ich hatte übersehen, dass der Einwand mit den Einerkomplement oder Vorzeichenbit Systemen wohl eher akademischer Natur ist.) Was mich allerdings gewundert hatte, war, dass der Caezar hier im Forum etwas von einem weißem Bildschirm schrieb, obwohl ich zumindest einen von mehreren Syntaxfehlern sogar gesehen hatte, ohne das script selbst laufen zu lassen.

        Viele Grüße

        mbr

        1. Tach!

          php.net empfiehlt für den Einsatz von error_reporting vordefinierte Konstanten zu nehmen.
          Auf der Seite zum error_reporting() steht es.

          Generell ist das richtig, wenn man zum Beispiel von E_ALL ausgeht. Das hat ja in der Vergangenheit mehrfach den Integerwert gewechselt. Wenn man heutzutage immer noch 2047 verwendet, weil das zu PHP-4-Zeiten State of the Art war, dann macht man was falsch. Bei -1 ist die Chance allerdings sehr gering. Da müsste schon ein 0-Bit eine einschaltende Bedeutung bekommen, damit -1 failed. Und dass PHP was anderes als das Zweierkomplement verwendet, wird so schnell auch nicht der Fall werden. Da müssten schon ganz gewichtige Gründe dafür sprechen, dass dieser Quasi-Standard aufgegeben wird.

          dedlfix.