Salut à tous,
Je fais face à un problème d'échappement des caractères, que je n'arrive pas à résoudre. J'ai fait plusieurs recherches sur le net et sur ce forum, mais je n'ai rien trouvé qui correponde à mon problème (peut-être ai-je mal cherché...
).
Bref, le problème est le suivant. J'utilise PDO pour un accès à une BDD MySQL. J'ai un formulaire HTML de champs texte qui, une fois envoyé par l'utilisateur, est enregistré dans la BDD. Si l'utilisateur revient sur la page de formulaire après avoir enregistré une première fois ses infos, les infos en question apparaissent directement dans les champs appropriés.
Quand je veux écrire les données du formulaire dans la BDD (donc après validation de celui-ci) je prépare systématiquement mes requêtes. Mes magic_quotes sont à OFF, et le fait de préparer les requêtes m'évite d'avoir à faire des addslashes sur les données (si j'ai bien compris). De toute façon je n'ai pas de problème de ce côté-là.
Par contre, quand je réaffiche la page avec des données déjà enregistrées, les simple quotes (et tout le texte qui les suit) disparaissent. Je prends un exemple si
est enregistré dans la BDD, dans le champ texte, à l'affichage, j'aurai seulement
ce qui se comprend, puisque le code PHP ressemble à ça :
echo("<input type='text' value='$ma_valeur' />\n");
et le code HTML résultant ressemble à ça :
<input type='text' value='J'aime les bananes' />
J'ai tenté, au moment de l'affichage (dans la chaîne passée en paramère à echo) d'ajouter un htmlspecialchars(...., ENT_QUOTES) pour échapper le guillemet qui pose problème.
echo("<input type='text' value='".htmlspecialchars($ma_valeur,ENT_QUOTES)."' />\n");
L'affichage est alors correct, mais un autre problème se pose :
Quand le formulaire est envoyé, n'est enregistré dans la BDD que ce qui précède le guillemet (même problème que j'avais à l'affichage avant d'ajouter le htmlspecialchars). Je pense que ça vient de la préparation des requêtes, qui tombe sur un truc html spécial (l'échappement du guillemet suite au htmlspecialchars) et qui prend peur, le prenant pour une tentative d'injection SQL.
Seulement voilà, je ne sais pas comment faire pour avoir à la fois :
- l'affichage correct de ce qui est enregistré en BDD dans le champ texte
- l'enregistrement exact dans la BDD de cet affichage
J'espère avoir été à peu près clair. 
Merci pour vos réponses !
++
Charlock
Partager