Partage
  • Partager sur Facebook
  • Partager sur Twitter

<br /> dans textarea

Sujet résolu
    23 février 2014 à 20:46:41

    Bonjour,

    j'ai un textarea que je pré-rempli, qui est plein de "<br />" qui sont venu s'ajouter.

    je vois dans pratiquement tous les forums qu'il faut utiliser str_replace :

    $var_1 = str_replace('<br />', "\n", $_SESSION['var_2']);


    Mais ça ne fonctionne pas.

    j'explique le contexte : 

    dans form.php j'ai un formulaire dans lequel il y a un champ "commentaire" (en "textarea")

    quand l'utilisateur envoie le formulaire, on va sur check_form.php,
    ici, si le formulaire n'est pas valide pour X raisons, on enregistre le commentaire en variable de SESSION ($_SESSION['commenta
    ire']).

    et on redirige l'utilisateur sur form.php.

    Pour éviter à l'utilisateur de RE-remplir tous les champs du formulaire ceux-ci sont déjà pré-rempli avec ce qu'il venait d'écrire (enregistré dans des variables de SESSION).

    Exemple de code avec le champ "commentaire" :

    form.php :

    <?php
    if (isset($_SESSION['commentaire'] && $_SESSION['commentaire'] != "")
    {
        $commentaire = str_replace('<br />', "\n", $_SESSION['commentaire']);
    }
    else
    {
        $commentaire = '';
    }
    ?>
    
    <textarea name="commentaire"><?php echo $commentaire; ?></textarea>
    
    <?php $_SESSION['commentaire'] = ""; ?>



     d'autres parlent de htmlentities ou addslashes... Je n'y arrive pas...

    C'est tout de même étrange que str_replace ne fonctionne pas... Je n'arrive plus à avancer.


     

    -
    Edité par SlaCk_457 23 février 2014 à 20:51:04

    • Partager sur Facebook
    • Partager sur Twitter
      23 février 2014 à 20:52:21

      Bsr, 

      Regarde du côté de nl2br => http://php.net/manual/fr/function.nl2br.php

      • Partager sur Facebook
      • Partager sur Twitter
        23 février 2014 à 21:01:39

        après ceci

        $commentaire = str_replace('<br />', "\n", $_SESSION['commentaire']);

        fait un var_dump($commentaire); pour voir

        sinon comme anva => nl2br

        • Partager sur Facebook
        • Partager sur Twitter
        Les gens qu'on interroge, pourvu qu'on les interroge bien, trouvent d'eux-mêmes les bonnes réponses.
          23 février 2014 à 21:56:07

          Non, la fonction dont il aurait besoin serait br2nl vu qu'il a des <br/> et il veut les transformer en new lines. Mais cette fonction n'existe pas et c'est normal.

          Plutôt que de chercher à transformer tes br en nl, tu devrais te poser la question, pourquoi est-ce que tu as des <br/> ? De base lorsque tu reçois les données de ta textarea tu les reçois avec des \n.

          Est-ce que tu n'appellerais pas nl2br sur ta donnée avant de la mettre en session ?

          • Partager sur Facebook
          • Partager sur Twitter
            23 février 2014 à 22:25:13

            Parce que nl2br n'est à faire qu'à l'affichage (et hors textarea).

            • Partager sur Facebook
            • Partager sur Twitter
              23 février 2014 à 23:18:57

              Merci beaucoup pour vos réponses,

              je pense que Jack River à raison, ce n'est pas nl2br qu'il me faut.

              ----------------------------------------------------------------------------------------

              Jack River a écrit:

              tu devrais te poser la question, pourquoi est-ce que tu as des <br/> ? De base lorsque tu reçois les données de ta textarea tu les reçois avec des \n.

              Exactement ! Je me suis posé la question en effet...
              J'en arrive à me dire que c'est parce-que je passe par une variable de SESSION, parce-que dans mon code j'ai UNIQUEMENT :

              $commentaire = str_replace('<br />', "\n", $_SESSION['commentaire']);

              et

              <textarea name="commentaire"><?php echo $commentaire; ?></textarea>

              Rien d'autres ne touche à "$commentaire".
              Mais je ne fais que supposer... 

               ----------------------------------------------------------------------------------------

              thojocker9 a eu une très bonne idée avec le var_dump (merci !)

              $commentaire = str_replace('<br />', "\n", $_SESSION['commentaire']);
              
              var_dump($commentaire);

              m'affiche :

              string 'Mon commentaire&lt;br /&gt;
              &lt;br /&gt;
              est &eacute;crit&lt;br /&gt;
              sur 4 lignes.' (length=86)


              Pour Info j'avais écris :

              Mon commentaire
              
              est écrit
              sur 4 lignes.

              ----------------------------------------------------------------------------------------


              J'ai donc essayé d'utiliser "preg_replace()", mais j'ai un peu de mal avec les expressions régulières.

              J'ai éssayé de remplacer ça :

              $commentaire = str_replace('<br />', "\n", $_SESSION['commentaire']);

              par ça :

              $commentaire = preg_replace('/^&lt;br[\s]\/&gt;$/', "\n", $_SESSION['commentaire']);


              Mais ça ne fonctionne pas.

              [EDIT]

              je ne sais pas si c'est important de vous le montrer mais le "echo" ne m'affiche pas la même chose que le "var_dump" :

              $commentaire = preg_replace('/^&lt;br[\s]\/&gt;$/', "\n", $_SESSION['commentaire']);
              
              echo $commentaire.'<br>';
              var_dump($commentaire);

              m'affiche :

              Mon commentaire<br /> <br /> est écrit<br /> sur 4 lignes.
              string 'Mon commentaire&lt;br /&gt;
              &lt;br /&gt;
              est &eacute;crit&lt;br /&gt;
              sur 4 lignes.' (length=86)






               



              -
              Edité par SlaCk_457 23 février 2014 à 23:33:41

              • Partager sur Facebook
              • Partager sur Twitter
                23 février 2014 à 23:48:09

                Que pense tu de

                $commentaire = str_replace('&lt;br /&gt;', "\n", $_SESSION['commentaire']);



                • Partager sur Facebook
                • Partager sur Twitter
                Les gens qu'on interroge, pourvu qu'on les interroge bien, trouvent d'eux-mêmes les bonnes réponses.
                  24 février 2014 à 0:29:12

                  thejocker9 a écrit:

                  Que pense tu de

                  $commentaire = str_replace('&lt;br /&gt;', "\n", $_SESSION['commentaire']);

                  Argh vous allez me tuer ! Vous cherchez une solution au problème avant d'avoir identifié la cause, vous traitez les symptômes plutôt que la maladie.

                  SlaCk_457 a écrit:

                  Exactement ! Je me suis posé la question en effet...

                  J'en arrive à me dire que c'est parce-que je passe par une variable de SESSION, parce-que dans mon code j'ai UNIQUEMENT :

                  $commentaire = str_replace('<br />', "\n", $_SESSION['commentaire']);

                  et

                  <textarea name="commentaire"><?php echo $commentaire; ?></textarea>

                  Rien d'autres ne touche à "$commentaire".
                  Mais je ne fais que supposer... 


                  Tu ne regardes pas au bon endroit. Comme tu l'as remarqué, tu extrais tes données de ta session et celles-ci contiennent des <br/>. C'est donc que l'ajout des <br/> se fait au moment de l'insertion en session.

                  Peux-tu nous donner le code qui met en session les variables de ton formulaire après le POST ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 février 2014 à 1:19:21

                    wouhouuu ! c'est bon ! :D

                    Jack River a écrit:

                    Peux-tu nous donner le code qui met en session les variables de ton formulaire après le POST ?

                    Tu as vu juste, le code était :
                    $_SESSION['$commentaire'] = htmlentities(nl2br($_POST['commentary']));


                    Je ne sais pas du tout ce que ce nl2br faisait là... J'ai sûrement du faire des tests il y a longtemps et j'aurai oublié de l'effacer...

                    ---------------------------------------------------------------------------------------------------------------

                    thejocker9 a écrit:

                    Que pense tu de

                    $commentaire = str_replace('&lt;br /&gt;', "\n", $_SESSION['commentaire']);


                    Je vais quand même répondre ^^

                    si j'écrivais :

                    Mon commentaire
                    
                    est écrit
                    sur 4 lignes.

                    ça m'affichait :

                    Mon commentaire
                    
                    
                    est écrit
                    
                    sur 4 lignes.

                    C'était presque bon ^^

                    ---------------------------------------------------------------------------------------------------------------

                    Mais c'est bon c'était donc ce nl2br qui traînait qui était la cause...

                    Jack River a écrit:

                    Argh vous allez me tuer ! Vous cherchez une solution au problème avant d'avoir identifié la cause, vous traitez les symptômes plutôt que la maladie.

                    Bien vu ;)
                    PS : impossible de trouver le bouton "résolu"...

                    -
                    Edité par SlaCk_457 24 février 2014 à 1:20:54

                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 février 2014 à 22:21:17

                      Bonne nouvelle,

                      Juste pour compléter la réponse, tu peux aussi enlever le htmlentities().

                      La remarque de Julp un peu plus haut est pertinente, ces fonctions que tu appelles (nl2br et htmlentities) ont une utilité, mais seulement lorsque tu cherches à afficher ce contenu dans une page Web.

                      Admettons que tu souhaites mettre un message d'erreur à l'utilisateur : "Le commentaire commentaire que vous avez écrit est incorrect" (où bien sûr commentaire contient le message qu'a écrit la personne).

                      Dans ce cas là :

                      • Les \n ne seront pas interprétés comme des sauts de ligne (c'est pourquoi tu dois utilise nl2br)
                      • Les caractères spéciaux (<, >, &) ne seront pas transformés et cela pose des problèmes de sécurité (c'est pourquoi tu dois utiliser htmlentities() ou htmlspecialchar()

                      Ces fonctions sont donc utiles à l'affichage. Mais quand tu stockes de l'information (dans une session, dans un fichier ou même dans une BD), elle doit être le plus possible fidèle à celle que l'utilisateur a saisi et la plus pure possible (indépendante d'un langage, donc pas de HTML par exemple).

                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 février 2014 à 9:04:24

                        D'accord,

                        merci pour l'aide, et les conseils,

                        c'est super sympa :)

                        • Partager sur Facebook
                        • Partager sur Twitter

                        <br /> dans textarea

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown