kostenloser Webspace werbefrei: lima-city


mysql eintrag nicht doppelt escapen ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    soboo

    soboo hat kostenlosen Webspace.

    Hallo

    ich habe eine Funktion zum codieren und escapen von Strings
    zur Anwendung bevor ich sie in eine MySQL Tabelle schreibe
    (oder auch bevor ich den String mit einem Eintrag vergleiche)


    function DBconvertString($string) {
    
      if(!mb_check_encoding($string, 'UTF-8')) { 
         $string = utf8_encode($string);
      }
    
      $string = mysql_real_escape_string($string);
    
    return $string;
    }


    Problem? ... Wenn der Eingabe-String (in die Funktion) schon escaped ist
    dann wird er ja doppelt escaped ?! ... wie kann ich das verhindern?

    für UFT-8 codierung kann ich ja mit mb_check_encoding() prüfen,
    ob der String schon in UTF-8 vorliegt, um dann nicht doppelt zu codieren

    aber wie mache ich so eine Prüfung vor dem Escapen ?!?
    ... damit der String nicht doppelt escaped wird


    und ... noch ne Frage zu mysql_real_escape_string


    funktioniert mysql_real_escape_string() überhaupt innerhalb einer Funktion?

    vor Funktionsaufruf wird zwar die Verbindung zur Datenbank hergestellt,
    aber muss ich dann noch die Verbindungs-Kennung $con

    mit dem Aufruf übergeben bzw. in der Funktion global setzen
    und dann in der Funktion mysql_real_escape_string() mit dem Kennungs.Parameter aufrufen ?

    $con = mysql_connect($db_host, $db_user, $db_pass);
    ...
    function DBconvertString($string) {
      global $con; 
    
      if(!mb_check_encoding($string, 'UTF-8')) { 
         $string = utf8_encode($string);
      }
    
      $string = mysql_real_escape_string($string, $con);
    
    return $string;
    }


    ... also mit oder ohne Verbindungs-Kennung Parameter?
    und wie doppeltes escapen verhindern ?

    oder wie sonst kann man vor einer MySQL Anfrage die verwendeten Strings
    richtig codieren und escapen (ich verwende Koalition uft8_general)

    Danke!



    Beitrag zuletzt geändert: 28.1.2012 16:36:02 von soboo
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    soboo schrieb:
    Problem? ... Wenn der Eingabe-String (in die Funktion) schon escaped ist
    dann wird er ja doppelt escaped ?! ... wie kann ich das verhindern?
    Warum sollte er das sein?

    soboo schrieb:
    funktioniert mysql_real_escape_string() überhaupt innerhalb einer Funktion?

    vor Funktionsaufruf wird zwar die Verbindung zur Datenbank hergestellt,
    aber muss ich dann noch die Verbindungs-Kennung $con

    mit dem Aufruf übergeben bzw. in der Funktion global setzen
    und dann in der Funktion mysql_real_escape_string() mit dem Kennungs.Parameter aufrufen ?
    Ja, es funktioniert in einer Funktion. Warum sollte es das etwa nicht tun?
    Den Verbindungsparameter musst du nicht angeben wenn du vorher eine Datenbankverbindung geöffnet hast (was du auch hast).
  4. Autor dieses Themas

    soboo

    soboo hat kostenlosen Webspace.

    hackyourlife schrieb:
    soboo schrieb:
    Problem? ... Wenn der Eingabe-String (in die Funktion) schon escaped ist
    dann wird er ja doppelt escaped ?! ... wie kann ich das verhindern?
    Warum sollte er das sein?


    na z.B. wenn der String vorher durch ein addslashes() gejjagt wurde
    macht dann mysql_real_escape_string() nochmal Slashes dazu ?


    zu: mysql_real_escape_string und Datenbank Verbindungs-Kennung
    hackyourlife schrieb:
    Ja, es funktioniert in einer Funktion. Warum sollte es das etwa nicht tun?


    naja, ich dachte innerhalb einer Funktion sind NUR Varaiablen verfügbar
    die a) als Parameter übergeben wurden, b) in der Funktion global gesetzt sind oder c) Konstanten
    und meine $con definiere ich ja nicht als Konstante ...

  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    soboo schrieb:
    zu: mysql_real_escape_string und Datenbank Verbindungs-Kennung
    hackyourlife schrieb:
    Ja, es funktioniert in einer Funktion. Warum sollte es das etwa nicht tun?


    naja, ich dachte innerhalb einer Funktion sind NUR Varaiablen verfügbar
    die a) als Parameter übergeben wurden, b) in der Funktion global gesetzt sind oder c) Konstanten
    und meine $con definiere ich ja nicht als Konstante ...
    Hier wird keine Verbindungskennung benötigt, da sich mysql_real_escape_string automatisch wenn keine Verbindung angegeben wird die letzte Verbindung nimmt. Die Verbindungskennung kann bei mysql_real_escape_string einfach weggelassen werden.

    soboo schrieb:
    na z.B. wenn der String vorher durch ein addslashes() gejjagt wurde
    macht dann mysql_real_escape_string() nochmal Slashes dazu ?
    mysql_real_escape_string macht Slashes dazu, aber warum sollte der String vorher durch addslashes wandern?
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!