[PHP MySQL] Retour chariot non pris en compte dans les champs

Retour chariot non pris en compte dans les champs [PHP MySQL] - Programmation

Marsh Posté le 05-12-2001 à 22:11:57    

ReSlt à tous!
Voilà, g ds une page un champ de saisie en <TEXTAREA>... Seul problème, quand je saisi du texte ds ce champ avec des retours à la ligne, et que je met cette variable dans une table, quand je veux afficher ce qu'il y a dans cette table, est ben tous les retours à la ligne ont disparus!

Reply

Marsh Posté le 05-12-2001 à 22:11:57   

Reply

Marsh Posté le 06-12-2001 à 00:00:24    

pour prendre en compte les retours, avant ke tu envoies ton text a ta base, tu tapes :
 
$text = nl2br($text);
 
et apres tu peux envoyer !!

Reply

Marsh Posté le 07-12-2001 à 22:12:39    

ah ouais mais mintenant...il y a un autre problème!
C'est que quand il y a des retours à la ligne, quand j'affiche le résultat, j'obtiens  
 
test avec... <br> retour à la <br> ligne
 
comment faire pour que le <BR> soit bien interprété?

Reply

Marsh Posté le 07-12-2001 à 22:55:14    

:cry:

Reply

Marsh Posté le 07-12-2001 à 23:08:55    

tu remplaces '<br>' par '\n' avec str_replace() avant de balancer le texte dans le textarea.
 
edit : attention aux dernières versions de php qui insèrent <br /> et non pas <br>.

 

[edtdd]--Message édité par youdontcare--[/edtdd]

Reply

Marsh Posté le 07-12-2001 à 23:12:00    

Tu stockes tes données en brut (avec les \n)
 
Il y a qu'a l'affichage hors <TEXTAREA..></..> que tu utilises nl2br()
 
@+

Reply

Marsh Posté le 07-12-2001 à 23:12:50    

fly LM a écrit a écrit :

Tu stockes tes données en brut (avec les \n)
 
Il y a qu'a l'affichage hors <TEXTAREA..></..> que tu utilises nl2br()
 
@+  



tu fais ce genre de transformations à l'affichage ? les smileys aussi ? :??:

Reply

Marsh Posté le 07-12-2001 à 23:31:00    

je comprend rien les zamis!!!
j'ai essayé de faire  
 
$texte = nl2br($texte);
$texte = str_replace("<br>", "\n", $texte);

 
 
ça marche tj po!!!
Je précise que j'appelle mon texte par le code
 
<TD><FONT SIZE=\"1\" FACE=\"verdana\">", htmlentities($r["texte"]), "</TD>
 
...qu'est ce qui va pas? Mon texte s'affiche tj sans les retours à la ligne...Qu'est ce qu'il faut que je mette exactement?
 
Merci à tous!!!!!

Reply

Marsh Posté le 08-12-2001 à 09:34:32    

:cry:

Reply

Marsh Posté le 08-12-2001 à 10:54:54    

youdontcare a écrit a écrit :

tu fais ce genre de transformations à l'affichage ? les smileys aussi ? :??:  




 
Surtout si tu as des smilies et que tu veux éditer ton texte plus tard... Ca me semble beaucoup plus simple de récuper un texte avec des "codes spéciaux" pour les smilies que de tenter de remplacer leur balise image par leur code... Enfin là, chacun fait ce que bon lui semble...
 
Perso, sans parler de smilies, dans le cas de toto21, je stockerai ce qui ce trouve dans le <TEXTAREA></...> sans traiter le \n... Cela evite de traiter quand tu veux éditer de nouveau  ce texte... Par contre tu dois quand même être obligé de traiter les caractères échappés afin de pas te retrouver avec des trucs comme cela :"  l\\\\'autre " après quelques manipulations...
 
Les \n, je les traiterai qu'à l'affichage en dehors d'un <textarea><..>
 
@+

Reply

Marsh Posté le 08-12-2001 à 10:54:54   

Reply

Marsh Posté le 08-12-2001 à 10:59:59    

Quoique, cela peux être pratique de traiter avant de stocker, surtout pour un forum comme ici, ou il y a surtout de l'affichage plus que de l'édition de post...
 
J'aimerai bien savoir dans quel sens il font leur traitement...

Reply

Marsh Posté le 08-12-2001 à 13:08:14    

fly LM a écrit a écrit :

Surtout si tu as des smilies et que tu veux éditer ton texte plus tard... Ca me semble beaucoup plus simple de récuper un texte avec des "codes spéciaux" pour les smilies que de tenter de remplacer leur balise image par leur code... Enfin là, chacun fait ce que bon lui semble...


ok :) moi je convertis tout à chaque fois pour ne rien avoir à faire à l'affichage. je fais pas mal de str_replace() pour les smileys (méthode sûrement pas top), mais j'avoue que je n'ai jamais testé la vitesse en faisant toutes les transfos à l'affichage. l'idéal (je pense) serait de garder deux champs : le texte original tel qu'entré par l'utilisateur, et le texte 'caché' avec les smileys insérés, les <br>, etc ... mais bon ça boufferait 2x plus.

Reply

Marsh Posté le 09-12-2001 à 20:38:13    

Répondez moi les zamis!
Quelle syntaxe exacte fo que je mette avec le str_replace...
Paske moi ça marche po...
Merci
@+

Reply

Marsh Posté le 09-12-2001 à 20:39:19    

toto21 a écrit a écrit :

Répondez moi les zamis!
Quelle syntaxe exacte fo que je mette avec le str_replace...
Paske moi ça marche po...
Merci
@+  




 
c koi la syntaxe ke tu as ?

Reply

Marsh Posté le 09-12-2001 à 20:41:13    

fly LM a écrit a écrit :

Quoique, cela peux être pratique de traiter avant de stocker, surtout pour un forum comme ici, ou il y a surtout de l'affichage plus que de l'édition de post...
 
J'aimerai bien savoir dans quel sens il font leur traitement...  




 
je dirais qu'il font leur traitement a l'affichage parce que kan tu edit/repond a un message, je pense ke ca va chercher le texte dans la base et tu veras les smileys sont ecris :  l o l :

Reply

Marsh Posté le 09-12-2001 à 21:04:53    

toto21 a écrit a écrit :

Répondez moi les zamis!
Quelle syntaxe exacte fo que je mette avec le str_replace...
Paske moi ça marche po...
Merci
@+  



2 solutions : 1) soit tu fais les transfos à l'affichage (plus lent), 2) soit tu les fais directement dans la db, et tu les refais pour l'édition.
 
1) tu stockes ce que te renvoie le textarea dans ta table, et à l'affichage du message tu transformes le texte avec nl2br(), qui va remplacer les retours à la ligne textarea \n par des retours à la ligne html <br>. c'est tout.  
 
2) tu transformes les \n par des <br> lors de l'insertion dans la db : nl2br() ou str_replace(). si tu veux éditer le message dans un textarea, tu verras des <br> à la place des retours à la ligne. donc là il faut remplacer les <br> par \n avec str_replace().

Reply

Marsh Posté le 09-12-2001 à 21:25:51    

youdontcare a écrit a écrit :

tu remplaces '<br>' par '\n' avec str_replace() avant de balancer le texte dans le textarea.
 
edit : attention aux dernières versions de php qui insèrent <br /> et non pas <br>.  
 
 




 
pkoi d'ailleurs ... il parait que c'est poor la compabilité avec le xml ... mais bon

Reply

Marsh Posté le 09-12-2001 à 21:31:05    

skylight a écrit a écrit :

pkoi d'ailleurs ... il parait que c'est poor la compabilité avec le xml ... mais bon


c'est pour la compatibilité xhtml, pas xml. ça veut juste dire qu'il faut fermer toutes les balises, donc un <br> doit être fermé par </br>. le raccourci pour fermer une balise unique est juste de rajouter le slash à la fin : <br />, <img src='..' />, etc.

Reply

Marsh Posté le 09-12-2001 à 21:47:28    

Bah ma syntaxe c'est dèjà dit plus haut!!!
 
$texte = nl2br($texte);
$texte = str_replace("<br>", "\n", $texte);
 
et pour afficher le résultat  :
 
$query = "SELECT * FROM nouvelle" .  
         " ORDER BY date desc;";  
$result = mysql_query($query);  
while ($r = mysql_fetch_array($result)) {  
 
echo "<TD><FONT SIZE=\"1\" FACE=\"verdana\">", htmlentities($r["texte"]), "</TD>"
}

 
et ben en résultat, j'ai les <BR> qui s'affichent!!!
Kes ki va pas?

Reply

Marsh Posté le 09-12-2001 à 22:12:40    

C'est la fonction htmlentities() qui te fait cela, elle convertit tous les caractères spéciaux en entité HTML.  
 
le < se trouve transfrormé en <
le > en >
etc...

Reply

Marsh Posté le 10-12-2001 à 17:42:36    

faut que je fasse comment alors!!???

Reply

Marsh Posté le 10-12-2001 à 18:02:23    

J'ai le mem blem moi aussi, mais j'arrive quand meme à prendre en compte les SAUTS de lignes manuels (quand on fé ENTREE) mais pas ceux qui se font auromatikement ...
 
toto =>
 
Dans les propriétés de la Textarea tu met WRAP=VIRTUAL
Et pis avant la requette mysql tu fé nl2br et pis ca march (a moitié)
 
Pliz help  :hello:

Reply

Marsh Posté le 10-12-2001 à 18:02:36    

Oups, j'ai rien dit...

 

[edtdd]--Message édité par fly LM--[/edtdd]

Reply

Marsh Posté le 10-12-2001 à 18:06:00    

De quoi ?

Reply

Marsh Posté le 10-12-2001 à 18:13:10    

Non non rien, ça a cliqué malgré moi...

Reply

Marsh Posté le 10-12-2001 à 18:16:31    

a oki  :)  
tu sais po pk ca me fé pas des sauts de lignes automatiques ?

Reply

Marsh Posté le 10-12-2001 à 18:20:00    

Maxaks a écrit a écrit :

a oki  :)  
tu sais po pk ca me fé pas des sauts de lignes automatiques ?  




Des saut de ligne automatiques ??? Koi c'est ça  ???
 
C'est lorsque tu est au bout de ta fenêtre du TEXTAREA que tu passe automatiquement à la ligne suivante ???

Reply

Marsh Posté le 10-12-2001 à 18:29:05    

ouaiche  :D

Reply

Marsh Posté le 10-12-2001 à 18:32:30    

Pour toto21 :
 
1. l'utilisateur saisie son texte dans la zone du <textarea>...</>
 
2. tu peux comme te l'a dit Youdontcare stocker dans ta base de données le texte traité, c.a.d tu remplaces les \n par des <br> au moyen de la fonction nl2br().
 
3. lorsque tu veux afficher le texte dans une page HTML (pas dans un textarea), tu a juste à faire ta requête et voilà c'est bon, pas de traitement à effectuer...
 
4. Lorsque tu veux éditer le texte, tu le replaces dans une zone "textarea" ce qui t'impose de traiter le contenu du texte. Tu fais ta requête et là et seulement là tu utilises le str_replace("<br>", "\n", $texte); afin que les sauts de ligne soient bien affichés dans ton textarea... Lorsque tu valides l'édition, tu utilises à nouveau le nl2br() afin de remplacer les \n par des <br> et tu stockes le résultat traité en base de données...
 
C'est simple non ???

Reply

Marsh Posté le 10-12-2001 à 18:36:48    

Maxaks a écrit a écrit :

ouaiche  :D  




 
Si tes sauts de lignes automatiques sont effectivement le fait que lorsque tu arrives en bout de zone, tu passes à la ligne suivante, tu peux oublier, c'est pas des sauts de lignes !!!
 
Si tu veux avoir un texte formaté à la saisie comme à l'affichage, la largeur de ta zone "textarea" devra être équivalente à la largeur du tableau (pourquoi pas !!) dans lequel ton texte sera affiché...
 
@+

Reply

Marsh Posté le 10-12-2001 à 19:05:45    

:sweat:  
je voudrais pas être chaint...mais j'y arrive toujours pas!!!!
 :cry:  
 
 
En fait je résumé un peu plus...
Sur mon site, les gens rentrent du texte avec d'autres données (auteur, e-mail, titre...)
Donc je fais mon formulaire avec un textarea pour le texte et j'envoi tout ça dans une base de données...
Et c'est peut être là que je m'y prend mal...
Parce que je veux ensuite que tout ça soit affiché sur une page donc je fais une requête :
 
$query = "SELECT * FROM nouvelle" .  
         " ORDER BY date desc;";  
$result = mysql_query($query);  

 
et après j'affiche le résultat ligne par ligne :
 
while ($r = mysql_fetch_array($result)) {  
 
echo "<TR><TD bgcolor=\"#000000\"><FONT SIZE=\"2\" FACE=\"verdana\" COLOR = \"white\"><B>", htmlentities($r["titre"]), "</TD><TD></TD></TR>";  
 echo "<TR><TD><FONT SIZE=\"1\" FACE=\"verdana\">Le ", htmlentities($r["date"]), "</TD<TD></TD></TR>";  
 echo "<TR><TD><FONT SIZE=\"1\" FACE=\"verdana\">De ", htmlentities($r["auteur"]), ", <A HREF=\"mailto:", htmlentities($r["mail"]), "\">";
 echo htmlentities($r["mail"]), "</TD<TD></TD></TR>";
 echo "<TR><TD height=\"10\"></TD><TD></TD></TR>";
echo "<TR><TD><FONT SIZE=\"1\" FACE=\"verdana\">", htmlentities($r["texte"]), "</TD><TD></TD></TR>";
}

 
et il doit y avoir un pb ici...comment est ce que je peux faire pour que ça s'affiche bien!!!
Il faut que je traite les infos séparément pour avoir une mise en forme spéciale... Titre sur fond noir par ex.
Ch'ui qu'un newbie moi! Alors aidez moi!

Reply

Marsh Posté le 10-12-2001 à 21:18:25    

fly LM a écrit a écrit :

 
 
Si tes sauts de lignes automatiques sont effectivement le fait que lorsque tu arrives en bout de zone, tu passes à la ligne suivante, tu peux oublier, c'est pas des sauts de lignes !!!
 
Si tu veux avoir un texte formaté à la saisie comme à l'affichage, la largeur de ta zone "textarea" devra être équivalente à la largeur du tableau (pourquoi pas !!) dans lequel ton texte sera affiché...
 
@+  




 
Merci  :hello:  
Pour voir mon piti forum c'est sur http://maxaks.dynip.com/forum/forums.php
 
voila, c po du tout protégé tou ça donc faites pas trop les racailloux  :jap:

Reply

Marsh Posté le 10-12-2001 à 21:29:13    

et pi moi...une petite aide non?

Reply

Marsh Posté le 10-12-2001 à 21:34:03    

ben regarde :
 
pour formater le texte :  
htmlspecialchars() => pour virer tous les tags HTML
nl2br() => pour transformer les sots de ligne en <BR>
 
et voila
 
pour ton textarea, il fo précise le WRAP en Virtual  :hello:

Reply

Marsh Posté le 11-12-2001 à 09:14:45    

toto21 a écrit a écrit :

et pi moi...une petite aide non?  




 
BHa, je t'ai dit de na pas utiliser la fonction htmlentities(); elle convertit les cararctères spéciaux en leur entité HTML : tes balises ne seront plus fonctionnelles... Tu vas voir les <br> écrit tel quel (en fait <br> ). Cette fonction est justement faite pour rendre visible des caractères qui normalement font partie des caractères "réservés" à une interprétation par ton navigateur...
 
Pourquoi t'entêtes-tu à utiliser cette fonction ???
 
Tu lis au moins ce que l'on te poste .???
 
allez un petit effort toto21 !!! :lol:
 
@+

Reply

Marsh Posté le 11-12-2001 à 18:56:29    

bah je fais comment alors pour afficher le résultat de ma requête sans utiliser le HTMLENTITITES??

Reply

Marsh Posté le 11-12-2001 à 19:11:18    

ça y est!!!!!!
c bon g réussi!!!
 
J'ai fini par y aller en faisant de essais...
en enlevant bien le HTMLENTITIES...
Trop con!!! Merci à tous
@+
Toto21

Reply

Marsh Posté le 13-01-2016 à 16:10:30    

Toto21 a écrit :

ReSlt à tous!
Voilà, g ds une page un champ de saisie en <TEXTAREA>... Seul problème, quand je saisi du texte ds ce champ avec des retours à la ligne, et que je met cette variable dans une table, quand je veux afficher ce qu'il y a dans cette table, est ben tous les retours à la ligne ont disparus!


 
Bon, si ça peut aider, il faut protéger les backslashes aussi bien dans mysql que dans str_replace de PHP. Ça veut dire que, si on veut, par exemple rajouter un "txt" à une ligne de  texte dont les éléments sont séparés par des \n ds une table, il faut:
0- récupérer la valeur du champ ds la BDD ($result)
1 - Extraire le texte qui nous intéresse . ($oldparamts)
2 - Par sécurité, remplacer les retours chariots existants avec un \\n, genre:  
 

Code :
  1. $replace = str_replace(array("\r\n", "\r", "\n", PHP_EOL, chr(10), chr(13), chr(10).chr(13)), '\\n',$oldparamts);


3 -Préparer le nouveau bout de fichier modifié, mais cette fois avec des \\\\n dans une variable (ici

Code :
  1. $ajout = str_replace(array("\r\n", "\r", "\n", PHP_EOL, chr(10), chr(13), chr(10).chr(13)), '\\\\n',$oldparamts)."\\\\ntxt";


4 - Faire le remplacement final avec  

Code :
  1. str_replace($replace,$ajout,$result);


on obtient un fichier avec des \\n à envoyer à la base de données avec un UPDATE qui virera un des deux \ .
 
Plus tordu,plus prise de tête, je vois pas.


Message édité par esperado le 13-01-2016 à 16:15:23

---------------
http://www.esperado.fr/contenu/hardware.fr.html
Reply

Marsh Posté le 14-01-2016 à 15:42:08    

Il y a bien longtemps (15 ans...), dans une galaxie lointaine, très lointaine...
 
Esperado se réveilla ! ^^
 


---------------
Configurations type du moment : https://forum.hardware.fr/hfr/Hardw [...] 1331_1.htm  https://www.jouannetphotographe.com
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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