Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/04/2011, 23h15   #1
Membre du Club
 
Inscription : mai 2007
Messages : 209
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 209
Points : 50
Points : 50
Par défaut Probléme échappement simple quote

Bonjour,
Voila, je souhaite enregistrer en base un petit texte.
Pour cela rien de plus simple qu'une requête INSERT. J'en est fait des tonnes depuis des année sans aucun pb.

Mais voila aujourd'hui, ca ne veux pas passer et j'ai une belle erreur Sql au niveau de l'apostrophe.

Pourtant j'ai un échappement devant chaque simple quote. Mais rien y fait c'est comme si l'échappement n'était pas reconnu ou pris en compte.

Faut savoir que le texte cette l'insert ne provient pas d'un formulaire mais, il est écrit en dure dans le code.

D'ou peut provenir ce pb et comment le corriger ?


pour info get_magic_quotes_gpc() est bien a 1
christobale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 23h28   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Déjà débarrasse toi de ton magic_quotes : c'est une technique obsolète.

Ensuite de quel SGDB et de quelle fonction d'echappement parle t-on
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 23h38   #3
Membre du Club
 
Inscription : mai 2007
Messages : 209
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 209
Points : 50
Points : 50
j'ai une fonction pour l'injection en DB et j'ai une vérification dans cette fonction qui fait que si magic_quotes = 1 c'est lui qui gère si non le texte est dans un addslashes. C'est juste pour la portabilités de la solution. Mais bon ca a toujours marché, et ca marche toujours sauf sur cette injection là.

On parle de MySql et de l'antislash.

Ex : $Txt = 'Tout au long de l\'utilisation du back Office' ;
christobale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 23h46   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Avec mysql, utilise plutôt mysl_real_escape_string() qui est faite pour ça.

As-tu controlé ta chaine de requête censée être echappée ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 10h54   #5
Membre du Club
 
Inscription : mai 2007
Messages : 209
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 209
Points : 50
Points : 50
Suite a de nombreux test j'ai trouvé le pb, mais je ne l'explique pas.
Quand je fait un INSERT, les valeurs du form passe par une function (function GestionSql), pour justement mettre un slash d'échappement, passer le texte en htmlentities ...
Encore une foi tout fonctionne.

Par contre dans ce cas le texte ne provient pas d'un formulaire, mais il est écrit en dure dans le code, directement dans une autre fonction (function AjoutMessage) qui fera appel a la function GestionSql pour l'enregistrement.
L'appel se fait comme cela :
Code :
Messagerie::CreationMessage($id_destinataire, 'Sujet du message', 'Tout au long de l\'utilisation du back Office ...') ;
Et le pb est là. Dans l'état actuel du code, il ne marchera pas.
Mais si je conserve le slash d'échappement et si je remplace les simple quote de début et de fin par des double quote alors ça marche.

La question est POURQUOI ?
Pourquoi, la simple quote qui délimite mon texte semble ne pas être interprété comme tel, mais comme si elle se trouvais dans une chaine et que j'avais oublié de l'échapper.
christobale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 14h55   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
'Tout au long de l\'utilisation du back Office ...'
signifie
Tout au long de l'utilisation du back Office ...

"Tout au long de l\'utilisation du back Office ..."
signifie
Tout au long de l\'utilisation du back Office ...

La bonne méthode est d'écrire de manière naturelle :
"Tout au long de l'utilisation du back Office ..."
et d'utiliser mysql_real_escape_string()
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 15h08   #7
Membre du Club
 
Inscription : mai 2007
Messages : 209
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 209
Points : 50
Points : 50
j'ai remis le code d'origine, et j'ai mis un addslashes et tout rentre dans l'ordre.
le truc qui m'échappe est pourquoi le addslashes de ma fonction GestionSql, ne sais pas fait ?
Pt'être a causse de trop d'utilisation de fonction.
Bref ca ne me plait pas ce que j'ai fait mais c'est le moins perturbant. Surtout pour mes habitude de codage.
je regarderais comment intégrer le mysql_real_escape_string de manière auto aux traitement.
christobale est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h29.


 
 
 
 
Partenaires

Hébergement Web