$_GET et htmlspecialchars()

Résolu/Fermé
Ibrahim_76 Messages postés 14 Date d'inscription jeudi 10 janvier 2019 Statut Membre Dernière intervention 28 mars 2020 - Modifié le 12 janv. 2020 à 20:25
Ibrahim_76 Messages postés 14 Date d'inscription jeudi 10 janvier 2019 Statut Membre Dernière intervention 28 mars 2020 - 13 janv. 2020 à 08:29
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 :)
A voir également:

2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
12 janv. 2020 à 21:30
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 jeudi 10 janvier 2019 Statut Membre Dernière intervention 28 mars 2020
13 janv. 2020 à 08:28
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
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 jeudi 10 janvier 2019 Statut Membre Dernière intervention 28 mars 2020
13 janv. 2020 à 08:29
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