Mike: Probleme mit Hochkommata bei Datenbankabfrage

Hi,

wenn in dem Inhalt einer Variable ein Hochkommata '  ist, zum Beispiel " CD's " dann erhalte ich die Meldung:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/www/web9/html/netradio/charts.php on line 16

Der Ausschnitt aus dem Quelltext sieht so aus:

13 $interpret = stripslashes($interpret);
14 $song = stripslashes($song);
15 $result1 = mysql_query("SELECT * FROM netradio_charts WHERE interpret = $interpret");
16 $num_rowsInterpret = mysql_num_rows($result1);

Zunächst wird also in beiden Variablen die Funktion 'stripslashes' angewandt. Anschliessend wird damit eine Datenbankabfrage gemacht und überprüft, ob der Eintrag vorhanden ist oder nicht. Und da meckert er eben (Zeile 16).

Das tritt nur auf, wenn in der Variable $interpret ein Hochkommata vorhanden ist, ansonsten funktioniert es tadellos.

Wo könnte das Problem liegen?

Greetz
Mike

  1. Moin Moin !

    15 $result1 = mysql_query("SELECT * FROM netradio_charts WHERE interpret = $interpret");

    Schon mal was von Escaping gehört? Nein? Dann RTFM!

    So wie der Code da steht, wird deine DB den ersten Angriff nicht überleben.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
    1. Hi Alexander

      Schon mal was von Escaping gehört? Nein? Dann RTFM!

      wäre toll, wenn Du den Anfängern, die das hier evt. lesen, auch noch
      sagst _wo_ die denn gucken sollen... wenn die das nämlich nicht
      kennen, wissen die in der Regel auch nicht wo die gucken sollen,
      bzw. wonach sie suchen könnten.

      gruss

      1. Moin Moin !

        OK, Svens Antwort ist besser.

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
  2. Moin!

    13 $interpret = stripslashes($interpret);
    14 $song = stripslashes($song);

    Ich werde dich fragen, warum du da stripslashes() verwendest, und du wirst vielleicht antworten: "Ich dachte, das ist ganz gut, denn ich will keine Slashes in meiner Datenbank haben".

    Dann werde ich dich fragen, woher du denn so genau weißt, dass stripslashes() notwendig ist - schließlich kann magic_quotes_gpc ja auch ausgeschaltet sein, und dann würde stripslashes() mit Sicherheit zuviel entfernen. Und du könntest antworten: "Ähm, sowas gibts. Da habe ich noch nicht drüber nachdacht. Wie findet man das denn zur Laufzeit raus?" Und ich werde dich auf http://www.php.net/manual/de/function.get-magic-quotes-gpc.php verweisen.

    15 $result1 = mysql_query("SELECT * FROM netradio_charts WHERE interpret = $interpret");

    Außerdem werde ich dich fragen, wie denn die Datenbank den String von $interpret erkennen soll. Und du wirst nachdenken und sagen: "Dazu sind einfache Anführungszeichen da." Und ich werde das Fehlen derselben bemängeln.

    Und dann kommt der Augenblick, in dem du erkennst, dass dann einfache Anführungszeichen im String $interpret zu Konflikten führen.

    Und dann weise ich dich auf die wunderbare Funktion mysql_escape_string() hin, welche automatisch alle Zeichen eines Strings, die in einer SQL-Abfrage zu Konflikten führen, escapet. http://www.php.net/manual/de/function.mysql-escape-string.php

    Und hoffentlich merkt niemand, dass deine Datenbank derzeit angreifbar ist.

    - Sven Rautenberg

    --
    "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)