$_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   -
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'].

<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

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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...



1
Ibrahim_76 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,
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é.
0
Tramweb
 
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' ?
-1
Ibrahim_76 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Oui, le formulaire est en $POST, et une fois les données traitées, je les récupère et je les transmets en $GET à la page.
C'est le seul moyen que j'ai trouvé afin de pouvoir réupérer les données mais l'idée de jordane45 est intéréssante.
Merci à vous.
0