question concernant mysql_real_escape_string insertion dans une table

WRInaute discret
Bonjour,

J'ai une petite question concernant la fonction mysql_real_escape_string en php :

A quoi doit ressembler le contenu des champs insérés dans une table via cette fonction ?

Je m'explique :

Je traite un champ d'un formulaire par exemple : $var=mysql_real_escape_string($_POST["formvar"]);

j'insère dans ce champ toto’ OR 1<2 OR login=’ .

Mon script traite le formulaire et me renvoie un mail de confirmation où je vois tous les champs saisis.
Ma fonction traite bien les caractères "interdits" et j'obtiens dans mon mail : $var = toto’ OR 1. Jusque là tout fonctionne bien.

Par contre quand je regarde le champ de la table liée à $var, je m'aperçois que l'insertion s'est faite sous la forme toto’ OR 1<2 OR login=’ . Est-ce normal ?

Merci de m'éclairer !

a+
 
WRInaute passionné
si ce que tu as dans la table correspond a ce que tu as saisie : le résultat est normal. c'est le but ce cette fonction d'empêcher d'interpréter un contenu de zone comme une instruction SQL.
sil il y a une différence entre le mail et la table c'est que tu as du oublier d'utiliser la fonction htmlspecialchars('une chaine')
 
WRInaute discret
Ok, merci pour la réponse.

si ce que tu as dans la table correspond a ce que tu as saisie : le résultat est normal. c'est le but ce cette fonction d'empêcher d'interpréter un contenu de zone comme une instruction SQL.

OK, c'est ce que je j'ai. Je saisi toto’ OR 1<2 OR login=’ et dans la table j'ai toto’ OR 1<2 OR login=’.

cependant
sil il y a une différence entre le mail et la table c'est que tu as du oublier d'utiliser la fonction htmlspecialchars('une chaine')

C'est ce que j'ai aussi. Dans le mail j'ai $var = toto’ OR 1 et dans la table pour le champ correspondant j'ai toto’ OR 1<2 OR login=’

Donc la réponse à ma question est là...

D'ailleurs le plus important est de protéger le champ grâce à mysql_real_escape_string, non ?
Ou le fait d'avoir toto’ OR 1<2 OR login=’ dans la table est "dangereux" aussi ?
 
WRInaute accro
Et à tout hasard, les "quotes" que tu nous montre ici c'est des "curly quotes", je ne sais pas dire si elles sont "échappées" comme des quotes normales:
Celles que tu nous montre:
Code:

Une quote normale:
Code:
'

... à tester.
 
WRInaute discret
Bien vu !

ça change le traitement du formulaire du coup...

en utilisant les quotes normales dans mes champs avec : toto' OR 1<2 OR login=' et plus toto’ OR 1<2 OR login=’

le mail que je reçois en retour est coupé, c'est à dire que le traitement s'arrête après le première vérification des champs via mysql_real_escape_string.

Donc j'obtiens :

$var1 : toto\\\' OR 1 Puis plus rien... Alors qu'avant j'avais toute une série de variables vérifiée...

Le reste fonctionne (insertion table...)

C'est ça qu'est sensée faire la fonction mysql_real_escape_string ?
 
WRInaute accro
Si tu as 3 \\\ avec mysql_real_escape_string, ça doit être les magic_quotes qui sont activées
 
WRInaute discret
je suis sur un serveur mutualisé, ça va être tendu de mettre à off cette fonction...

mais ce n'est pas ça qui pose problème (me tromp-je ?)

sinon,
Donc j'obtiens :

$var1 : toto\\\' OR 1 Puis plus rien... Alors qu'avant j'avais toute une série de variables vérifiée...

Le reste fonctionne (insertion table...)

C'est ça qu'est sensée faire la fonction mysql_real_escape_string ?

Je me répète, mais n'ayant aucune idée de ce que doit faire cette fonction mysql_real_escape_string, si tu as une idée, ce serait cool...
 
Discussions similaires
Haut