Problème saut de ligne dans un textarea

Problème saut de ligne dans un textarea - PHP - Programmation

Marsh Posté le 22-03-2009 à 15:03:11    

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>";


Reply

Marsh Posté le 22-03-2009 à 15:03:11   

Reply

Marsh Posté le 22-03-2009 à 16:53:30    

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

Reply

Marsh Posté le 22-03-2009 à 16:57:34    

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.

Reply

Marsh Posté le 22-03-2009 à 17:05:36    

Que me conseillez-vous ?

Reply

Marsh Posté le 22-03-2009 à 20:23:54    

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.

Reply

Marsh Posté le 23-03-2009 à 00:25:10    

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
Reply

Marsh Posté le 23-03-2009 à 10:05:26    

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 ...

Reply

Marsh Posté le 23-03-2009 à 11:31:31    

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
Reply

Marsh Posté le 23-03-2009 à 12:21:45    

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
Reply

Marsh Posté le 24-03-2009 à 12:12:38    

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. ?>

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed