Page 1 sur 1
caractère d'échappement n'est pas inséré dans la table
Posté : 23 févr. 2006, 17:54
par LEON
Bonjour à tous!
Voilà, j'ai un problème avec l'échappement de caractères dans ma table:
Exemple:
$nom = "O'Conor";
$maVar = addslashes($nom); //ce qui conne "O\'Conor"
...
...
INSERT INTO maTalbe (monChamp) VALUES ('$maVar');
Lorsque j'execute avec une BD MySQL 4.x.x cela fonctionne et la valeur du champ de ma table vaut "O\'Conor". Mais avec une version 5.x de MySQL cela ne fonctionne pas. Ca m'insère "O'Conor". Est-ce une nouvelle fonctionnalité de MySQL (hébergé chez
Infomaniak)??
Merci pour vos réponses!
Ciao.
Posté : 23 févr. 2006, 18:04
par Hermès
tes deux bases de données sont chez le même hébergeur ?
ça peut être simplement lié à la configuration du serveur php : il y a possibilité de sécuriser un peu plus les données à l'aide d'une option du php.ini.
Donc si tu as noté une différence entre une exécution en local et une exécution chez un hébergeur c'est peut être normal si vous n'avez pas configuré php de la même façon.
Posté : 23 févr. 2006, 18:06
par LEON
Non, une est en local et l'autre chez Inf.
Ok je comprends, et ru sais quels paramètres seraient susceptibles de supprimer ces '\' ?
Merci.
Posté : 23 févr. 2006, 18:15
par Hermès
J'ai trouvé ça dans mon php.ini :
Code : Tout sélectionner
; Magic quotes
;
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off
Posté : 23 févr. 2006, 18:29
par Invité
You're right!!
J'ai comparé les paramètres et en effet, chez mon hébergeur il y avait les params suivants:
Code : Tout sélectionner
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off
et en local:
Code : Tout sélectionner
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off
J'ai donc mis magic_quotes_gpc = Off et ca ne marche plus. Les \ sont supprimés!
Mais je ne comprends pas l'utilité de faire cela... C'est pour éviter d'utiliser des addslashes etc? Ca remplace ce traitement??
Merci pour le tuyau!
Posté : 23 févr. 2006, 18:41
par Hermès
Il est très facile de supprimer l'intégralité du contenu d'une table (par exemple) lorsque le code n'est pas un minimum sécurisé.
Le fait d'échapper automatiquement tout ce qui va vers la base de données permet justement d'éviter les oublis pouvant attirer les petits malins.
C'est donc une mesure de sécurité supplémentaire, surtout utile lorsqu'on utilise les formulaires.
Dans le cas où tout ce qui est inséré en base ne dépend pas des entrées d'un utilisateur, on peut "oublier" cette mesure de sécurité.
Posté : 23 févr. 2006, 18:50
par LEON
Merci pour ces précisions!
J'ai également lu le tuto de phpfrance.
A plus!