x-plosiv: php5: sonderzeichen problem bei mysql

hallo zusammen.

ich habe diverse php scripte wie gästebücher, weblog etc. bei denen ich seit mein provider php5 und die neuste mysql version installiert hat, probleme habe.

und zwar kann ich keine text mehr einfügen wo es sonderzeichen wie zb. "'" hat.

weiss da schon jemand mehr? liegt es am php5 oder an der neusten mysql version (sorry weiss gerade nicht mehr welche)

ich wäre euch sehr dankbar für einen tip, denn zur zeit sehe ich den wald vor lauter bäumen nicht mehr. :-(

besten dank im voraus

  1. Hello,

    ich habe diverse php scripte wie gästebücher, weblog etc. bei denen ich seit mein provider php5 und die neuste mysql version installiert hat, probleme habe.

    und zwar kann ich keine text mehr einfügen wo es sonderzeichen wie zb. "'" hat.

    weiss da schon jemand mehr? liegt es am php5 oder an der neusten mysql version (sorry weiss gerade nicht mehr welche)

    Es wird wohl am fehlenden Escapen der Strings liegen.

    1. Schritt: alle automatischen Maßnahmen von PHP rückgängig machen oder
                ausschalten. siehe magic_quotes_gpc()
    2. Schritt: alle ganzen Zahlen durch inval jagen und alle Float eben druch eine
                passende ander Funktion
    3. Schritt: alles Strings durch mysql_(real_)escape_string() schicken.

    Dann werden alle "schädlichen" Zeichen vernichtet oder maskiert und die Textschnittstelle von MySQL kommt damit klar. Prinzipeill kann man Zahlen auch durch mysql_escape_string() schicken und sie in Häkchen setzen, wenn man nicht damit rechnen will, sondern nur den textuellen Wert an die Schnittstelle übergeben will.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. erstmals danke für die rasche antwort...leider verstehe ich nicht ganz wie du dies meinst :-(

      ich denke am besten ist, wenn ich mal einen einfach code schnippsel poste:

      <form name='form1' method='POST' action='charts_bestaetigung.php'>
                <p>Track: <input type='text' name='track'> &nbsp;Interpet: <input type='text' name='interpret'>
                </p>

      <p>
                  <input type='submit' name='Submit' value='Track vorschlagen'>
                  <input type='reset' value='zurücksetzten'>
                </p>
              </form>

      $database = mysql_connect($host,$user,$pass);

      mysql_db_query($datenbank,"insert into charts (track, interpret) values ('$_POST[track]','$_POST[interpret]')",$database);

      ich hoffe du blickst durch bei diesen codeschnippsel

      1. Hello,

        erstmals danke für die rasche antwort...leider verstehe ich nicht ganz wie du dies meinst :-(

        $database = mysql_connect($host,$user,$pass);

        mysql_db_query($datenbank,"insert into charts (track, interpret) values ('$_POST[track]','$_POST[interpret]')",$database);

        ich hoffe du blickst durch bei diesen codeschnippsel

        Ja, ich blicke da durch ;-)
        1.) mysql_db_query() sollte nicht mehr benutzt werden, sondern

        $con = mysql_connect($host,$user,$pass)
                   or die('einfache Fehlerbehandlung: Server nicht gefunden');

        $db  = mysql_select_db($databasename,$con)
                   or die('einfache Fehlerbehandlung: Datenbak nicht gefunden);

        2.) $_POST[interpret] ist falsch, es muss $_POST['interpret'] heißen
            für 'track' gilt das gleiche

        3.) stelle Dein Query vorherzusammen:
            $sql = "insert into charts set ".
                   "track = '".mysql_escape_string($_POST['track'])."',".
                   "interpret = '".mysql_escape_string($_POST[interpret])."'";

        Dann kannst Du es im Fehlerfalle an die Fehlermeldung anhängen
            Wenn magic_quotes_gpc() eingeschalet ist, musst Du vorher die Backslashes
            mit stripslashes() sieder entfernen.

        Die Elementnamen von assoziativen Arrays MÜSSEN in Häkchen geschrieben werden
            Hier lag wahrscheinlich ein Teil des Fehlers, weil PHP nicht mehr so tolereant
            ist.
            Vergiss nie, das Escapen mit mysql_(real_)escape_string()

        4.) Aufruf des Querys
            $res = mysql_query($sql,$con);

        if (!$res)
            {
              ## Fehlermeldung veranlassen
            }

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Holladiewaldfee,

          also, wenn sein Provider wirklich die neueste MySQL-Version, sprich die 4.1.7 installiert hat, dann muß er noch ein paar Sachen anders machen.

          Erstens sollte er von mysql_* auf mysqli umsatteln.
          Zweitens sollte er sich mit der neuen Fähigkeit von MySQL auseinandersetzen, verschiedene Zeichensätze zu verwenden. Die werden mit einer Query der Art

          SET CHARACTER SET "XXX"

          gesetzt, wobei XXX der Zeichensatz ist. Ich verwende latin1, er kann aber natürlich auch utf8 oder sonstwas hernehmen. Wichtig ist, daß er drauf achtet, daß die Tabelle und die Verbindung den gleichen Zeichensatz verwenden, sonst kommt es zu solchen Spielchen wie "?" statt Sonderzeichen usw.

          (Viel) mehr dazu auch unter http://dev.mysql.com/doc/mysql/en/Charset.html.

          Ciao,

          Harry

          --
            Irgendwann kommt die Waldfee - oder auch nicht ... (Projektphase: Keine Ahnung)
            Bis dahin:
            Ski- und Bergtouren in den Tölzer Voralpen und im Karwendel
          1. Hello,

            Zweitens sollte er sich mit der neuen Fähigkeit von MySQL auseinandersetzen, verschiedene Zeichensätze zu verwenden. Die werden mit einer Query der Art

            SET CHARACTER SET "XXX"

            gesetzt, wobei XXX der Zeichensatz ist. Ich verwende latin1, er kann aber natürlich auch utf8 oder sonstwas hernehmen. Wichtig ist, daß er drauf achtet, daß die Tabelle und die Verbindung den gleichen Zeichensatz verwenden, sonst kommt es zu solchen Spielchen wie "?" statt Sonderzeichen usw.

            (Viel) mehr dazu auch unter http://dev.mysql.com/doc/mysql/en/Charset.html.

            Sollte der Zeichensatz nicht voreingestellt sein?

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. Holladiewaldfee,

              (Viel) mehr dazu auch unter http://dev.mysql.com/doc/mysql/en/Charset.html.

              Sollte der Zeichensatz nicht voreingestellt sein?

              Ja und nein.
              Bei mir war es z.B. so, daß ich zwar latin1 voreingestellt habe, MySQL aber die alten Datenbanken komplett als UTF8 übernommen hat. Ergebnis: Chaos und nicht mehr funktionierende Queries. Außerdem traue ich so manchem Provider durchaus zu, die Sache etwas lasch zu handhaben und so dafür zu sorgen, daß es eben zu Problemen bei der Verbindung zwischen PHP und MySQL kommt.

              Vielleicht sollte x-plosiv einfach mal irgendeine Query mit "INSTR()" auf die Datenbank loslassen, wobei eine vorgegebene Zeichenkette mit einer aus der Tabelle verglichen wird. Bekommt er dann Fehlermeldungen wegen nicht übereinstimmender Zeichensätze, so ist klar, wo der Hase im Pfeffer liegt.

              Ciao,

              Harry

              --
                Irgendwann kommt die Waldfee - oder auch nicht ... (Projektphase: Keine Ahnung)
                Bis dahin:
                Ski- und Bergtouren in den Tölzer Voralpen und im Karwendel
              1. Hello,

                (Viel) mehr dazu auch unter http://dev.mysql.com/doc/mysql/en/Charset.html.

                Sollte der Zeichensatz nicht voreingestellt sein?

                Vielleicht sollte x-plosiv einfach mal irgendeine Query mit "INSTR()" auf die Datenbank loslassen, wobei eine vorgegebene Zeichenkette mit einer aus der Tabelle verglichen wird. Bekommt er dann Fehlermeldungen wegen nicht übereinstimmender Zeichensätze, so ist klar, wo der Hase im Pfeffer liegt.

                Das bedeutet doch schon wieder Lesestoff, was die Burschen noch alles geändert haben.
                Man kann einfach nicht ausruhen ;-)

                Harzliche Grüße aus http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                1. hallo zusammen...

                  wow besten dank für eure hilfe...jetzt muss ich es nur noch versuchen umzusetzten. ich hoffe es klappt, falls nicht werde ich mich nochmals melden. auf jedefall wie tom sagt...wieder mal sehr viel zum nachlesen...

                  besten dank euch 2....jetzt weiss ich wenigstens wo ich ansetzen muss..ihr habt mir echt geholfen.