Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2975 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème saut de ligne dans un textarea

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème saut de ligne dans un textarea

n°1864491
antitrust5​6
Posté le 22-03-2009 à 15:03:11  profilanswer
 

Bonjour à tous,
 
 
Je souhaite insérer à chaque saut de ligne de l'utilisateur un <br /> lorsque je récupère les données dans ma table.
 
Après des recherches sur le net, je suis tombé sur la fonction nl2br qui permet celà.
 
L'insertion des "<br />" se fait correctement mais lorsque je mets à jour mon textarea, je me retrouve avec plusieurs "<br />" collé à la suite.  
 
J'ai essayé nl2br(htmlentities($var)) mais rien ne s'insère dans ma table.
 
Insertion des données dans ma table
 

Code :
  1. $champ_form1 = addslashes($_POST['champ1']);
  2. $champ_form2 = addslashes($_POST['champ2']);
  3. $champ_form3 = addslashes($_POST['champ3']);
  4. $champ_form4 = addslashes($_POST['champ4']);
  5. $champ_formulaire1 = explode("\n",$champ_form1);
  6. $champ_formulaire2 = explode("\n",$champ_form2);
  7. $champ_formulaire3 = explode("\n",$champ_form3);
  8. $champ_formulaire4 = explode("\n",$champ_form4);
  9. ....


 
Affiche des données dans le textarea
 

Code :
  1. echo '<textarea name="champ'.$i.'" rows="10">';
  2. $sql_textarea = mysql_query("select id_description, texte$i"."_description from description where theme_description='$theme' and nb_morceaux_description='$nb'" );
  3. while ($donnees = mysql_fetch_array($sql_textarea)) {
  4. $content = nl2br($donnees["texte$i"."_description"]);
  5. echo htmlentities($content);
  6. }
  7. echo "</textarea>";


mood
Publicité
Posté le 22-03-2009 à 15:03:11  profilanswer
 

n°1864509
Siron
Posté le 22-03-2009 à 16:53:30  profilanswer
 

Le n12br ne doit pas s'utiliser avec un textarea car la textarea passe à la ligne avec le \n.

n°1864511
Profil sup​primé
Posté le 22-03-2009 à 16:57:34  answer
 

non c'est surtout que s'il affiche des <br /> dans un textarea c'est sûr qu'il obtiendra pas des sauts de lignes.
nl2br renvoie une chaîne où les sauts de lignes sont remplacés par des tags <br /> qui ne seront pas interprétés dans le textarea.

n°1864514
antitrust5​6
Posté le 22-03-2009 à 17:05:36  profilanswer
 

Que me conseillez-vous ?

n°1864559
Siron
Posté le 22-03-2009 à 20:23:54  profilanswer
 

Ben simplement dans le textarea tu n'utilises pas le nl2br, tu laisses tel quel (et dans ta table tu laisses les /n).
Ce n'est que avant l'affichage du contenu dans ta page web (mais pas dans un textarea) que tu utilises nl2br.

n°1864605
antitrust5​6
Posté le 23-03-2009 à 00:25:10  profilanswer
 

J'ai bien supprimer le nl2br dans le textarea comme vous me l'avez indiqué.
 
Cependant, le problème est que quand je le sors de ma boucle sql, les données s'insèrent bien dans ma table mais ne s'affiche dans mon textarea.  
 

Code :
  1. for($i=1;$i<=$nb;$i++) {
  2. $content = nl2br($donnees["texte$i"."_description"]);
  3. echo '<textarea name="champ'.$i.'" rows="10">';
  4. $sql_textarea = mysql_query("select id_description, texte$i"."_description from description where theme_description='$theme' and nb_morceaux_description='$nb'" );
  5. while ($donnees = mysql_fetch_array($sql_textarea)) {
  6. echo $content;
  7. }
  8. echo "</textarea>";
  9. }


Message édité par antitrust56 le 23-03-2009 à 00:26:53
n°1864653
Siron
Posté le 23-03-2009 à 10:05:26  profilanswer
 

A quoi sert ta requête sql ? tu n'utilises pas ton $donnees.
Relit ton code, tu essaye d'afficher un $content (avec toujours le n12br dedans ...) dans ton textaera, $content qui si je comprends bien devrait venir de la base de donnée, or l'appel à la bd se fait après ...

n°1864688
rufo
Pas me confondre avec Lycos!
Posté le 23-03-2009 à 11:31:31  profilanswer
 

pour réafficher ton texte dans le textarea, faut faire la transformation inverse de nl2br(). Pour ça, faut faire :  

Code :
  1. $content = str_replace(array('<br />'), array("\n" ), $content);


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1864719
antitrust5​6
Posté le 23-03-2009 à 12:21:45  profilanswer
 

J'ai fais la transformation inverse de nl2br() comme tu le précise sufo. Ça avance car je n'ai plus de <br /> qui sont affichés dans mon textarea mais lorsque je valide mon formulaire celà marche une fois et ensuite j'ai une ligne vide qui s'insère dans ma table et mes champs sont collés.
 
En fait Siron, je n'utilisais pas $donnees dans ma requête car j'avais essayé d'utiliser nl2br avant d'afficher le contenu dans ma page comme tu me l'as précisé.
 
Exemple, dans mes 4 textarea je rentre ces informations :
Les insertions dans ma base fonctionne parfaitement, mais lorsque je revalide mon formulaire j'ai des décalages dans ta table.
 
1.1 -> Titre 1
1.2 -> Titre 2
 
2.1 -> Description 1
2.2 -> Description 2
 
3.1 -> Mots-clés 1
3.2 -> Mots-clés 2
 
4.1 -> URL 1
4.2 -> URL 2
 
1ère insertion dans ma table :  
Ligne 1 : Titre 1, Description 1, Mots-clés 1, URL 1
Ligne 2 : Titre 2, Description 2, Mots-clés 2, URL 2
 
Revalidation du formulaire pour modification :  
Ligne 1 : Titre 1, Description 1, Mots-clés 1, URL 1
Ligne 2 : Titre 2, Description 2, Mots-clés 2, URL 2
Ligne 3 : '', '', '', ''
 
Revalidation
Ligne 1 : Titre 1Titre2, Description 1Description2, Mots-clés 1Mots-clés2, URL 1URL2
Ligne 2 : '', '', '', ''
Ligne 3 : '', '', '', ''
 
 
Je vous met le code complet pour que vous aide à comprendre mon problème.  
 

Code :
  1. <?php
  2. // Validation du formulaire
  3. if (isset($_GET['valid'])) {
  4. if ($theme<>"" ) {
  5. $req = "DELETE FROM description where theme_description='$theme'";
  6. mysql_query($req);
  7. $theme = $_POST['theme'];
  8. $nb = $_POST['nb'];
  9. $champ_form1 = addslashes($_POST['champ1']);
  10. $champ_form2 = addslashes($_POST['champ2']);
  11. $champ_form3 = addslashes($_POST['champ3']);
  12. $champ_form4 = addslashes($_POST['champ4']);
  13. $champ_formulaire1 = explode("\n",$champ_form1);
  14. $champ_formulaire2 = explode("\n",$champ_form2);
  15. $champ_formulaire3 = explode("\n",$champ_form3);
  16. $champ_formulaire4 = explode("\n",$champ_form4);
  17. $requete="INSERT INTO description (id_description, texte1_description, texte2_description, texte3_description, texte4_description, nb_morceaux_description, theme_description) VALUES";
  18. //on vérifie que les 4 tableaux ont la même dimension pour cela je les mets dans un tableau
  19. //où j'enlève les doublons : s'il ne me reste que 1 cellule = tous les tableaux ont la même dimension
  20. $tab_temp = array();
  21. array_push ($tab_temp,count ($champ_formulaire1),count ($champ_formulaire2),count ($champ_formulaire3),count ($champ_formulaire4));
  22. $resultat = array_unique ($tab_temp);
  23. if (count($resultat) == 1) //les tableaux ont la même dimension
  24. {
  25. for ($cle =0 ; $cle < count ($champ_formulaire1) ; $cle++)
  26. {
  27. $requete .= " ('','$champ_formulaire1[$cle]','$champ_formulaire2[$cle]','$champ_formulaire3[$cle]','$champ_formulaire4[$cle]','$nb','$theme'),";
  28. }
  29. //on enlève la , final qu'on ne veut pas
  30. $requete = substr ($requete,0,-1);
  31. mysql_query ($requete);
  32. }
  33. }
  34. else {
  35. echo "Vous n'avez pas sélectionner de thème";
  36. }
  37. }
  38. ?>
  39. <?php
  40. $sql_theme = mysql_query("select id_description_theme, nom_description_theme from description_theme order by nom_description_theme" );
  41. echo "<form action='' method='post'>";
  42. echo "S&eacute;lectionner le thème : ";
  43. echo "<SELECT name='theme' size='1'>";
  44. echo "<option value='test_description.php'>-- S&eacute;lectionner --</option>";
  45. while ($donnees = mysql_fetch_array($sql_theme)) {
  46. echo "<option value='".$donnees['nom_description_theme']."'";
  47. if($theme==$donnees['nom_description_theme']) echo " selected";
  48. echo ">".$donnees['nom_description_theme']."</option>";
  49. }
  50. echo "</SELECT>";
  51. echo "<input type='submit' value='Valider'>";
  52. echo "</form>";
  53. ?>
  54. ou ajouter votre thème
  55. <form action='test_description.php?ajout=1' method='post'>
  56. <input type="text" name="theme">
  57. <input type="submit" value="Ajouter">
  58. </form><br /><br />
  59. <center>Sélectionner un nombre de morceaux :
  60. <a href="test_description.php?nb=2">2</a> |
  61. <a href="test_description.php?nb=3">3</a> |
  62. <a href="test_description.php?nb=4">4</a> |
  63. <a href="test_description.php?nb=5">5</a></center>
  64. <br />
  65. <form method="post" action="test_description.php?valid=1">
  66. <input type="hidden" name="nb" value="<?php echo $nb; ?>">
  67. <?php
  68. for($i=1;$i<=$nb;$i++) {
  69. echo '<textarea name="champ'.$i.'" rows="10">';
  70. $sql_textarea = mysql_query("select id_description, texte$i"."_description from description where theme_description='$theme' and nb_morceaux_description='$nb'" );
  71. while ($donnees = mysql_fetch_array($sql_textarea)) {
  72. $content = str_replace(array('<br />'), array("\n" ), $donnees["texte$i"."_description"]);
  73. echo $content;
  74. }
  75. echo "</textarea>";
  76. }
  77. ?>
  78. <input type="submit" />
  79. </form>


Message édité par antitrust56 le 24-03-2009 à 09:10:22
n°1865222
antitrust5​6
Posté le 24-03-2009 à 12:12:38  profilanswer
 

Je choisis d'utiliser une autre méthode plus simple et d'avantage à ma porter parce que j'ai l'impression de me compliquer la vie à tout stocker dans ma table.
 
Je souhaite mélange mes 4 tableaux en utilisant la fonction "shuffle" mais en gardant l'ordre des tableaux ($tab1, $tab2, $tab3, $tab4)
 
Le mélange se passe bien mais c'est les tableaux se mélangent entre eux sans former de phrase.
En gros, je veux faire une jointure mais je vois pas comment m'y prendre vu que chaque boucle est spécifique à un tableau.  
 
 
 

Code :
  1. <?php
  2. $tab1 =  array(    'Boutique',
  3.          'Magasin',
  4.          'Collection de',
  5.   'Vente de',
  6.   'Gamme de ');
  7. $tab2 =  array(    'décoration d intérieur',
  8.   'déco maison',
  9.   'décoration',
  10.   'd idées déco',
  11.   'objet d intérieur');   
  12. $tab3 =  array(    'pour votre maison',
  13.   'pour décorer votre maison',
  14.          'pour l\'intérieur',
  15.   'à vendre',
  16.   'à acheter');
  17. $tab4 =  array( 'en promotion.',
  18.        'à des prix exclusifs.',
  19.        'haut de gamme.',
  20.        'de bonne qualité.',
  21.        'en toute simplicité.');    
  22. srand((float)microtime()*1000000);
  23. shuffle($tab1);
  24. shuffle($tab2);
  25. shuffle($tab3);
  26. shuffle($tab4);
  27. foreach ($tab1 as $tableau1) {
  28.     echo "$tableau1";
  29. }
  30. foreach ($tab2 as $tableau2) {
  31.     echo "$tableau2";
  32. }
  33. foreach ($tab3 as $tableau3) {
  34.     echo "$tableau3";
  35. }
  36. foreach ($tab4 as $tableau4) {
  37.     echo "$tableau4<br>";
  38. }
  39. ?>


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème saut de ligne dans un textarea

 

Sujets relatifs
Problème d'include suite à une mise à jour de PHPVersions de compilateur et JRE différentes = problème ?
probleme install sql mod phpbbProblème de const
Probleme de gif animé qui ne marche pas sur internetprobleme modelisation panier
ftp probleme upload consécutifs[WS Axis] Problème de sérialisation
[Visual C#] Problème projet après changement de PCProblème mystérieux en vbscript
Plus de sujets relatifs à : Problème saut de ligne dans un textarea


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR