$_GET et htmlspecialchars()
Résolu
Ibrahim_76
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
-
Ibrahim_76 Messages postés 14 Date d'inscription Statut Membre Dernière intervention -
Ibrahim_76 Messages postés 14 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Je sollicite votre aide concernant un problème que j'ai rencontré sur mon site web.
J'ai un formulaire qui permet d'ajouter des news sur mon blog, il fonctionne parfaitement.
Lorsque l'utilisateur fait une erreur (choisis un pdf au lieu d'une photo pour l'illustration), ça fonctionne également, cependant je souhaiterai garder la saisie de l'utilisateur dans le formulaire afin qu'il ne l'ai pas à réécrire le contenu et le titre.
J'y arrive, mais il y a une variable qui ne passe pas.
Pour l'envoi du formulaire, j'envoie mes 2 variables $_POST['title'] et $_POST['content'].
Lorsque je récupère les variables, je leur applique le htmlspecialchars() avant de les envoyer au controller :
Je récupère les données, tout fonctionne, cependant lorsqu'il y a une erreur et que j'envoie les données en $GET via l'url afin de les récupérer à nouveau dans le formulaire, il n'y a que le title qui passe, et pas le $_GET['content']
Et bizarrement, lorsque je supprime le htmlspecialchars() pour le content, ça fonctionne.
J'utilise tinyMCE pour le content, peut-être que c'est lié?
J'aimerai juste comprendre pourquoi ce problème.
Merci d'avance pour votre aide :)
Je sollicite votre aide concernant un problème que j'ai rencontré sur mon site web.
J'ai un formulaire qui permet d'ajouter des news sur mon blog, il fonctionne parfaitement.
Lorsque l'utilisateur fait une erreur (choisis un pdf au lieu d'une photo pour l'illustration), ça fonctionne également, cependant je souhaiterai garder la saisie de l'utilisateur dans le formulaire afin qu'il ne l'ai pas à réécrire le contenu et le titre.
J'y arrive, mais il y a une variable qui ne passe pas.
Pour l'envoi du formulaire, j'envoie mes 2 variables $_POST['title'] et $_POST['content'].
<form method="POST" action="index.php?action=addPost" enctype="multipart/form-data"> <div class="row"> <div class="col-25"> <label for="title">Titre du billet</label> </div> <div class="col-75"> <input type="text" maxlength="20" size="25" name="title" required value='<?php if(isset($_GET['title'])){ echo $_GET['title']; } ?>'> <input type="file" id="avatar" name="avatar" required><br> </div> </div> <div class="row"> <div class="col-25"> <label for="content">Contenu</label> </div> <div class="col-75"> <textarea class="tiny" col="45" row="45"type="text" style="height:200px" name="content"> <?php if(isset($_GET['content'])){ echo $_GET['content']; } ?> </textarea><br> <input type="submit" class="boutons" value="Envoyer"> </div> </div> </form>
Lorsque je récupère les variables, je leur applique le htmlspecialchars() avant de les envoyer au controller :
case 'addPost' : // lancement ajout addPost($_FILES,htmlspecialchars($_POST['title']),htmlspecialchars($_POST['content']),htmlspecialchars($_SESSION['pseudo'])); break;
Je récupère les données, tout fonctionne, cependant lorsqu'il y a une erreur et que j'envoie les données en $GET via l'url afin de les récupérer à nouveau dans le formulaire, il n'y a que le title qui passe, et pas le $_GET['content']
catch (Exception $e){ header('Location: index.php?action=add&title='.$title.'&content='.$content.'&message='.$e->getMessage()); }
Et bizarrement, lorsque je supprime le htmlspecialchars() pour le content, ça fonctionne.
J'utilise tinyMCE pour le content, peut-être que c'est lié?
J'aimerai juste comprendre pourquoi ce problème.
Merci d'avance pour votre aide :)
2 réponses
Bonjour,
Plusieurs choses....
htmlspecialchar est une fonction qui ne doit s'utiliser QUE pour de l'affichage.... jamais avant l'insertion en BDD.
Les url peuvent être limitées en taille... donc si tu balances tout ton contenu dans l'url.. ça peut ne pas passer
Les textarea envoient les sauts de ligne en caractères "nl" ... alors que les retours à la ligne html sont des balises BR
Tu peux essayer d'utiliser la fonction nl2br() pour convertir...
plutot que de passer par l'url pour renvoyer les données dans le formulaire je te conseillerai d'utiliser des cookies ou le localstorage du navigateur...
Plusieurs choses....
htmlspecialchar est une fonction qui ne doit s'utiliser QUE pour de l'affichage.... jamais avant l'insertion en BDD.
Les url peuvent être limitées en taille... donc si tu balances tout ton contenu dans l'url.. ça peut ne pas passer
Les textarea envoient les sauts de ligne en caractères "nl" ... alors que les retours à la ligne html sont des balises BR
Tu peux essayer d'utiliser la fonction nl2br() pour convertir...
plutot que de passer par l'url pour renvoyer les données dans le formulaire je te conseillerai d'utiliser des cookies ou le localstorage du navigateur...
salut,
curieux aussi que vous ayez des données en GET alors que le formulaire est en POST. Vous passez pas une réécriture dans l'URL quelque part ce qui permettrais d'ajouter des données GET 'manuellement' ?
curieux aussi que vous ayez des données en GET alors que le formulaire est en POST. Vous passez pas une réécriture dans l'URL quelque part ce qui permettrais d'ajouter des données GET 'manuellement' ?
Merci pour ta réponse rapide.
J'utilise la fonction htmlspecialchars pour éviter les injections XSS.
C'est une bonne idée d'utiliser les cookies ou le local storage, merci pour l'astuce, je n'y avais pas pensé.