Discussion: Apostrophes encore
Afficher un message
Vieux 22/07/2007, 16h15   #2
jeremie fouche
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Apostrophes encore

Pascale a écrit :
> $escchamp1=mysql_real_escape_string($champ1);
> $escchamp2=mysql_real_escape_string($champ2);
> ...
> Puis :
> $upd = "UPDATE valinfo SET champ1='$escchamp1',champ2='$escchamp2' WHERE
> numero='$numero'";
>
> Et bien... ce qui me surprend c'est que cette solution semble résoudre mon
> problème... MAIS les données insérés (ou modifiées) dans mes tables ne
> semblent pas modifiées. Par exemple, si l'utilisateur saisit comme nom de
> commune : VALLON PONT D'ARC, je retrouve dans ma table : VALLON PONT D'ARC
> et non pas : VALLON PONT D'ARC.


C'est normal, mysql_escape_string ne fait que /protéger/ ta requête, le
manuel le dit :
mysql_real_escape_string() appelle la fonction mysql_escape_string() de
la bibliothèque MySQL qui ajoute un slashe aux caractères suivants :
NULL, \x00, \n, \r, \, ', " et \x1a.

> Et il y a un autre truc bizarre : si je veux faire un SELECT, par exemple :
> "SELECT numero,nom,adresse FROM matable WHERE ville='$ville'"; je me
> ramasse une erreur SQL si jamais le nom de la ville contient une
> apostrophe.


"SELECT * FROM matable WHERE ville='VALLON PONT D'ARC'";
^^^^
Tu le vois mieux le problème ? La requête deviens effectivement
grammaticalement incorrect.

mysql_real_escape_string() transforme ta requête en :
"SELECT * FROM matable WHERE ville='VALLON PONT D\'ARC'";

Et ça, c'est valide.

--
Jérémie
  Réponse avec citation
 
Page generated in 0,04743 seconds with 9 queries