disposition d'un texte sortant d'une base de donnée

Eléphant du PHP | 170 Messages

19 janv. 2008, 18:32

Bonjour a tous,

j'ai un formulaire de plusieurs lignes qui m'envoi son contenu ( du texte ) dans une base de données. Ce formulaire est parametré pour que les lignes ne fassent pas plus de 50 caracteres.
Malheureusement quand l'enregistrement se fait dans la bdd, tout redeviens en ligne.Et donc a l'affichage...pareil.
Quelle est la solution? organiser l'enregistrement dans la bdd ou a l'affichage?
Avez vous des exemples? merci

Mammouth du PHP | 804 Messages

19 janv. 2008, 18:39

bonjour
$texte = nl2br($texte );

ViPHP
AB
ViPHP | 5818 Messages

19 janv. 2008, 20:22

Comme l'a dit dogmongo, c'est donc à l'affichage que les retours lignes seront pris en compte avec la fonction nl2br().
Ils sont bien incrits dans ta bdd mais invisibles quand tu regardes directement dans phpmyadmin avec la fonction affichage.
Cependant si tu fais une sauvegarde de ta table (exportation) tu t'apercevras que le texte généré contient des "\r\n" qui indiquent la fin d'une ligne.
Lors de l'affichage de ton texte ce sont ces "\r\n" qui sont pris en compte par nl2br() pour effectuer un retour à la ligne.

Eléphant du PHP | 170 Messages

20 janv. 2008, 10:11

merci de vos conseil!

voici mes observations:
en realite j'ai un formulaire dont le code est celuici
<label>Descriptif (200 caracteres à valider): </label>
     <p>
    <textarea name="descriptif" cols="50" rows="20" wrap="PHYSICAL"></textarea>
  <p><br />
si lors de l'enregistrement du texte dans cette zone je valide par "enter" la fin de chaque ligne, lors de la restitution l'affichage est reproduit fidelement a l'enregistrement du formulaire.

Alors quelle est la bonne solution pour realiser cela?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 janv. 2008, 11:56

Avec un wrap (césure) ayant pour valeur "physical" ou "hard", les retours à la ligne sont encodés et transmis de manière à pouvoir être restitués et avoir des passages à la ligne à l'affichage.

En soit, c'est bien si tu veux afficher directement le résultat à l'écran ou le mettre dans un mail sans t'embêter. En revanche pour le mettre dans une base de données où l'on peut supposer qu'il sera édité, ou bien mis en forme de façon diverse selon qu'il sera restitué à l'écran, dans un textarea, dans un pdf, dans du xml, etc. il vaut à mon sens mieux ne pas forcer la césure et prendre le texte tel qu'il a été saisi.

Cela permet de le restituer tel quel dans un textarea pour le modifier, cela permet de l'afficher dans une page html en faisant simplement appel à la fonction nl2br() pour insérer des <br /> là où doivent se trouver les retours à la ligne, etc.

Donc à mon avis, vire simplement le wrap et reste sur la solution donnée plus haut :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 170 Messages

20 janv. 2008, 12:59

oui mais le probleme est que je viens de m'appercevoir que rien n'est pris en compte dans ma bdd!!

dans mon formulaire, je tappe mon texte, par exemple une grande phrase qui depasse la longueur du cadre, le texte reviens a la ligne mais le retour en lui meme n'est pas enregistré!! du coup quand je regarde dans ma bdd les fonction /n ou /br ne sont pas enregistrer meme en exportation.
De ce fait quand je veux afficher mon texte provenant de la bdd, j'ai tout sur la meme ligne, ma cellule s'agrandie est me decale tout

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 janv. 2008, 13:14

Euh... le retour à la ligne quand tu arrives au bout de la ligne est normal, c'est juste parce qu'il n'a plus de place, c'est ce que fait n'importe quel traitement de texte :) Seuls les retours à la ligne spécifiquement renseignés sont conservés.

Si tu veux à l'affichage limiter à un certain nombre de caractère pour produire le même effet, il te faut, en plus, utiliser la fonction wordwrap() :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 170 Messages

20 janv. 2008, 13:32

genial!!!!

ça marche exactement ce que je voulais!


encore une question!!!
et limiter le nombre de lignes, c'est possible ça???

Mammouth du PHP | 804 Messages

20 janv. 2008, 18:29

Bonjour,

pardonne moi , c'est parce que j'attendais une réponse sur un autre sujet, jétais tellement pressé qu'on me vienne en aide que j'ai montré l'exemple sans l'expliquer, j'étais un peu sur les nerfs désolé :oops: .