Bonjour,
J'aurais deux petites questions en rapport au tutorial PHP publié sur YouTube.
1) J'ai toujours entendu dire que la règle numéro 1 était de ne pas faire confiance en les données fournies par l'utilisateur. Or dans le tutoriel on ne protège jamais les variables $_POST envoyées par l'utilisateur par un htmlspecialchars, pourquoi ? J'aurais tendance à croire que c'est nécessaire étant donné qu'on affiche ces variables soit sur la page de formulaire lorsqu'il y a eu une erreur et qu'on veut éviter que l'utilisateur perde tout ce qu'il avait écrit, soit dans l'email envoyé.
Par contre j'ai fais un test, sans htmlspecialchars, en injectant du code html dans mon formulaire. Dans le champs name j'écris "< b >Benoit< / b >" et que je provoque une erreur pour réaffichier le formulaire avec mes données précédemment rentrées, je vois que le champs name est "< b >Benoit< / b >", c'est à dire que les balises html sont bien présentes mais ne sont pas "lues" vu que le nom n'est pas mis en gras. Pourquoi les balises html sont ignorées alors qu'on a pas utilisé de htmlspecialchars ?
2) J'ai ajouté un champs titre à mon formulaire. Ce champs est susceptible de recevoir des titres contenant des apostrophes et des guillemets. Or dans ce cas, si une erreur survient dans mon formulaire et que le titre contenant des apostres et guillemets et réaffiché sur la page du formulaire, le titre est tronqué au niveau des guillemets ou des apostres, en fonction de si j'ai utilisé des "" ou des '' dans mon code. Comment résoudre ce soucis ?
Voilà, j'espère que l'un de vous saura m'éclairer, merci.
Salut salut,
Alors pour répondre à ta question, je pense que dans ta base de données tu a un champ nom dont la valeur d'une de t'es entrée est <b>Benoit<b>, Cependant lorsque tu met htmlspecialchars sur une des valeur en html, cette fonction va "Echapper ton code" et donc te l'afficher en temps que texte, il faut donc que tu le décode lors de ton affichage, exemple:
$variable = "<b>Benoit</b>"
$variable= htmlspecialchars($variable); //Permet d'échapper le code
$html = htmlentities($variable);
Pour résoudre ton soucis avec les guillemets
, un addslashes() sur ton titre devrait lui aussi faire l'affaire,
il va rajouter un antislash dans ta chaîne, pour décoder cette chaîne là, il suffit d'utiliser stripslashes() sur ta variable
Je te redirige vers la documentation en complément d'informations:
http://php.net/manual/fr/function.htmlentities.php
http://php.net/manual/fr/function.addslashes.php
http://php.net/manual/fr/function.stripslashes.php
J'espère avoir t'avoir aidé.
A bientôt.
Salut,
Les tutoriels sont là pour apprendre, après c'est à toi de peaufiner derrière ;)
Pour ton souci de guillements, utilises justement la fonction htmlspecialchars()
afin d'échapper les caractères spéciaux. Puis à l'affichage, réaffiche correctement les entités échappées.
Un grand merci pour vos réponses.
L'addslashes() fonctionne super !
Par contre je ne comprends pas un truc...
"Pour ton souci de guillements, utilises justement la fonction htmlspecialchars() afin d'échapper les caractères spéciaux. Puis à l'affichage, réaffiche correctement les entités échappées."
On échappe les caractères spéciaux justement pour éviter qu'à l'affichage on ait des problèmes de sécurité, alors pourquoi réafficher correctement les entités échappées à l'affichage, à quoi tout l'échappement aura t il servi ?