PHP - Textarea - Retour Chariot - nl2br

Résolu
Matt -  
 katana -
Bonjour,

J'ai un petit soucis avec php, je m'explique :

L'utilisateur de mon site doit, via un textarea enregistrer un texte (ex: une news)

Lorsque l'utilisateur valide le tout, un fichier .txt est créé dans un répertoire x du serveur.

L'affichage du texte sur la page voule s'éffectue sans problème via la fonction include. (les sauts de lignes s'affiche également correctement via nl2br).

Lorsque le visiteur veut modifier ce texte, il l'édite le contenu du fichier dans un textarea. Et là, la balise <br /> s'affiche également.

Ce que je NE veut PAS. J'aimerai que la gestion des <br /> soit totalement transparente pour l'utilisateur, que le texte soit affiché exactement de la même façon que lorsque l'utilisateur l'a écrit....

Merci pour vos réponses.

8 réponses

  1. toto
     
    Bonjour

    Le problème, c'est que tu enregistres dans ta base un texte différent de celui que l'utilisateur à frappé. Quand tu enregistres nl2br(htmlentities($_POST["description"])), ton texte est altéré. Il faut enregistrer dans ta base mysql_real_escape_string($_POST["description"]) pour avoir le 'vrai' texte dans ta base.

    Plus tard, quand tu le récupères dans une variable $texte grâce à une requête, tu peux l'afficher :
    . dans un TEXTAREA grâce à htmlentities($texte)
    . hors TEXTAREA grâce à un nl2br(htmlentities($texte))
    16
  2. Matt
     
    Merci mais, j'ai déja essayé et ca ne change rien ... les <br /> sont toujours là...

    Voici mon code :

    <textarea name="modifenqqmpar1" wrap="physical" id="champs1" >
    <?php
    $text = include("../texte/pconnexion/enqqmpar1.txt");
    str_replace('<br/>', "\n", $text);
    echo $text;
    ?>
    </textarea>

    Cela est peut-être du au fait que j'attribue la valeur de ma commande include à ma variable $text ???
    0
  3. morphee
     
    il y a aussi des chances que tu vois <br /> affiche mais qu'en réalite ce soit htmlentities("<br />") donc adapte ton str8replace en fonction de ca
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. flawoz
     
    En effet, cela fonctionne avec un simple str_replace('<br />','',$text), mais il faut qu'il soit combiné avec un nl2br(htmlentities($_POST["nom de ton textarea"])) à la réception de la modification. Il te faut donc deux scripts.

    exemple :

    Modifier.php :
    <?
    $serveur="";
    $bdd_login="";
    $bdd_psw="";
    $bdd=$bdd_login;
    $db = mysql_connect($serveur,$bdd_login,$bdd_psw) or die ("Erreur 1 dans modifier.php :".mysql_error());
    mysql_select_db($bdd,$db) or die ("Erreur 2 dans modifier.php :".mysql_error());

    if(isset(htmlentities($_POST["description"]))){
    $description=nl2br(htmlentities($_POST["description"]));
    mysql_query("UPDATE `MaTable` SET `description` = '$description' WHERE pseudo = 'MonPseudo' LIMIT 1 ") or die("Erreur 2 dans modifier.php :".mysql_error());//
    }

    $req = mysql_query("SELECT * FROM MaTable WHERE pseudo='MonPseudo'") or die(mysql_error());
    $contenu = mysql_fetch_array($req);
    ?>

    <html>
    <body>
    <Form action="" method="post">
    <textarea name="description" cols="35" rows="10" id="textarea">
    <? print str_replace('<br />','',$contenu["description"]);?>
    </textarea>
    <input type="button" value="Enregistrer">
    </form>
    </body>
    </html>
    <? mysql_close();?>
    0
  6. LUDO
     
    IL ME SEMBLE DE MEMOIRE QUE LE FICHIERS .txt ne gere pas les retour charriots remplace le par un .php
    -1
  7. Utilisateur anonyme
     
    la balise <pre> permet d'effectuer un retour chariot automatique et il ny a donc pas besoin de <br />.
    tu place la balise <pre> au début de ta textarea et a la fin et quan un retour a la ligne, un saut de ligne... sera effectuer dans la textarea, il sera effectuer dans le fichier texte quan il aura été écrit dedans.
    mai je te conseille, de remplacer ton fichier texte par un fichier php.
    -1
    1. Jo
       
      Je ne sais pas exactement comment apparait ton texte, mais si au lieu d'afficher :

      bla bla bla
      bla bla bla

      tu as :

      bla bla bla <br />
      bla bla bla <br />

      un simple str_replace('<br />', '', $texte) devrait faire l'affaire, non ?

      je ne garanti rien je n'utilise pas les fichiers.
      0
    2. katana
       
      bonjour,
      je tarde un peu pour répondre mais peut être que plus tard ca pourra être utile.
      moi je fais comme ça :
      <?php
      $description=stripslashes(htmlentities($_POST["description"]));
      ?>
      0