Claudia: Kontaktformular wordwrap

Hi,
würde mich nun gerne mit dem wordwrap befassen:
Ist das so richtig?

<?php

urlencode ($nachricht);
$nachricht=str_replace("\r","\n",$nachricht);

$nameeingabe = wordwrap($nameeingabe, 70);
$email = wordwrap($email, 70);
$nachricht = wordwrap($nachricht, 70);

$nameeingabe = preg_replace('/[\<>.$?"\n]/', '', $nameeingabe);
$email = preg_replace('/[\<>$?"\n]/', '', $email);
$nachricht = preg_replace('/[\<>.$?"]/', '', $nachricht);

$empfaenger = "meinname@meinedomain.de";

$betreff = "Formular: Nachricht von " . $nameeingabe;

$nachrichtgesamt = "$nameeingabe machte folgende Angaben im Formular:\n\n";
$nachrichtgesamt.= "------------------------\n";
$nachrichtgesamt.= "Name:      $nameeingabe\n";
$nachrichtgesamt.= "E-Mail:    $email\n";
$nachrichtgesamt.= "Nachricht: $nachricht\n";
$nachrichtgesamt.= "------------------------\n";

mail( $empfaenger, $betreff, $nachrichtgesamt, "From: $nameeingabe <$email>" );

?>

  1. Nabend,

    würde mich nun gerne mit dem wordwrap befassen:
    Ist das so richtig?

    Mal sehen.

    $nameeingabe = wordwrap($nameeingabe, 70);
    $email = wordwrap($email, 70);
    $nachricht = wordwrap($nachricht, 70);

    Fuer mich siehts so aus, als wuerdest du nach ungefaehr 70 Zeichen ein \n einfuegen wollen. Soll es das machen?

    Falls ja: Welchen Sinn hat es eine (lange) Mailadresse nach 70 Zeichen umzubrechen? Falls Das ueberhaupt Sinn macht und eine Mailadresse fuer Wordwrap nicht sowieso nur ein Wort ist. Auch beim Namen sehe ich da keinen Bedarf fuer einen Umbruch. Oder doch?

    1. Fuer mich siehts so aus, als wuerdest du nach ungefaehr 70 Zeichen ein \n einfuegen wollen. Soll es das machen?

      Falls ja: Welchen Sinn hat es eine (lange) Mailadresse nach 70 Zeichen umzubrechen? Falls Das ueberhaupt Sinn macht und eine Mailadresse fuer Wordwrap nicht sowieso nur ein Wort ist. Auch beim Namen sehe ich da keinen Bedarf fuer einen Umbruch. Oder doch?

      »»

      Ne, ich wollte die Zeichenanzahl pro Zeile auf 70 Zeichen begrenzen.
      Habe ich bei php gelesen, daß man das so machen soll. Ich muß aber
      jetzt auch feststellen, daß mehr als 70 Zeichen übertragen werden.
      Wieso dann überhaupt das ganze begrenzen? *Grübel*

      1. Hallo

        Ne, ich wollte die Zeichenanzahl pro Zeile auf 70 Zeichen begrenzen.
        Habe ich bei php gelesen, daß man das so machen soll. Ich muß aber
        jetzt auch feststellen, daß mehr als 70 Zeichen übertragen werden.
        Wieso dann überhaupt das ganze begrenzen? *Grübel*

        jaaa. Das ist einfach ein Standardwert. Wordwrap ohne Parameter 'schneidet' nach 75 Zeichen ab. Das ist die ungefaehre Breite einer Standard E-Mail. Dafuer ist das haupstsaechlich da. Wenn Du nach genau 70 Zeilen einen Umbruch (oder was immer) haben willst musst Du nen Parameter fuer Cut uebergeben. WordWrap

        Auf Zeichen begrenzen kannst Du schonmal in den Inputfeldern. Da das aber keine zuverlaessige Sache ist, solltest Du es Serverseitig nochmal durchfuehren. (Falls es ueberhaupt Sinn macht) Das koennte man mit subStr erledigen.

  2. Hi!

    würde mich nun gerne mit dem wordwrap befassen:
    Ist das so richtig?

    Kennst du das PHP-Handbuch nicht?
    Da man dir schon oft genug Links darauf gepostet hat, sollte es dir eigentlich bekannt sein.
    Natürlich ist dort auch die Funktion wordwrap() beschrieben.

    urlencode ($nachricht);

    In $nachricht steht doch wohl sicherlich der Text der Email drin, oder?
    Und du übergibst deine Werte per POST. (Das war doch das Flashformular, oder?)
    Warum kodierst du diese Daten jetzt hier?
    Dir ist klar, was die Funktion urlencode() macht?

    $nachricht=str_replace("\r","\n",$nachricht);

    Und was soll das?
    Zu den Zeilenumbrüchen habe ich dir ja auch bereits was geschrieben.
    Wenn du die alten Mac-Zeilenumbrüche hast, dann liegt ein \r vor.
    Hier würde die Ersetzung einen Sinn ergeben. Ich meine aber, mich erinnern zu können, daß kein Mac-Browser diesen Zeilenumbruch in HTML-Formularen gesendet hat.
    Wenn es sich um Windows-Zeilenumbrüche handelt, dann liegt \r\n vor.
    In diesem Fall würdest du daraus dann \n\n machen, was doppelte Zeilenumbrüche zur Folge hätte.

    $nameeingabe = wordwrap($nameeingabe, 70);

    Warum brichst du denn Namen um?
    Wie ich weiter unten im Code sehe, baust du den Namen im Betreff der Mail ein. Der Betreff kann bzw. darf gar keine Zeilenumbrüche enthalten.

    $email = wordwrap($email, 70);

    Und die Emailadresse übergibst du der mail()-Funktion bei als optionalen Parameter für zusätzliche Header.
    Email-Headerzeilen werden durch Zeilenumbrüche voneinander abgetrennt.
    Hier darf ebenfalls in keinem Fall ein Umbruch erfolgen.
    Davon abgesehen würde ich Emailadressen niemals umbrechen.
    Jede gute Mailclient macht Emailadressen klickbar. Das funktioniert nicht mehr, wenn ein Umbruch da drin wäre.

    $nachricht = wordwrap($nachricht, 70);

    Ja, hier ergibt der Einsatz der Funktion einen Sinn.

    mail( $empfaenger, $betreff, $nachrichtgesamt, "From: $nameeingabe <$email>" );

    Hast du dir mal die Syntax der Funktion mail() angesehen?
    Ich habe bereits geschrieben, daß du die zusätzlichen Header nutzen sollst, um z.B. die verwendete Zeichenkodierung anzugeben.
    Wenn du möchtest, daß Umlaute und Sonderzeichen später auch korrekt ankommen und nicht nur durch Zufall richtig angezeigt werden, muß man dem Mailclient mitteilen, welche Kodierung verwendet wurde.

    $header = "MIME-Version: 1.0\r\n";  
    $header.= "Content-Type: text/plain; charset=iso-8859-1\r\n";
    

    Liest du eigentlich, was die Leute dir schreiben?

    Schöner Gruß,
    rob

    1. Hi rob!
      ich kenne mich nicht so gut in php aus, ich mache nur das mailscript
      in php. :-)

      Vergessen wir das mal mit dem wordwrap.

      Warum kodierst du diese Daten jetzt hier?
      Dir ist klar, was die Funktion urlencode() macht?

      Nicht so richtig. Soll ichs lieber weglassen?

      Zu den Zeilenumbrüchen habe ich dir ja auch bereits was geschrieben.
      Wenn du die alten Mac-Zeilenumbrüche hast, dann liegt ein \r vor.
      Hier würde die Ersetzung einen Sinn ergeben.

      Flash macht Zeilenumbrüche in \r, deswegen hab ichs so gemacht. Ist
      das korrekt so?

      Wenn du möchtest, daß Umlaute und Sonderzeichen später auch korrekt ankommen und nicht nur durch Zufall richtig angezeigt werden, muß man dem Mailclient mitteilen, welche Kodierung verwendet wurde.

      $header = "MIME-Version: 1.0\r\n";

      $header.= "Content-Type: text/plain; charset=iso-8859-1\r\n";

        
      Habe ich nicht so richtig verstanden.
      
      1. Hi!

        Warum kodierst du diese Daten jetzt hier?
        Dir ist klar, was die Funktion urlencode() macht?

        Nicht so richtig. Soll ichs lieber weglassen?

        Was möchtest du denn mit dem Einsatz der Funktion bezwecken? Mir ist das nicht klar.
        Mir scheint es, als wäre die Funktion dort völlig fehl am Platze.
        Aber vielleicht hat das ja seinen Sinn.
        Warum setzt du die dort ein?

        Flash macht Zeilenumbrüche in \r, deswegen hab ichs so gemacht. Ist
        das korrekt so?

        Wenn Flash \r als Zeilenumbruch setzt, dann würde ich das auch durch \n ersetzen.
        Ich habe das allerdings noch nicht bemerkt. Hast du einen Link dazu, wo was darüber steht?

        $header = "MIME-Version: 1.0\r\n";

        $header.= "Content-Type: text/plain; charset=iso-8859-1\r\n";

        
        >   
        > Habe ich nicht so richtig verstanden.  
        
        Was hast du da "nicht so richtig verstanden"?  
        Wenn du dein Dokument speicherst, dann wird eine bestimmte [Zeichenkodierung](http://de.wikipedia.org/wiki/Zeichenkodierung) verwendet.  
        Dazu könnte einer der [ISO 8859](http://de.wikipedia.org/wiki/ISO_8859)-Charsets zum Einsatz kommen oder vielleicht auch [Unicode](http://de.wikipedia.org/wiki/Unicode) bzw. [UTF-8](http://de.wikipedia.org/wiki/UTF-8) oder anderes.  
        Du mußt den verwendeten Zeichensatz angeben. Andernfalls muß der Client raten. Umlaute/Sonderzeichen werden dadurch dann vermutlich falsch dargestellt.  
        Und wenn du nicht verstanden hast, wie das mit den Header in der Email funktioniert, dann schlage einfach nach. Die Wikipedia ist dafür immer ein guter Einstiegspunkt.  
        Im Artikel über [Email](http://de.wikipedia.org/wiki/E-Mail) findest du auch eine Erklärung zu den Headern.  
        Und wenn dir nicht klar ist, wie du diese zusätzlichen Header in deine Email rein bekommst, dann ließ einfach das Kapitel aus dem PHP-Handbuch zur Funktion [mail()](http://www.php.net/manual/de/function.mail.php).  
        Diesen Link habe ich jetzt bestimmt schon dreimal gepostet.  
        Dort wird alles erklärt. Dort findest du auch Code-Beispiele in den Kommentaren.  
        Wenn dir hier Leute Links raussuchen, dann hat das schon seinen Grund.  
        Dort findest du genau das, was du wissen mußt.  
          
        Schöner Gruß,  
        rob
        
        1. $header = "MIME-Version: 1.0\r\n";

          $header.= "Content-Type: text/plain; charset=iso-8859-1\r\n";

            
          So wie ich das jetzt gelesen habe, gilt das aber nur für  
          "html-E-Mails" oder?  
            
          Gruß
          
          1. Hi!

            $header = "MIME-Version: 1.0\r\n";

            $header.= "Content-Type: text/plain; charset=iso-8859-1\r\n";

              
            
            > So wie ich das jetzt gelesen habe, gilt das aber nur für  
            > "html-E-Mails" oder?  
            
            Nein. Als Content-Type ist text/plain angegeben und nicht text/html.  
            Aber unabhängig davon, ob du HTML- oder Textmails verschickst, mußt die Zeichenkodierung beachtet werden.  
              
            Schöner Gruß,  
            rob
            
        2. Guten Morgen! :-)

          Ich hab jetzt versucht alles umzusetzen mit dem Ergebnis, daß ich
          jetzt keine vollständige Mail mehr bekomme. :-(
          So sieht mein Mailscript jetzt aus:

          senden.php

          <?php

          $nachricht=str_replace("\r","\n",$nachricht);

          $nameeingabe = preg_replace('/[\<>.$?"\n]/', '', $nameeingabe);
          $email = preg_replace('/[\<>$?"\n]/', '', $email);
          $nachricht = preg_replace('/[\<>.$?"]/', '', $nachricht);

          $empfaenger = "meinname@meinedomain.de";
          $header = "From: $nameeingabe <$email>";
          $header.= "MIME-Version: 1.0\r\n";
          $header.= "Content-Type: text/plain; charset=iso-8859-1\r\n";

          $betreff = "Formular: Nachricht von $nameeingabe";

          $nachrichtgesamt = "$nameeingabe machte folgende Angaben im Formular:\n\n";
          $nachrichtgesamt.= "------------------------\n";
          $nachrichtgesamt.= "Name:      $nameeingabe\n";
          $nachrichtgesamt.= "E-Mail:    $email\n";
          $nachrichtgesamt.= "Nachricht: $nachricht\n";
          $nachrichtgesamt.= "------------------------\n";

          mail($empfaenger, $betreff, $nachrichtgesamt, $header);

          ?>

          1. Hi!

            Also erstmal möchte ich anmerken, daß das mit deinem Doppelposting ganz großer Mist ist.
            Jetzt gibt es die gleiche Frage hier zweimal im Forum.
            Und genau aus diesem Grund sollen Doppelpostings hier vermieden werden.
            In welchem Thread soll jetzt auf deine Frage geantwortet werden? In beiden?
            Leider sind die Antworten jetzt schon auf beide Threads verteilt.
            Wenn man jetzt einen davon als Doppelposting markiert und der Thread gesperrt wird, dann wäre das wirklich blöde, da in beiden Thread schon brauchbare Antworten und jeweils andere Infos/Problembeschreibungen zu finden sind.

            Ich hab jetzt versucht alles umzusetzen mit dem Ergebnis, daß ich
            jetzt keine vollständige Mail mehr bekomme. :-(

            Und dann lieferst du keine brauchbare Fehlerbeschreibung.
            Was heißt "keine vollständige Mail mehr"?
            Wo wird abgebrochen? Wie sieht denn die Mail aus?
            Kommen die Header vollständig an? Ist noch ein Teil des Mailbodys in deiner Email?
            Kommt in jedem Fall immer eine unvollständige Email an oder ist das abhängig von den Eingaben, die du in deinem Formular machst?
            Wir sind hier keine Hellseher und wenn du möchtest, daß man dir hilft, dann mußt du dir schon die Mühe machen und soviel Informationen wie möglich liefern. (Beachte auch die Tipps für Fragende)

            $header = "From: $nameeingabe <$email>";

            Hier hinter fehlt der trennende Zeilenumbruch.

            mail($empfaenger, $betreff, $nachrichtgesamt, $header);

            Was steht in deinen Variablen, bevor du sie hier an mail() übergibst?
            Lass dir den Inhalt der Variablen mit print_r() oder var_dump() ausgeben.
            Dann wirst du mit ziemlicher Sicherheit erkennen können, wo der Fehler liegt.

            Schöner Gruß,
            rob