|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : mai 2007 Messages : 209 ![]() |
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 |
|
|
00
|
|
|
#2 |
![]() ![]() Vincent Inscription : juillet 2005 Messages : 14 929 ![]() |
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 |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : mai 2007 Messages : 209 ![]() |
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' ; |
|
|
00
|
|
|
#4 |
![]() ![]() Vincent Inscription : juillet 2005 Messages : 14 929 ![]() |
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 ? |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : mai 2007 Messages : 209 ![]() |
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 ...') ; 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. |
|
|
00
|
|
|
#6 |
![]() ![]() Vincent Inscription : juillet 2005 Messages : 14 929 ![]() |
'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() |
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : mai 2007 Messages : 209 ![]() |
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. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com