caractère d'échappement n'est pas inséré dans la table

Eléphant du PHP | 50 Messages

23 févr. 2006, 17:54

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.

Eléphant du PHP | 312 Messages

23 févr. 2006, 18:04

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.

Eléphant du PHP | 50 Messages

23 févr. 2006, 18:06

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.

Eléphant du PHP | 312 Messages

23 févr. 2006, 18:15

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

Invité
Invité n'ayant pas de compte PHPfrance

23 févr. 2006, 18:29

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!

Eléphant du PHP | 312 Messages

23 févr. 2006, 18:41

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é.

Eléphant du PHP | 50 Messages

23 févr. 2006, 18:50

Merci pour ces précisions!

J'ai également lu le tuto de phpfrance.

A plus!