mysql eintrag nicht doppelt escapen ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aufruf
aufrufen
code
codierung
datenbank
eingabe
frage
funktion
global setzen
kennung
machen
parameter
problem
string
tun
url
verbindung
verhindern
verwendeten strings
wandern
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
soboo schrieb:
Warum sollte er das sein?
Problem? ... Wenn der Eingabe-String (in die Funktion) schon escaped ist
dann wird er ja doppelt escaped ?! ... wie kann ich das verhindern?
soboo schrieb:
Ja, es funktioniert in einer Funktion. Warum sollte es das etwa nicht tun?
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 ?
Den Verbindungsparameter musst du nicht angeben wenn du vorher eine Datenbankverbindung geöffnet hast (was du auch hast). -
hackyourlife schrieb:
soboo schrieb:
Warum sollte er das sein?
Problem? ... Wenn der Eingabe-String (in die Funktion) schon escaped ist
dann wird er ja doppelt escaped ?! ... wie kann ich das verhindern?
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 ...
-
soboo schrieb:
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.
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 ...
soboo schrieb:
mysql_real_escape_string macht Slashes dazu, aber warum sollte der String vorher durch addslashes wandern?
na z.B. wenn der String vorher durch ein addslashes() gejjagt wurde
macht dann mysql_real_escape_string() nochmal Slashes dazu ? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage