Bernhard unreg: Wenn Checkbox an, Kopie an Absender. Funktioniert aber nicht!

Hi Leute,

Nachdem ich nun auf ein anderes Script für mein Kontaktformular "umgestiegen" bin, versuche ich schon die ganze Zeit die Checkbox-Funktion zum laufen zu bringen (siehe Titel dieses Postes). Bei dem was ich bisher gelernt habe, ist nun folgendes Ergebnis rausgekommen:

<?php
[...]
        //Mail komponieren
        $mailheader="From: formular@jesus-christus-zentrum.de\r\n";
        $mailheader.="CX-Sender-IP: ".$_SERVER['REMOTE_ADDR']."\r\n";
        $mailheader.="Content-Type: text/html; charset=ISO-8859-1\r\n";
        $message=nl2br("Name: $name\nEmail: $email\n\n$message");
        $subject="$betreff ";
        if (@mail($empfaenger, $subject, $message, $mailheader));

if(isset($_POST['kopie'])) {         //Name der Checkbox ist "kopie", value="ja"
$kopieheader="From: $empfaenger\r\n";
$kopieheader.="Reply-To: $empfaenger\r\n";
$kopieheader.="X-Mailer: PHP/" . phpversion(). "\r\n";
$kopieheader.="X-Sender-IP: ".$_SERVER['REMOTE_ADDR']."\r\n";
$kopieheader.="Content-Type: text/html; charset=ISO-8859-1\r\n";

$text="Hallo $name!\n";
$text.="Mit dieser Email erh&auml;ltst Du eine Kopie der Nachricht, die Du mir &uuml;ber das Kontaktformular auf $pagename gesendest hast.\n";
$text.="Und dies ist ihr Inhalt:\n------------\nName: $name\nEmail: $email\n\n";
$text.="$message\n-----------\nLieben Gruß, Bernhard";
mail($email, $subject, $text, $kopieheader)
{         //<-------------Das ist Zeile 95---------------->
            //Alles ok, Seite neuladen (Reloadsperre)
            header("Location:$pagename?success");   //$pagename ist eine absolute URL
[...]
?>

Aber trotzdem bekomme ich immer wieder diese Fehlermeldung vom Sever:

Parse error: parse error, unexpected '{' in /homepages/36/d190080444/htdocs/Kontakt3.php on line 95

Zeile 95 ist oben angezeigt.
Ich weiß wirklich nicht wo das Problem ist. Kann mir da bitte jemand helfen?

Gruß, Bernhard

  1. Hi Leute,

    Nachdem ich nun auf ein anderes Script für mein Kontaktformular "umgestiegen" bin, versuche ich schon die ganze Zeit die Checkbox-Funktion zum laufen zu bringen (siehe Titel dieses Postes). Bei dem was ich bisher gelernt habe, ist nun folgendes Ergebnis rausgekommen:

    <?php
    [...]
            //Mail komponieren
            $mailheader="From: formular@jesus-christus-zentrum.de\r\n";
            $mailheader.="CX-Sender-IP: ".$_SERVER['REMOTE_ADDR']."\r\n";
            $mailheader.="Content-Type: text/html; charset=ISO-8859-1\r\n";
            $message=nl2br("Name: $name\nEmail: $email\n\n$message");

    Das ergibt, wenn ich das richtig sehe, eine laaaaaaaaaaange Zeile in der Mail. Unschön. Vergleiche das RFC bzgl. Zeilenlängen in E-Mails.

    $subject="$betreff ";
            if (@mail($empfaenger, $subject, $message, $mailheader));

    if(isset($_POST['kopie'])) {         //Name der Checkbox ist "kopie", value="ja"

    Einrücken würde der Übersichtlichkeit des Codes gut tun... :-)

    $kopieheader="From: $empfaenger\r\n";
    $kopieheader.="Reply-To: $empfaenger\r\n";
    $kopieheader.="X-Mailer: PHP/" . phpversion(). "\r\n";
    $kopieheader.="X-Sender-IP: ".$_SERVER['REMOTE_ADDR']."\r\n";
    $kopieheader.="Content-Type: text/html; charset=ISO-8859-1\r\n";

    $text="Hallo $name!\n";
    $text.="Mit dieser Email erh&auml;ltst Du eine Kopie der Nachricht, die Du mir &uuml;ber das Kontaktformular auf $pagename gesendest hast.\n";
    $text.="Und dies ist ihr Inhalt:\n------------\nName: $name\nEmail: $email\n\n";
    $text.="$message\n-----------\nLieben Gruß, Bernhard";
    mail($email, $subject, $text, $kopieheader)
    {         //<-------------Das ist Zeile 95---------------->
                //Alles ok, Seite neuladen (Reloadsperre)
                header("Location:$pagename?success");   //$pagename ist eine absolute URL
    [...]
    ?>

    Aber trotzdem bekomme ich immer wieder diese Fehlermeldung vom Sever:

    Parse error: parse error, unexpected '{' in /homepages/36/d190080444/htdocs/Kontakt3.php on line 95

    Zeile 95 ist oben angezeigt.
    Ich weiß wirklich nicht wo das Problem ist. Kann mir da bitte jemand helfen?

    Welche Zeile genau ist Zeile 95? Ah, da...

    Der Parser sagt Dir, daß er da eine Klammer findet, die er nicht erwartet. Was macht die da, einsam und allein in Zeile 95?
    Und dem mail-Kommando vorher fehlt wohl ein Semikolon.

    Nick

    --
    --------------------------------------------------
    http://www.xilp.eu
    XILP Internet Links People
    Dein persoenliches privates Netzwerk
    aus Freunden, Verwandten, Bekannten und Kollegen.
    --------------------------------------------------
    1. Hallo,

      $message=nl2br("Name: $name\nEmail: $email\n\n$message");

      Das ergibt, wenn ich das richtig sehe, eine laaaaaaaaaaange Zeile in der Mail.

      nein, nur wenn $message schon vorher ein langer String ohne Zeilenumbrüche war. Denn auch wenn der Name das unterstellt, _ersetzt_ nl2br() ja nicht die Zeilenumbrüche durch "<br />", sondern _ergänzt_ sie. Die \n oder \r\n im String bleiben bestehen.

      So long,
       Martin

      --
      Die Zeit, die man zur Fertigstellung eines Projekts wirklich braucht, ist immer mindestens doppelt so lang wie geplant.
      Wurde dieser Umstand bei der Planung bereits berücksichtigt, gilt das Prinzip der Rekursion.
  2. Hallo,

    mail($email, $subject, $text, $kopieheader)
    {         //<-------------Das ist Zeile 95---------------->
                //Alles ok, Seite neuladen (Reloadsperre)
    Aber trotzdem bekomme ich immer wieder diese Fehlermeldung vom Sever:
    Parse error: parse error, unexpected '{' in /homepages/36/d190080444/htdocs/Kontakt3.php on line 95
    Ich weiß wirklich nicht wo das Problem ist.

    wieso nicht? Steht doch im Klartext da: In Zeile 95 taucht plötzlich ein '{' (öffnende geschweifte Klammer) auf, das der Parser dort nicht erwartet.
    Erstens fehlt das abschließende Semikolon nach dem Aufruf von mail(), so dass diese Anweisung noch nicht "beendet" ist. Also lautet deine Anweisung vereinfacht

    mail(...) {

    Zweitens ist mir nicht klar, welchen Sinn das haben soll. Mit '{' beginnst du einen neuen Block innerhalb des Programms, etwa nach Strukturanweisungen wie if, while, switch und ähnlichen. Was hast du vor, wenn du einfach mitten im Code ein '{' einstreust?

    Have a nice day,
     Martin

    --
    Gültig sind Frauen ab 16, wohlgeformt ab 160 Pfund.
      (Gunnar Bittersmann)
  3. hi,

    Nachdem ich nun auf ein anderes Script für mein Kontaktformular "umgestiegen" bin,

    ... hampelst du trotzdem immer noch an der gleichen Problematik rum.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  4. //Mail komponieren

    Bittebitte, im Deutschen komponiert man Lieder, Opern und dergleichen, vielleicht noch ein Fünf-Gänge-Menü, aber keinen Brief. Briefe werden verfasst oder geschrieben. Ist nicht der Fehler, aber so ein Denglisch-Schwachsinn muss trotzdem nicht sein.

    $mailheader="From: formular@jesus-christus-zentrum.de\r\n";
            $mailheader.="CX-Sender-IP: ".$_SERVER['REMOTE_ADDR']."\r\n";

    X-Sender-IP, nicht CX-Sender-IP (ist auch nicht der Fehler).

    $mailheader.="Content-Type: text/html; charset=ISO-8859-1\r\n";
            $message=nl2br("Name: $name\nEmail: $email\n\n$message");
            $subject="$betreff ";

    Sofern $betreff nicht außerhalb des zitierten Codes entschärft wird, namentlich enthaltene Zeilenumbrüche, hast du an dieser Stelle wahrscheinlich Spammern Tür und Tor geöffnet.

    if (@mail($empfaenger, $subject, $message, $mailheader));

    Überlege dir mal, welchen Sinn die if-Abfrage hier hat.

    Mit @ Fehlermeldungen zu unterdrücken, ist davon unabhängig überaus unklug, denn Fehlermeldungen sind als Hilfe gedacht. Dass du sie nicht dem Benutzer präsentieren möchtest, ist vollkommen richtig, den gehen sie nämlich nichts an, aber dafür ist die Einstellung ini.display_errors gedacht.

    mail($email, $subject, $text, $kopieheader)
    {         //<-------------Das ist Zeile 95---------------->

    Parse error: parse error, unexpected '{' in /homepages/36/d190080444/htdocs/Kontakt3.php on line 95

    Ich weiß wirklich nicht wo das Problem ist. Kann mir da bitte jemand helfen?

    Steht doch da: Die geschweifte Klammer hat an der Stelle nichts zu suchen, was auch nur verständlich ist, da geschweifte Klammern Codeblöcke im Anschluss an bedingte Verzweigungen (if & Co.) umfassen. Dieser Fehler hängt sicher mit der verwaisten if-Abfrage von oben zusammen.

  5. Also. Kleine Fehler, große Wirkung. Die Fehler waren, daß ich hinter "exit;" vergessen hatte eine schließende geschweifte Klammer hinzusetzten. Und natürlich auch das eine Semikolon.

    Aber kaum hat man ein Problem gelöst, taucht auch schon das nächste auf.
    Denn wenn ich auf den submit-Button klicke, erscheint die Fehlermeldung, ich hätte ein ungültige Email-Adresse eingegeben. Ich hab aber eine gültige, nämilich meine eigene, Email-Adresse eingegeben. Und trotzdem die Fehlermeldung.

    1. hi,

      Aber kaum hat man ein Problem gelöst, taucht auch schon das nächste auf.

      Erwartest du jetzt geheucheltes Erstaunen, oder ...?

      Denn wenn ich auf den submit-Button klicke, erscheint die Fehlermeldung, ich hätte ein ungültige Email-Adresse eingegeben.

      Das interessiert den PHP-Parser herzlich wenig - also muss es sich wohl um eine von dir im Script selber vorgenommene Prüfung handeln -

      Ich hab aber eine gültige, nämilich meine eigene, Email-Adresse eingegeben. Und trotzdem die Fehlermeldung.

      • und diese Prüfung wird wohl fehlerhaft sein.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. »» Erwartest du jetzt geheucheltes Erstaunen, oder ...?

        :-) Ne. Wollte einfach nur ne passende Überleitung schaffen.

        »»Das interessiert den PHP-Parser herzlich wenig - also muss es sich wohl um eine »»von dir im Script selber vorgenommene Prüfung handeln -

        • und diese Prüfung wird wohl fehlerhaft sein.

        Ja, die Email-Adressprüfung war fehlerhaft. Das Zeichen ">" hatte bei "if...(strlen($email)<0)" nichts zu suchen.

        Gruß, Bernhard