|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre éclairé
![]() Chef de projet MOA Inscription : décembre 2004 Messages : 561 ![]() |
Bonjour,
Petit problème avec stripslashes et addslashes. Mon objectif est d'afficher un formulaire avec un champ de texte contenant une chaîne de caractères issue d'une base de données, afin de permettre à l'utilisateur de modifier cette chaîne pour mettre à jour ce champ dans la base de données. Pour cela dans le code j'utilise : Code :
<input type='text' name='texte' value="".stripslashes($variable).""> Code :
Exemple : Soit la chaine suivante: Test de la chaine "chaine" Dans la base de données, celle-ci est bien sous la forme: Test de la chaine \"chaine\" Mais dans le champ de texte il s'affiche: Test de la chaine Je précise que tout fonctionne bien avec les simples cotes. Quelqu'un peut-il me dire comment faire pour prendre en compte les doubles cotes? Merci. |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Normalement dans ta base de données tu devrais avoir "chaine" et pas \"chaine\". En fait tu appliques deux fois addslashes de suite ce qui fait que tes données sont doublement échappées. (une fois à cause de magic_quotes_gpc=on et une fois avec addslashes)
Ensuite, pour afficher dans un input, généralement je fais un |
|
|
00
|
|
|
#3 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Salut
En effet, le problème se situe à l'affichage : je présume que les guillemets de ta chaîne entrent en conflit avec les guilllemets qui délimitent la propriété "value" de ton <input type="text">. Au passage : jette un oeil sur mysql_real_escape_string() et ici : http://shiflett.org/archive/184 [Edit] @Mr N. : Si si, il doit bel et bien avoir \"chaîne\" dans le champ de son tuple. Non, il n'applique pas 2 fois addslashes() mais bien une seule fois.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Comment tu sais que addslashes n'a pas été appliqué deux fois ? Tu connais sa config ? Je parie qu'il a magic_quote_gpc = on donc addslashes + addslashes = 2 addslashes
Et dans une base de données on ne se trimbale pas des caractères d'échappement qui servent seulement à construire une requête donc on ne doit pas avoir \" ou \' une fois les données dans la base. Donc le problème se situe à l"affichage *et* au stockage |
|
|
00
|
|
|
#5 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Oui, bon j'étais pas en forme. Certes, je ne connais pas sa config.
Cela dit, il me semble que stripslashes() intervient systématiquement pour une raison simple : les antislashes sont bel et bien enregistrés dans la BDD. nicoaix n'a pas de \\\" dans sa base, c'est ce qui me fait dire qu'il n'a pas les magic quotes à ON.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Code :
|
||
|
|
00
|
|
|
#7 | |||
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Hmmm, après tests, oui.
Code :
Citation:
=> 'bouh' Code :
'INSERT INTO `test` (`name`) VALUES ("\\\'bouh\\\'")'
Code :
'INSERT INTO `test` (`name`) VALUES ("\\\\\'bouh\\\\\'")'
Code :
"INSERT INTO `test` (`name`) VALUES ('\'bouh\'')"
Code :
"INSERT INTO `test` (`name`) VALUES ("\\\'bouh\\\'")" Code :
"INSERT INTO `test` (`name`) VALUES ("\\\\\'bouh\\\\\'")"
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com