formularverarbeitung - textabbruch bei gänsefüßchen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • formularverarbeitung - textabbruch bei gänsefüßchen

    hallo allerseits,

    ich hänge bei einem e-mail-formular, bzw. dessen verarbeitung fest.

    das ist das formular ("formular.php"):

    PHP-Code:
    <!-- Start Kontaktformular -->
     <
    form action="formular_pruef.php" method="post" accept-charset="utf-8">
       <
    p>
         <
    input type="text" name="mailadresse" size="35" maxlength="60" value="Ihre Adresse f&uuml;r elektronische Post" />
       </
    p>
       <
    p>
        <
    strong>Ihre Nachricht:</strong>
        <
    br />
        <
    textarea name="text" rows="10" cols="55">Hier kommt Ihre Nachricht rein. </textarea>
       </
    p>
       <
    p>
         <
    input name="Senden" type="submit" value="E-Mail versenden" /> &nbsp; &nbsp;
         <
    input name="Reset" type="reset" value="Eingaben zur&uuml;cksetzen" />
       </
    p>
     </
    form>
     <!-- 
    Ende Kontaktformular --> 
    soweit gut, das funktioniert.
    die übergabe und anzeige im prüf-formular funktioniert auch ("formular_pruef.php"):

    PHP-Code:
    <a name="seitenanfang"></a>
    <form action="formular_bestaet.php" method="post" accept-charset="utf-8">
    <?php
    $mailtext 
    = ($_POST[text]);
    $mailtext wordwrap ($_POST[text]);
    $anzeige "
    <p>Hallo,</p>
    <p>***blablatext***.</p>
    Folgende Daten haben Sie zur &Uuml;bermittlung eingegeben:
    <p><pre>
    <br /><span>E-Mail: <b>" 
    $_POST[mailadresse] . "</b></span>
    <br />Ihr Nachrichtentext:<b><br />" 

    stripslashes($mailtext) . "</b>
    </pre></p>
    <p>&nbsp;</p>
    "
    ;
    echo (
    $anzeige);
    echo (
    "<p><input name=\"Senden\" type=\"submit\" value=\"E-Mail jetzt versenden\"></p>
    <p></p>"
    );
    // Felder und Daten aus Formular versteckt übernehmen
    function form_daten() {
        if (isset(
    $_POST)) {
            foreach (
    $_POST as $key => $element) {
                echo 
    "<input type=\"hidden\" name=\"$key\" value=\"$element\">";
            }
        }
        else {
            foreach (
    $_GET as $key => $elem) {
                echo 
    "<input type=\"hidden\" name=\"$key\" value=\"$element\">";
            }
        }
    };
    //-----
    form_daten(); 
      
    ?>
    </form>
    <hr />
    <p>
      Hier k&ouml;nnen Sie Ihre Eingaben korrigieren oder 
      <a class="seitenanfang" href="#seitenanfang" title="Sprung zum Seitenanfang">▲nach oben</a> zum Seitananfang springen:
    </p>
    <form action="formular_pruef.php" method="post" accept-charset="utf-8">
      <p>
        <input type="text" name="mailadresse" size="35" maxlength="60" value= "<?php echo $_POST[mailadresse?>" />
      </p>
      <p>
        <b>Ihre Nachricht:</b><br />
    <textarea name="text" rows="10" cols="50" wrap="virtual" >
    <?php echo stripslashes($mailtext?></textarea>
      </p>
      <p>
        <b>
          <input name="Senden" type="submit" value="Berichtigung abschicken">
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b>
      </p>
    </form>
    </p>
    die dritte datei ist die sendebestätigung und der schritt, mit dem die mail nun verschickt wird ("formular_bestaet.php"):

    PHP-Code:
    <?php
    /* form_daten();  */
    $mailtext stripslashes($_REQUEST[text]);
    $mailtext wordwrap ($_REQUEST[text]);
    // Empfänger
    $empfaenger  $_REQUEST[mailadresse] . ', '// beachten Sie das Komma
    // $empfaenger .= 'detlef_wd001@localhost';
    // Betreff
    $betreff "Kontaktformular:   " $_REQUEST[betreff];
    // Meldung
    $meldung 
    "Hallo, <br />
    <br />
    Vielen Dank f&uuml;r Ihre Nachricht! ***blablatext***. 
    <br />
    Folgende Daten haben Sie uns &uuml;bermittelt: <br />
    <pre>
    E-Mail: " 
    $_REQUEST[mailadresse] . "
    <br />Ihr Nachrichtentext: <br />" 

    $mailtext "
    </pre>" 
    "<br />
    *****blablatext****** <br />
    "
    ;
    // Bei HTML-E-Mails muss der 'Content-type'-Header gesetzt werden
    $header  'MIME-Version: 1.0' "\n";
    $header .= 'Content-type: text/html; charset=utf-8' "\n";
    // Headerangaben, wie To, From, CC, Bcc, etc. können
    // zusätzlich angefügt werden.
    /* $header .= 'To: $_REQUEST[vorname] $_REQUEST[name] <$_REQUEST[mailadresse]>' . "\n";  */
    $header .= 'From: kontaktformular@localhost' "\n";
    /* $header .= 'Cc: [email]geburtstagsarchiv@beispiel.de[/email]' . "\r\n"; */
    $header .= 'Bcc: detlef_wd001@localhost' "\n";
    // Mail versenden
    mail($empfaenger$betreff$meldung$header);
    // Bildschirmausgabe der Sendebestätigung
    $anzeige 
    "<p>Hallo, </p>
    <p>Vielen Dank f&uuml;r Ihre Nachricht! <br />
    ***blablatext***. </p>
    <p>Folgende Daten wurden &uuml;bermittelt (Sie erhalten eine E-Mail zur Best&auml;tigung.): </p>
    <div>
    <pre>
    <br />E-Mail: <b>" 
    $_REQUEST[mailadresse] . "</b>
    <br />Ihr Nachrichtentext:<b><br />" 
    $mailtext "</b>
    </pre>
    </div>"
    ;
    echo (
    $anzeige);
    ?>
    nun kommt das problem:
    wenn der besucher ein hochkomma oder gänsefüßchen eingibt, wird der text mit einem backslash abgebrochen.
    beispiel für eine eingabe:
    EDIT:

    http://www.babydienst.de
    hier 'mein "text



    ausgegeben und verschickt wird:
    EDIT:

    http://www.babydienst.de
    hier \'mein \



    bei hochkomma wird abgebrochen, wenn ich "$anzeige" in hochkommas setze.

    das ganze zum testen:
    formular.php

    frage:
    was kann ich tun, damit der text so ausgegeben und verschickt wird, wie ihn der benutzer eingibt?

    sind evtl. noch andere (sicherheitsrelevante) dinge zu beachten?

    danke im voraus für eure hilfe!

    detlef

  • #2
    mysql_real_escape_string?

    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      danke, aber

      ...ich hätte gern gewußt, weshalb die übergabe vom formular zu formular_pruef so klappt, wie gewünscht, aber die übergabe von formular_pruef zu formular_bestaet dann nicht mehr.

      "strpslashes()" funktioniert nur bei der ersten übergae.
      warum nicht bei der zweiten?
      wo ist mein denkfehler?

      mit dem empfohlenen befasse ich mich morgen.

      Kommentar


      • #4
        Re: danke, aber

        Original geschrieben von augenblickpunkt
        ...ich hätte gern gewußt, weshalb die übergabe vom formular zu formular_pruef so klappt, wie gewünscht, aber die übergabe von formular_pruef zu formular_bestaet dann nicht mehr.

        "strpslashes()" funktioniert nur bei der ersten überga[b]e.
        Die Funkton stripslashes() würde ich nicht verwenden, weil sie weder geeignet ist, das spezielle (und antiquierte) Problem zu entschärfen, für das sie wahrscheinlich entwickelt wurde, noch irgendein anderes Escaping-Problem mit Sicherheit zu lösen. Es funktioniert zwar manchmal, aber eben nicht zuverlässig. Nebenbei bemerkt, entfernt sie Backslashes "\\" keine Quotes "'". ;-)

        warum nicht bei der zweiten?
        wo ist mein denkfehler?
        Du benutzt die Funktion mail(), und übergibst ihr diverse Strings, die du vorher aus dem $_REQUEST-Array geklaubt hast. Mache dich kundig, welche Argumente von mail() wie "escaped" (enkodiert) werden müssen, damit in ihnen enthaltene Zeichen nicht mit in E-Mails verwendeten Zeichen mit Sonderfunktionen kollidieren. Die deutschsprachige Handbuchseite zu mail() (vor allem die Parameterliste) gibt dir da brauchbare Hinweise.

        Und schau dir den Inhalt von $_REQUEST mal im Klartext an (bspw. mit var_dump()), um zu sehen, was wirklich im PHP-Script ankommt. Der Magic-Quotes-Quark sollte natürlich deaktiviert sein.

        mysql_real_escape_string?
        mit dem empfohlenen befasse ich mich morgen.
        Da in deinem Quelltext keine mysql-Funktionen verwendet werden, wüsste ich nicht, wieso dir diese Funktion weiterhelfen sollte. Auf Argumente für mail() angewendet, hat sie das gleiche Problem wie stripslashes() -- sie könnte funktioneren, ist aber nicht für diesen Fall gedacht.
        Zuletzt geändert von fireweasel; 29.10.2008, 21:12.
        Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

        Kommentar

        Lädt...
        X