Bernhard unreg: Per Checkbox Kopie an Absender - Problem

Halllo,

im meinem Kontaktformular möcht ich, daß der Absender anhand einer Checkbox auswählen kann, ob er eine Kopie der Nachricht haben will. Die Checkbox die ich eingerichtet habe ist diese:

<input type="checkbox" name="kopie" value="1"> Klick die Checkbox, f&uuml;r eine Kopie an dich

Der PHP-Code den ich mir zusammengereimt habe ist der:

if($kopie=="1")  /*Zur Erklärung: $kopie=$_POST['kopie']*/
  {          /*$from_mail ist die in's entsprechende Inputfeld eingetragene Emailadresse*/
  mail($from_mail,$header,"Hallo $from_name, vielen Dank für Deinen Besuch auf meiner Homepage!\n",
"---------------------------------------------\n",
"Folgende Nachricht ist bei mir eingegangen:\n",
"Ihr Name:       $from_name\n",
"Ihre Email:     $from_mail\n",
"Ihr Betreff:    $mail_subject\n",
"Ihre Nachricht: $mail_text\n",
"---------------------------------------------\n",
"So bald ich kann, werde ich sie beantworten.\n\n",

"Mit freundlichem Gruß,\n",
"Bernhard");
  }

Getestet hab ich's mit meiner eigenen Emailadresse. Aber ich bekomme keine Kopie der Nachricht. Lediglich nur die Hauptnachricht.
Und nun weiß ich auch nicht mehr weiter. Würde mir bitte jemand helfen?

Gruß und frohe Pfingsten,
Bernhard

  1. <input type="checkbox" name="kopie" value="1"> Klick die Checkbox, f&uuml;r eine Kopie an dich

    Der PHP-Code den ich mir zusammengereimt habe ist der:

    if($kopie=="1")  /*Zur Erklärung: $kopie=$_POST['kopie']*/

    Vielleicht funktioniert es besser, wenn du schreibst:

      
    <?php  
    //...  
      
    if(isset($_POST['kopie']) and $_POST['kopie'] == "1") {  
      
        // sende Mail  
    }  
      
    //...  
    ?>  
    
    

    Im Übrigen fährst du sowieso fast immer am besten, wenn du nicht auf
    die automatische Definition der globalen Variablen vertraust (Stichwort register_globals),
    sondern direkt immer die entsprechenden Arrays $_GET bzw. $_POST
    verwendest...

    Gruß MeXXi

    --

    ie:% fl:{ br:^ va:| ls:[ fo:| rl:? n4:( ss:} de:> js:| ch:? sh:) mo:| zu:}
    1. Hi!

      Das mit der Überprüfung ist ein guter Punkt. Aber ein Schritt nach dem andern. Es soll ja erstmal funktionieren. Außerdem ist diese Version des Formulars eh noch nicht öffentlicht.

      Dein Vorschlag, MeXXi, hab ich eingebaut, ne Kopie bekomme ich aber trotzdem nicht.

      Und damit ihr mal ein besseren Überblick bekommt, hier mal der PHP-Code:

      <?php

      $mail_to="xxxxxxxxxxxxxx@xxx.de"; //Ist nur unkenntlich gemacht.
                                                                  //Im Script steht's richtig drin.
      $from_name=$_POST['fromname'];
      $from_mail=strtolower($_POST['frommail']);
      $mail_subject=$_POST['mailsubject'];
      $mail_text=$_POST['mailtext'];
      $send=$_POST['s'];

      [...]   //Den Bereich für die Fehlermeldungen hab ich mal weggelassen. Weil ich glaube,
              //daß der eher irrelevant für unser Promblem ist.

      if(strlen($mail_text)>1000) {
        $mail_text=substr($mail_text,0,1000)."... (Text wurde gek&uuml;rzt!)";
      }
      $from_name=str_replace(chr(34),"''",$from_name);
      $mail_subject=str_replace(chr(34),"''",$mail_subject);
      $from_name=stripslashes($from_name);
      $from_mail=stripslashes($from_mail);
      $mail_subject=stripslashes($mail_subject);
      $mail_text=stripslashes($mail_text);

      if(($send=="1") && (isset($err_text))) {
        echo "<p class="fehler"><b>Fehler:</b><br>\n";
        echo "$err_text</p>";
      }

      if(($send!="1") || (isset($err_text)))
      {
      } else {
        $header="From: $from_name <$from_mail>\n";
        $header.="Reply-To: $from_mail\n";
        $header.="X-Mailer: PHP-FormMailer\n";
        $header.="Content-Type: text/plain";
        $mail_date=gmdate("D, d M Y H:i:s")." +0000";
        $send=0;
        if(@mail($mail_to,$mail_subject,$mail_text,$header))
        {
        header ("location: web/Danke.html");
        }
        else
        {
          echo "<p><b>Beim Versenden der E-Mail ist ein Fehler aufgetreten!</b></p>";
          echo "<p><a href="".$_SERVER['PHP_SELF']."?from_name=$from_name&from_mail=$from_mail&mail_subject=$mail_subject&mail_text=";
          echo urlencode($mail_text)."">Zur&uuml;ck zum Formular</a></p>";
        }
        if(isset($_POST['kopie']) and $_POST['kopie'] == "1")
        {
        mail($from_mail,$header,"Hallo $from_name, vielen Dank für Deinen Besuch auf meiner Homepage!\n",
      "---------------------------------------------\n",
      "Folgende Nachricht ist bei mir eingegangen:\n",
      "Ihr Name:       $from_name\n",
      "Ihre Email:     $from_mail\n",
      "Ihr Betreff:    $mail_subject\n",
      "Ihre Nachricht: $mail_text\n",
      "---------------------------------------------\n",
      "So bald ich kann, werde ich sie beantworten.\n\n",

      "Mit freundlichem Gruß,\n",
      "Bernhard");
        }
      }
      ?>

      LG, Bernhard

      1. Hallo Bernhard,

        $from_name=$_POST['fromname'];
        $from_mail=strtolower($_POST['frommail']);
        $mail_subject=$_POST['mailsubject'];
        $mail_text=$_POST['mailtext'];
        $send=$_POST['s'];

        ich fragte schon indirekt danach: Prüfst du die Eingaben auch, oder übernimmst du sie nur gutgläubig? Denn ein reines Umkopieren ohne Plausibilitätsprüfung wäre eigentlich sinnlos.

        header ("location: web/Danke.html");

        Fehler: Der location-Header muss eine absolute URL angeben (auch wenn's bei den meisten Clients auch mit relativen URLs funktioniert).

        mail($from_mail,$header,"Hallo $from_name, vielen Dank für Deinen Besuch auf meiner Homepage!\n",

        Immer noch falsch.

        So long,
         Martin

        --
        F: Was macht ein Offizier, der in der Nase bohrt?
        A: Er holt das Letzte aus sich heraus.
        1. Hi!

          Prüfst du die Eingaben auch, oder übernimmst du sie nur gutgläubig?

          Man kann gar nicht oft genug erwähnen, wie wichtig es ist, alle Daten, die von außen kommen, grundsätzlich als böse anzusehen.
          Alle diese Daten müssen geprüft und notfalls bereinigt werden.
          Andernfalls hast du kein Mailformular, sondern eine Spamschleuder oder Schlimmeres erstellt.
          Ich habe jetzt allerdings keine Lust, genau zu erklären, wie man sich hier absichern kann.
          Das wurde hier im Forum schon bereits so oft geschrieben, daß es schon langweilig wird...
          Also einfach im Archiv schauen.

          header ("location: web/Danke.html");

          Fehler: Der location-Header muss eine absolute URL angeben (auch wenn's bei den meisten Clients auch mit relativen URLs funktioniert).

          Ja und man sollte danach das Script mit exit; beenden, damit nicht eventuell noch nachfolgender Code ausgeführt wird, falls ein Client dieser Umleitung nicht folgen sollte.

          Schöner Gruß,
          rob

          1. Die Variable "additional_header" ist das Problem.

            1. Hi!

              Die Variable "additional_header" ist das Problem.

              Inwiefern?
              Bekommst du eine Fehlermeldung? Wenn ja: welche?

              Und wenn ich das richtig verstanden habe, dann ist das hier jetzt dein aktueller Code, ja?

              Mail-Header müssen mit einem CRLF abgetrennt werden und nicht nur mit einem LF. So sagt es das RFC.

              Warum setzt du eigentlich keine Variablen ein und stopft stattdessen deinen gesamten Mailtext in den Aufruf der Mailfunktion?
              Ist verdammt unübersichtlich so. Ich hab echt Schwierigkeiten den Code zu lesen.

              Wo der Fehler liegt, kann ich so außerdem nicht erkennen, zumal ich auch nicht weiß, was in deinen Variablen steht.
              Prüft du den Inhalt der Variablen jetzt eigentlich mittlerweile? Falls nicht, wundert mich nichts, wenn da was nicht funktioniert.
              Sollte in einer Variablen vielleicht ein Double-Quote " vorkommen, welches du nicht escapest, dann müßte es zwangsläufig zu einem Fehler kommen.

              Aber wie gesagt: wildes Raten bringt nichts.
              Poste die Fehlermeldung.

              Und dann solltest du in $additional_headers außerdem _sinnvolle_ Header unterbringen.
              Warum gibst du dort nicht den Content-Type deiner Mail oder die verwendete Zeichenkodierung an?
              Alles wichtige Sachen, die du völlig ignorierst.

              Die Beschreibung der Funktion mail() im Handbuch hast du gelesen?

              Schöner Gruß,
              rob

              1. Hi,

                aslo die Fehlermeldung ist folgende:

                Parse error: parse error, unexpected T_VARIABLE in /homepages/36/d190080444/htdocs/Kontakt3.php on line 57

                Das ist die Zeile, wo der erste additional header steht (siehe unten).
                Und das Script sieht mittlerweile so aus (die zwei "elseif(str_replace..."-strings sind noch Versuchselemente zur Absicherung):
                <?php

                $mail_to="jesus.en.el.centro@web.de";

                $from_name=$_POST['fromname'];
                $from_mail=strtolower($_POST['frommail']);
                $mail_subject=$_POST['mailsubject'];
                $mail_text=$_POST['mailtext'];
                $send=$_POST['s'];

                if(trim($from_name)=="") $err_text.="Bitte gib Deinen Namen an.<br>";
                elseif(str_replace($from_name)==";". ",". "cc". "bcc") $err_text.="Bitte gib Deinen Namen <b>ohne Komma</b> an.<br>";
                if(trim($from_mail)=="") $err_text.="Bitte gib Deine E-Mail-Adresse an. Hast Du keine E-Mail-Adresse, gib bitte &bdquo;beispiel@email.de&ldquo; an.<br>";
                elseif(str_replace($from_mail)==";". ",". "cc". "bcc") $err_text.="Bitte gib nur <b>eine</b> E-Mail-Adresse an.<br>";
                elseif(!ereg("[1]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,6})$", $from_mail))
                    $err_text.="Bitte gib eine g&uuml;ltige E-Mail-Adresse an.<br>";
                if(trim($mail_subject)=="") $err_text.="Bitte gib einen Betreff ein.<br>";
                if(trim($mail_text)=="") $err_text.="Bitte gib einen Nachrichtentext ein.<br>";

                if(strlen($mail_text)>1000) {
                  $mail_text=substr($mail_text,0,1000)."... (Text wurde gek&uuml;rzt!)";
                }
                $from_name=str_replace(chr(34),"''",$from_name);
                $mail_subject=str_replace(chr(34),"''",$mail_subject);
                $from_name=stripslashes($from_name);
                $from_mail=stripslashes($from_mail);
                $mail_subject=stripslashes($mail_subject);
                $mail_text=stripslashes($mail_text);

                if(($send=="1") && (isset($err_text))) {
                  echo "<p class="fehler"><b>Fehler:</b><br>\n";
                  echo "$err_text</p>";
                }
                if(($send!="1") || (isset($err_text)))
                {
                } else {
                  $header = '';
                    if(!empty($from_name)) $header .= "From: $from_name <$from_mail>\n" . str_replace(";", ",", "cc", "bcc") . "\n";
                    if(!empty($from_mail)) $header .= "Reply-to: $from_mail\n" . str_replace(";", ",", "cc", "bcc") . "\n";
                  $header.="X-Mailer: PHP-FormMailer\n";
                  $header.="Content-Type: text/plain";
                  $mail_date=gmdate("D, d M Y H:i:s")." +0000";
                  $send=0;
                  if(@mail($mail_to,$mail_subject,$mail_text,$header[ 1]))
                  {
                  header ("location: http://www.jesus-christus-zentrum.de/web/Danke.html");
                  }
                  else
                  {
                    echo "<p><b>Beim Versenden der E-Mail ist ein Fehler aufgetreten!</b></p>";
                    echo "<p><a href="".$_SERVER['PHP_SELF']."?from_name=$from_name&from_mail=$from_mail&mail_subject=$mail_subject&mail_text=";
                    echo urlencode($mail_text)."">Zur&uuml;ck zum Formular</a></p>";
                  }
                  if($_POST['kopie'] == "1");
                  {
                  $text="Hallo $from_name, vielen Dank für Deinen Besuch auf meiner Homepage!\nFolgende Nachricht ist bei mir eingegangen:\n---------------------------------------------\nIhr Name:       $from_name\nIhre Email:     $from_mail\nIhr Betreff:    $mail_subject\nNachricht: $mail_text\n---------------------------------------------\nSo bald ich kann, werde ich sie beantworten.\n\nMit freundlichem Gruß,\nBernhard"
                  $additional_headers="From: Bernhard jesus.en.el.centro@web.de\r\n";
                  $additional_headers.="Reply-To: jesus.en.el.centro@web.de\r\n";
                  $additional_headers.="X-Mailer: PHP-FormMailer\n";
                  $additional_headers.="Content-Type: text/plain";
                  mail($from_mail, "Re: $mail_subject", $text, $additional_headers)
                  }
                }
                ?>


                1. _a-z0-9- ↩︎

                1. Hallo,

                  Parse error: parse error, unexpected T_VARIABLE in /homepages/36/d190080444/htdocs/Kontakt3.php on line 57
                  Das ist die Zeile, wo der erste additional header steht (siehe unten).

                  welche genau? Ich blick bei deinem Gewurschtl nämlich nicht mehr durch.

                  elseif(str_replace($from_name)==";". ",". "cc". "bcc") $err_text.="Bitte gib Deinen Namen <b>ohne Komma</b> an.<br>";

                  Spätestens hier müsste der PHP-Parser schon ganz böse schimpfen, wenn er nicht schon vorher wegen des erwähnten Parse Error abgebrochen hätte. Die Funktion str_replace() erwartet mindestens drei Paramter! Was du von str_replace() erwartest, wenn du nur einen Parameter übergibst, ist mir schleierhaft; ebenso, warum du diesen ominösen Rückgabewert dann mit dem String ";,ccbcc" vergleichen willst.

                  elseif(str_replace($from_mail)==";". ",". "cc". "bcc") $err_text.="Bitte gib nur <b>eine</b> E-Mail-Adresse an.<br>";

                  Siehe oben.

                  if(strlen($mail_text)>1000) {
                    $mail_text=substr($mail_text,0,1000)."... (Text wurde gek&uuml;rzt!)";

                  Das &uuml; macht sich nachher bestimmt prima in der fertigen Nachricht. Immerhin willst du die Nachricht als text/plain verschicken, was ja auch vernünftig ist.

                  $from_name=str_replace(chr(34),"''",$from_name);
                  $mail_subject=str_replace(chr(34),"''",$mail_subject);
                  $from_name=stripslashes($from_name);
                  $from_mail=stripslashes($from_mail);
                  $mail_subject=stripslashes($mail_subject);
                  $mail_text=stripslashes($mail_text);

                  Über Sinn und Unsinn dieser Anweisungen lässt sich streiten - ich halte sie für Unsinn.

                  $header = '';
                      if(!empty($from_name)) $header .= "From: $from_name <$from_mail>\n" . str_replace(";", ",", "cc", "bcc") . "\n";
                      if(!empty($from_mail)) $header .= "Reply-to: $from_mail\n" . str_replace(";", ",", "cc", "bcc") . "\n";

                  Du hast doch weiter oben schon ausgeschlossen, dass $from_name und $from_mail leere Strings sind. Das bräuchtest du hier nicht nochmal zu prüfen. Abgesehen davon hast du nochmal dieselbe falsche Verwendung von str_replace() drin. Und der korekte Zeilenumbruch in Mail-Headern ist \r\n.
                  Da du $from_name und $from_mail nicht ausreichend überprüft hast, kann ich hier mühelos zusätzliche Headerzeilen einschleusen und die Nachricht damit an Hunderte von Empfängern verschicken.

                  $header.="X-Mailer: PHP-FormMailer\n";

                  Wenn du diese Angabe für wichtig hältst ... ;-)

                  $header.="Content-Type: text/plain";
                    $mail_date=gmdate("D, d M Y H:i:s")." +0000";

                  Wo verwendest du $mail_date wieder? Ah, gar nicht. Okay, das ist zumindest nicht schädlich. ;-)

                  $send=0;
                    if(@mail($mail_to,$mail_subject,$mail_text,$header[ 1]))

                  Hoppla - eben war $header noch ein String, wieso ist es jetzt plötzlich ein Array?

                  if($_POST['kopie'] == "1");
                    {
                    $text="Hallo $from_name, vielen Dank für Deinen Besuch auf meiner Homepage!\nFolgende Nachricht ist bei mir eingegangen:\n---------------------------------------------\nIhr Name:       $from_name\nIhre Email:     $from_mail\nIhr Betreff:    $mail_subject\nNachricht: $mail_text\n---------------------------------------------\nSo bald ich kann, werde ich sie beantworten.\n\nMit freundlichem Gruß,\nBernhard"

                  Hier fehlt das abschließende Semikolon. Ist das die Stelle, die du eingangs gemeint hast (der Parse Error in Zeile 57)?

                  $additional_headers="From: Bernhard jesus.en.el.centro@web.de\r\n";
                    $additional_headers.="Reply-To: jesus.en.el.centro@web.de\r\n";
                    $additional_headers.="X-Mailer: PHP-FormMailer\n";
                    $additional_headers.="Content-Type: text/plain";
                    mail($from_mail, "Re: $mail_subject", $text, $additional_headers)

                  Alles in allem scheint mir, dass dir auch noch eine Menge Grundlagenwissen fehlt, und dass du eher zufällig zu funktionierenden Scriptlösungen kommst. Warum gibst du dir nicht einen Ruck und beschäftigst dich mal ein wenig mit den Basics, bevor du dich an anspruchsvolle Aufgaben heranwagst?

                  So long,
                   Martin

                  --
                  Der Mensch denkt, Gott lenkt.
                  Der Mensch dachte, Gott lachte.
                2. Hi!

                  Der Martin hat dir ja bereits einiges zu deinem Code geschrieben.
                  Dann will ich jetzt noch mal Anmerkungen zu anderen Teilen machen:

                  $from_name=$_POST['fromname'];
                  $from_mail=strtolower($_POST['frommail']);
                  $mail_subject=$_POST['mailsubject'];
                  $mail_text=$_POST['mailtext'];
                  $send=$_POST['s'];

                  Warum kopierst du diese Werte noch mal in neue Variablen?
                  Das ist völlig unnötig. Du kannst mit den $_POST-Variablen weiterarbeiten.
                  Warum wendest du strtolower() auf $_POST['frommail'] an?
                  Da ist doch bestimmt die Absendermailadresse drin enthalten, oder?
                  Emailadressen sind potentiell casesensitive. Auch wenn die Groß- und Kleinschreibung meist keine Rolle spielt, solltest du da besser nichts dran drehen...

                  elseif(!ereg("[1]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,6})$", $from_mail))

                  Ich würde davon abraten, die regulären Ausdrücke nach POSIX zu verwenden.
                  Arbeite besser mit den PCRE regulären Ausdrücken.
                  D.h.: Nutze nicht die ereg_-Funktionen, sondern verwende die preg_-Funktionen.
                  In deinem Fall preg_match() statt ereg().
                  Diese Funktionen arbeiten um einiges schneller.

                  if(strlen($mail_text)>1000) {
                    $mail_text=substr($mail_text,0,1000)."... (Text wurde gek&uuml;rzt!)";
                  }

                  Was soll das denn?
                  Wenn die Mail mehr als 1000 Zeichen enthält, dann läßt du den Rest einfach weg? Warum tust du das?
                  Und dem User teilst du das ja nicht einmal mit. Welchen Sinn macht das?
                  1000 Zeichen sind ja nicht gerade viel...

                  $header.="X-Mailer: PHP-FormMailer\n";

                  Nun ja... Über den Sinn davon läßt sich streiten...
                  Wenn du schon mitteilen möchtest, wer die Mail verschickt hat, dann könntest du auch noch die PHP-Version einfügen...
                  $header.="X-Mailer: PHP/" . phpversion() . "\r\n";

                  Die Headerzeile ist außerdem falsch abgetrennt. Es sollte \r\n statt \n sein.
                  Nur wenn es mit \r\n Probleme geben sollte, solltest du das ändern.
                  Laut dem SMTP-RFC ist \r\n erforderlich und \n ist falsch.
                  Leider hatte ich in letzter Zeit mal Probleme mit \r\n, wenn ich Mails mit PHP verschickt habe und postfix als MTA zum Einsatz kam.
                  Ich wollte immer mal testen, woran das Problem genau liegt... Jedenfalls wurde da ab und zu eine unschöne Ersetzung von PHP oder postfix durchgeführt.
                  Aber egal: tut jetzt nicht zur Sache... Nutze \r\n!

                  $header.="Content-Type: text/plain";

                  Schön, daß du den Content-Type angibst, aber du solltest auch noch eine Charset-Angabe machen.
                  Wenn du Umlaute/Sonderzeichen in den Mails verwenden willst, sollte der verwendete Zeichensatz unbedingt genannt werden, z.B.:
                  $header .= 'MIME-Version: 1.0' . "\r\n";
                  $header .= 'Content-type: text/html; charset=iso-8859-15' . "\r\n";

                  (Dabei aber nicht einfach irgendeinen Zeichensatz wählen, der dir gerade gefällt, sondern der wirklich verwendete!)

                  if(@mail($mail_to,$mail_subject,$mail_text,$header[ 1]))

                  Was soll denn das $header[ 1]?
                  Das Leerzeichen dort verstehe ich nicht und $header ist doch kein Array...
                  Was willst du damit bezwecken?

                  header ("location: http://www.jesus-christus-zentrum.de/web/Danke.html");

                  Hier sollte ein exit; folgen, damit eventuell nachfolgender Code nicht ausgeführt wird, falls ein Client der Umleitung nicht folgt.

                  echo "<p><a href="".$_SERVER['PHP_SELF']."?from_name=$from_name&from_mail=$from_mail&mail_subject=$mail_subject&mail_text=";
                      echo urlencode($mail_text)."">Zur&uuml;ck zum Formular</a></p>";

                  Sonderzeichen, die in HTML eine Bedeutung haben, müssen zwingend maskiert werden. Statt & mußt du also &amp; schreiben.
                  Ich kenne den Rest deiner Seite ja nicht...
                  Aber was du dort mit dem Link veranstaltest, sieht ziemlich gewagt aus. Wieso hängst du den gesamten Mailtext an den URL und übergibst ihn an deine Seite?

                  Hast du dir eigentlich mal eine dieser Mails in deinem Mailclient angesehen?
                  Ich weiß nicht, ob du es bereits mal geschafft hast, mit deinem Script eine Mail zu verschicken. Aber wenn dem so ist, dann schau sie dir mal - samt aller Headerzeilen - in deinem Mailclient an.

                  Schöner Gruß,
                  rob


                  1. _a-z0-9- ↩︎

                  1. Hi,

                    Vielen vielen Dank für eure Tips. Ehrlich. Aber ich bin mittlerweile auf ein anderes Formular "umgestiegen", weil ich gemerkt habe, daß so nicht weiter komme.
                    Und nach stundenlanger Sucherei bin ich dann auf dieses Formular gestoßen:

                    http://dislabs.de/index.php?ac=labor&sub=5&id=16

                    Und ich glaub, daß dieses das das sicherste Kontaktformular ist, was es momentan gibt.
                    Ach, und wenn wir schon mal bei der Lobhudelei sind... Ich bin wirklich froh, daß es so ein Forum gibt wie dieses hier.

                    Gruß, Bernhard

                    1. Hi!

                      http://dislabs.de/index.php?ac=labor&sub=5&id=16
                      Und ich glaub, daß dieses das das sicherste Kontaktformular ist, was es momentan gibt.

                      Das glaube ich zwar nicht, aber es werden einige Prüfungen durchgeführt und eventuell gefährliche Daten bereinigt.

                      Aber ich sehe trotzdem bei diesem Script einiges, was ich verbessern würde:

                      if ( (!(eregi('[1]+@[a-z0-9_-]+.[a-z0-9_.-]+$',$email))) && (strlen($email)>0) || $email=="")

                      Statt mit eregi() würde ich mit preg_match() arbeiten, da dieses deutlich schneller arbeitet.
                      Und der reguläre Ausruck gefällt mir auch nicht so wirklich. Da solltest du vielleicht besser den einsetzen, den du vorher schon genutzt hast.

                      Content-Type: text/html; charset=ISO-8859-1;";

                      Das Script versendet HTML-Mails anstelle von reinem Text.
                      Ich würde das ändern. Aber vielleicht bevorzugst du ja HTML-Mails...

                      $pagename="formmailer.php";
                      header("Location:$pagename?success");

                      Der Location-Header benötigt einen vollständigen URL (mit http://), was hier nicht der Fall ist.

                      Ich habe allerdings nur einen kurzen Blick auf den Code geworfen, der auf der Website gezeigt wird. Die eigentlichen Dateien habe ich mir nicht runtergeladen. Eventuell wurde da noch was geändert, wenn ich mir die Kommentare so anschaue...

                      Aber nun ja...
                      Jetzt funktioniert alles bei dir? Keine Probleme mehr?

                      Schöner Gruß,
                      rob


                      1. a-z0-9_.- ↩︎

                      1. Jetzt funktioniert alles bei dir? Keine Probleme mehr?

                        Ja, es funktioniert. :) Alles gut. Vielen Dank.

                        Gruß, Bernhard

                  2. Ach ja. Und wie ich das bei dem Formular mit der Checkbox mache muß ich erstmal sehen.

                    Gute Nacht

        2. ..."Hallo $from_name, vielen Dank für Deinen Besuch auf meiner Homepage!

          Folgende Nachricht ist bei mir eingegangen:
          usw.

          PHP interpretiert in einem String nicht nur \n als Zeilenumbruch, sondern einen >"richtigen" Zeilenumbruch auch, sofern er eindeutig zum String gehört.

          Bist du dir da sicher, Rato? Bei mir nämlich noch nicht.
          Wenn ich das so mache, bekomme ich eine Fehlermeldung von Server.

          Ich hab nun ein additional_header eingebaut. Das sieht dann so aus:

          $additional_headers.="From: Bernhard <$mail_to>\n". "Reply-To: $mail_to\n"
            mail($from_mail, "Re: $mail_subject", "Hallo $from_name, vielen Dank für Deinen Besuch auf meiner Homepage!\nFolgende Nachricht ist bei mir eingegangen:\n---------------------------------------------\nIhr Name:       $from_name\nIhre Email:     $from_mail\nIhr Betreff:    $mail_subject\nNachricht: $mail_text\n---------------------------------------------\nSo bald ich kann, werde ich sie beantworten.\n\nMit freundlichem Gruß,\nBernhard", $additional_headers)

        3. Ich bekomme aber eine Fehlermeldung vom Server, daß ich in der mail()-Zeile einen falschen String dring habe.

  2. Hallo Bernhard,

    if($kopie=="1")  /*Zur Erklärung: $kopie=$_POST['kopie']*/

    wozu dieses Umkopieren von Variableninhalten?

    {          /*$from_mail ist die in's entsprechende Inputfeld eingetragene Emailadresse*/

    Ungeprüft?

    mail($from_mail,$header,"Hallo $from_name, vielen Dank für Deinen Besuch auf meiner Homepage!\n", ...

    und was steht in $header? Jedenfalls würde das von mail() als Subject genommen, und der Hallo-Text als Nachrichteninhalt. Aber mail() wird Probleme darin sehen, den gesamten nachfolgenden Text

    "---------------------------------------------\n",
    "Folgende Nachricht ist bei mir eingegangen:\n",
    "Ihr Name:       $from_name\n",
    "Ihre Email:     $from_mail\n",
    "Ihr Betreff:    $mail_subject\n",
    "Ihre Nachricht: $mail_text\n",
    "---------------------------------------------\n",
    "So bald ich kann, werde ich sie beantworten.\n\n",

    "Mit freundlichem Gruß,\n",
    "Bernhard"

    als brauchbare "additional headers" zu verwenden, und wahrscheinlich schlägt deshalb der Versand fehl.

    Übrigens hast du da eine nette Spamschleuder gebaut, denn ich kann ja jede beliebige Adresse als Absenderadresse eintragen und so beliebige Leute mit Mails belästigen, die -technisch gesehen- von dir bzw. deinem Webserver kommen.
    Das mit dem "Kopie an Absender" ist genau aus diesem Grund eine problematische Sache.

    Getestet hab ich's mit meiner eigenen Emailadresse. Aber ich bekomme keine Kopie der Nachricht. Lediglich nur die Hauptnachricht.

    Aha. Dann scheint da der Aufruf von mail() korrekt zu sein, aber die Stelle hast du uns nicht gezeigt. Vergleiche die beiden Stellen noch einmal genau, und ziehe dabei auch das Manual zu Rate.

    Schönes Wochenende auch,
     Martin

    --
    Wissen erwirbt man, indem man immer das Kleingedruckte sorgfältig liest.
    Erfahrung bekommt man, indem man das nicht tut.
  3. mail($from_mail,$header,"Hallo $from_name, vielen Dank für Deinen Besuch auf meiner Homepage!\n",
    "---------------------------------------------\n",
    "Folgende Nachricht ist bei mir eingegangen:\n",
    "Ihr Name:       $from_name\n",
    "Ihre Email:     $from_mail\n",
    "Ihr Betreff:    $mail_subject\n",
    "Ihre Nachricht: $mail_text\n",
    "---------------------------------------------\n",
    "So bald ich kann, werde ich sie beantworten.\n\n",

    "Mit freundlichem Gruß,\n",
    "Bernhard");

    Bei deinem dritten Parameter für mail: Der Verknüpfungsoperator ist '.', nicht ','! Weiters hast du das eher umständlich gelöst. Am Ende jeder Zeile fügst du mit \n einen Zeilenumbruch ein, nur um dann denn String zu beenden und in der nächsten Zeile einen weiteren String anzuhängen. Machs einfach so:

    "Hallo $from_name, vielen Dank für Deinen Besuch auf meiner Homepage!
    ---------------------------------------------
    Folgende Nachricht ist bei mir eingegangen:
    usw.

    PHP interpretiert in einem String nicht nur \n als Zeilenumbruch, sondern einen "richtigen" Zeilenumbruch auch, sofern er eindeutig zum String gehört.

    mfg
    Rato

    --
    §§§
    Meine Postings basieren lediglich auf mein Wissen und können völliger Blödsinn sein.
    §§§