PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.lang.php > Apostrophes encore
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Apostrophes encore

Réponse
 
LinkBack Outils de la discussion
Vieux 21/07/2007, 18h17   #1 (permalink)
Pascale
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Apostrophes encore

Je suis perplexe à un point que c'est pas possible (:
D'un côté, je suis (encore) en train de travailler sur un site où j'essaie
de suivre les conseils qui m'ont été donnés ici (j'ai déjà posé des
questions concernant la gestion des apostrophes et autres caractères
spéciaux).
En résumé, pour le site en question, j'ai désactivé les magic_quotes_gpc
et, avant d'insérer ou de modifier une donnée, j'utilise par précaution
mysql_real_escape_string. Donc si une personne saisit : C'est ma demande,
je retrouve dans la table correspondante : C'est ma demande.
Rien de mystérieux ni de bizarre.

D'autre part, on a un autre site accessible au public qui, lui, a été
programmé avec les magic_quotes. Jusqu'à présent, ça marchait quand même,
mais un utilisateur est tombé sur un cas où, visiblement, les magic_quotes
ne font pas leur boulot (d'où une magnifique erreur de syntaxe SQL).
Je me suis dit que, quitte à y passer un peu de temps, autant virer ces
magic_quotes et utiliser mysql_real_escape_string, ce que j'ai donc fait
sur ma base de test.
J'ai donc par exemple:
$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.
Donc, j'ai l'impression qu'il ne s'est rien passé, mais mon UPDATE se fait
correctement alors qu'auparavant (sans mysql_real_escape_string et avec
magic_quotes_gpc sur on), j'avais une erreur SQL si le nom de la commune
contenait une apostrophe et qu'une autre donnée était modifiée.

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. Si je fais auparavant $ville=mysql_real_escape_string($ville);
le problème est résolu, certes, mais je trouve cela bizarre d'utiliser
cette commande pour cet usage: j'ai beau lire et relire la doc PHP à ce
sujet, je ne pige pas.
Je précise que les deux sites sont situés chez le même hébergeur. Le
..htaccess des 2 sites contient:
php_flag display_errors Off
php_flag expose_php Off
php_flag include_path Off
php_flag magic_quotes_gpc Off

Si quelqu'un peut éclairer ma lanterne, parce que là, j'ai du mal à y
voir clair...

--
Pascale
  Réponse avec citation
Vieux 22/07/2007, 16h15   #2 (permalink)
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
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 10h16.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,11098 seconds with 10 queries