Mario: Eintrag mit Sonderzeichen

Moin alle Mann,

ich habe mir ein Gästebuch gebaut. Jeder Eintrag soll in einer MySQL-Datenbank gespeichert werden.
Solange der Nutzer das Zeichen " nicht verwendet klappt es auch.
Wenn jedoch das Zeichen " im Text enthalten ist, wird der Komplette Datensatz NICHT angelegt.
Meine erste Idee war, das kommentar durch Zeichen für Zeichen in einer While-Schleife zu scannen und ggf. das " durch ein ' zu ersetzen.
Das proeblem ist nur, dass ich ja gar nicht nach einem " scannen kann ;)

Wie sieht denn da jetzt die beste Lösung aus?

Gruß Mario

  1. Hellihello

    vielleicht hilft das Stichwort "kontextspezifische Maskierung".

    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
    1. Hallo frankx,

      Vielen Dank für den Tipp mit
      "kontextspezifische Maskierung"

      Leider werden nur gerade Wartungsarbeiten unter der "Suche" vorgenommen, sodass ich da nicht großartig was machen kann.

      Google spuckt mir da auch nichts gluges raus.

      Kannst Du vielleicht noch ein bischen mehr in die Tiefe gehen bzw. details nennen, wie mein Problem lösen könnte.

      Vielen Dank

      1. Hellihello

        Leider werden nur gerade Wartungsarbeiten unter der "Suche" vorgenommen, sodass ich da nicht großartig was machen kann.

        Google spuckt mir da auch nichts gluges raus.

        Kannst Du vielleicht noch ein bischen mehr in die Tiefe gehen bzw. details nennen, wie mein Problem lösen könnte.

        http://www.google.de/search?q=kontextspezifisch maskieren mysql anführungszeichen
        ???

        Dank und Gruß,

        frankx

        --
        tryin to multitain  - Globus = Planet != Welt
        1. http://www.google.de/search?q=kontextspezifisch maskieren mysql anführungszeichen
          ???

          mhh... da bin ich auch nicht wirklich schlau draus geworden.
          Aber habe eine andere Lösung gefunden: htmlentities()

          Trotzdem Danke

          Gruß

          1. Hallo,

            mhh... da bin ich auch nicht wirklich schlau draus geworden.
            Aber habe eine andere Lösung gefunden: htmlentities()

            das ist *keine* Lösung, das ist Unfug. Du bringst die Daten in einen SQL-Kontext und nicht in einen HTML-Kontext.

            Wenn Du noch die veralteten mysql_*-Funktionen verwendest, dann heißt die Lösung mysql_real_escape_string(), wie Matze bereits erwähnte. Verwendest Du mysqli (empfehlenswert), so könntest Du mysqli_real_escape_string() oder Prepared Statements verwenden.

            Freundliche Grüße

            Vinzenz

            1. Hallo Vinzenz!

              Wenn Du noch die veralteten mysql_*-Funktionen verwendest, dann heißt die Lösung mysql_real_escape_string(), wie Matze bereits erwähnte. Verwendest Du mysqli (empfehlenswert), so könntest Du mysqli_real_escape_string()

              Kannst du mir bitte sagen was der Unterschied ist? Bzw. warum mysqli jetzt vorzuziehen wäre?

              Danke und Grüße, Matze

              1. Hallo,

                Wenn Du noch die veralteten mysql_*-Funktionen verwendest, dann heißt die Lösung mysql_real_escape_string(), wie Matze bereits erwähnte. Verwendest Du mysqli (empfehlenswert), so könntest Du mysqli_real_escape_string()

                Kannst du mir bitte sagen was der Unterschied ist? Bzw. warum mysqli jetzt vorzuziehen wäre?

                Um "neuere" Features von MySQL 4.1.3 und neuer nutzen zu können.

                Siehe http://www.php.net/manual/de/mysqli.overview.php, insbesondere ab Abschnitt "What are the main PHP API offerings for using MySQL?". Beachte bitte die Hinweise in den Kästen.

                Freundliche Grüße

                Vinzenz

      2. Hallo Mario!

        Kannst Du vielleicht noch ein bischen mehr in die Tiefe gehen bzw. details nennen, wie mein Problem lösen könnte.

        Damit meint Frank, dass du die Daten dem Kontext entsprechend maskieren sollst.
        In welchem Kontext befindest du dich? Datenbank, also vermutlich MySQL.
        MySQL reserviert genauso wie PHP oder HTML gewisse Zeichen.
        Bei PHP musst du z.B. den Backslash vor bestimmte Zeichen setzen um sie darzustellen anstatt sie zu interpretieren. Beispiel echo 'O'raily';
        Bei HTML sind es z.B. die Zeichen "<" und ">" die maskiert werden sollten. Beispiel &lt;&gt; ergibt <>.
        MySQL reserviert genauso bestimmte Zeichen. Damit sie nicht als solche behandelt werden, muss man sie maskieren. In dem Fall mit mysql_real_escape_string().

        Grüße, Matze