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

  FORUM HardWare.fr
  Programmation

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°78656
Toto21
Posté le 05-12-2001 à 22:11:57  profilanswer
 

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!

mood
Publicité
Posté le 05-12-2001 à 22:11:57  profilanswer
 

n°78668
PaLoTTe
Posté le 06-12-2001 à 00:00:24  profilanswer
 

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

n°79335
Toto21
Posté le 07-12-2001 à 22:12:39  profilanswer
 

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

n°79360
Toto21
Posté le 07-12-2001 à 22:55:14  profilanswer
 

:cry:

n°79361
youdontcar​e
Posté le 07-12-2001 à 23:08:55  profilanswer
 

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]

n°79362
FLY LM
Posté le 07-12-2001 à 23:12:00  profilanswer
 

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

n°79363
youdontcar​e
Posté le 07-12-2001 à 23:12:50  profilanswer
 

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

n°79367
Toto21
Posté le 07-12-2001 à 23:31:00  profilanswer
 

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

n°79411
Toto21
Posté le 08-12-2001 à 09:34:32  profilanswer
 

:cry:

n°79414
FLY LM
Posté le 08-12-2001 à 10:54:54  profilanswer
 

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

mood
Publicité
Posté le 08-12-2001 à 10:54:54  profilanswer
 

n°79415
FLY LM
Posté le 08-12-2001 à 10:59:59  profilanswer
 

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

n°79443
youdontcar​e
Posté le 08-12-2001 à 13:08:14  profilanswer
 

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.

n°79877
Toto21
Posté le 09-12-2001 à 20:38:13  profilanswer
 

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

n°79879
PaLoTTe
Posté le 09-12-2001 à 20:39:19  profilanswer
 

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 ?

n°79880
PaLoTTe
Posté le 09-12-2001 à 20:41:13  profilanswer
 

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 :

n°79884
youdontcar​e
Posté le 09-12-2001 à 21:04:53  profilanswer
 

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

n°79898
skylight
Made in France.
Posté le 09-12-2001 à 21:25:51  profilanswer
 

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

n°79901
youdontcar​e
Posté le 09-12-2001 à 21:31:05  profilanswer
 

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.

n°79904
Toto21
Posté le 09-12-2001 à 21:47:28  profilanswer
 

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?

n°79910
FLY LM
Posté le 09-12-2001 à 22:12:40  profilanswer
 

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

n°80294
Toto21
Posté le 10-12-2001 à 17:42:36  profilanswer
 

faut que je fasse comment alors!!???

n°80304
Maxaks
Posté le 10-12-2001 à 18:02:23  profilanswer
 

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:

n°80305
FLY LM
Posté le 10-12-2001 à 18:02:36  profilanswer
 

Oups, j'ai rien dit...

 

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

n°80307
Maxaks
Posté le 10-12-2001 à 18:06:00  profilanswer
 

De quoi ?

n°80312
FLY LM
Posté le 10-12-2001 à 18:13:10  profilanswer
 

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

n°80315
Maxaks
Posté le 10-12-2001 à 18:16:31  profilanswer
 

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

n°80316
FLY LM
Posté le 10-12-2001 à 18:20:00  profilanswer
 

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

n°80318
Maxaks
Posté le 10-12-2001 à 18:29:05  profilanswer
 

ouaiche  :D

n°80319
FLY LM
Posté le 10-12-2001 à 18:32:30  profilanswer
 

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

n°80320
FLY LM
Posté le 10-12-2001 à 18:36:48  profilanswer
 

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é...
 
@+

n°80325
Toto21
Posté le 10-12-2001 à 19:05:45  profilanswer
 

: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!

n°80376
Maxaks
Posté le 10-12-2001 à 21:18:25  profilanswer
 

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:

n°80380
Toto21
Posté le 10-12-2001 à 21:29:13  profilanswer
 

et pi moi...une petite aide non?

n°80386
Maxaks
Posté le 10-12-2001 à 21:34:03  profilanswer
 

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:

n°80456
FLY LM
Posté le 11-12-2001 à 09:14:45  profilanswer
 

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:
 
@+

n°80662
Toto21
Posté le 11-12-2001 à 18:56:29  profilanswer
 

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

n°80667
Toto21
Posté le 11-12-2001 à 19:11:18  profilanswer
 

ç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

n°2273357
esperado
C'était mieux avant ;-)
Posté le 13-01-2016 à 16:10:30  profilanswer
 

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
n°2273410
slr56
Tout problème a sa solution.
Posté le 14-01-2016 à 15:42:08  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


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

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

 

Sujets relatifs
[PHP MySQL] Problème de suppression d'entrée dans une table...[PHP] Comment utiliser PHP4TS.DLL avec PHP4TS.LIB
SQL / MySQL : requete en employant un <> like[PHP] include de 2 fichiers, c le bordel !!
[PHP MySQL] Affichage de requêtes...[PHP]-question pour super balez!!!
[PHP/MySQL] Executer une requete dans un fichier .sql 
Plus de sujets relatifs à : [PHP MySQL] Retour chariot non pris en compte dans les champs


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