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

 


Dernière réponse
Sujet : [PHP MySQL] Retour chariot non pris en compte dans les champs
slr56 Il y a bien longtemps (15 ans...), dans une galaxie lointaine, très lointaine...
 
Esperado se réveilla ! ^^
 

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
slr56 Il y a bien longtemps (15 ans...), dans une galaxie lointaine, très lointaine...
 
Esperado se réveilla ! ^^
 
esperado

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.

Toto21 ç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
Toto21 bah je fais comment alors pour afficher le résultat de ma requête sans utiliser le HTMLENTITITES??
FLY LM

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

Maxaks 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:
Toto21 et pi moi...une petite aide non?
Maxaks

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:

Toto21 :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!
FLY LM

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

FLY LM 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 ???
Maxaks ouaiche  :D
FLY LM

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

Maxaks a oki  :)  
tu sais po pk ca me fé pas des sauts de lignes automatiques ?
FLY LM Non non rien, ça a cliqué malgré moi...
Maxaks De quoi ?
FLY LM Oups, j'ai rien dit...

 

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

Maxaks 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:
Toto21 faut que je fasse comment alors!!???
FLY LM 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...
Toto21 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?
youdontcare

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.

skylight

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

youdontcare

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

PaLoTTe

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 :

PaLoTTe

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 ?

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

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.

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

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

Toto21 :cry:
Toto21 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!!!!!
youdontcare

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

FLY LM Tu stockes tes données en brut (avec les \n)
 
Il y a qu'a l'affichage hors <TEXTAREA..></..> que tu utilises nl2br()
 
@+
youdontcare 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]

Toto21 :cry:
Toto21 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é?
PaLoTTe 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 !!
Toto21 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!

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