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

  FORUM HardWare.fr
  Programmation
  PHP

  Fameux "nl2br" qui ne marche pas chez moi... et autres choses !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fameux "nl2br" qui ne marche pas chez moi... et autres choses !

n°2101261
7thSKY
Posté le 13-09-2011 à 15:03:07  profilanswer
 

Bonjour à tous,
 
Je suis nouveau et extrêmement débutant en PHP, ayant commencé à apprendre tout seul depuis quelques jours. Néanmoins, j'ai un bon niveau en HTML et CSS.
 
Voilà, je suis parvenu à faire un script pour un livre d'or utilisant PHP et MySQL en piochant dans divers scripts ici et là sur le net, le formulaire marche très bien mais j'ai quelques soucis d'affichage :
Après avoir cherché pendant une heure sur des forums comment parvenir à faire un saut à la ligne dans un "textarea", je désespère et espère trouver de l'aide ici.
J'ai utilisé ce fameux "nl2br" et un autre dans plusieurs endroits de mon code (notamment ma variable $message) mais ça ne marche toujours pas.
 
A la lecture de la base de donnée, j'obtiens celui pour lire le message :
 
echo "<div class='commentaire_texte'>$t_message</div>";
En mettant ce fameux nl2br comme ceci : echo "<div class='commentaire_texte'>nl2br($t_message)</div>"; ça ne fonctionne toujours pas.
 
Je ne voudrais pas passer pour un nul mais je vous préviens que mon niveau est très débutant, donc soyez indulgents avec moi svp.
 
---
 
Autre chose : La plus part des accents et ponctuations n'apparaissent pas dans mon message, j'imagine avoir mal renseigné mon formatage d'entrée qui est celui-ci :
$message=trim(ucfirst(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $message)));
 
En rajoutant des caractères de ponctuations, ça marche mais je pense qu'il doit y avoir une méthode bien plus simple ?
 
---
 
Dernière chose (tant qu'à faire) : les commentaires s'affichent les uns à la suite des autres (très bien), le plus récent s'ajoute donc à la suite du précédant et je voudrais que ce soit le contraire (le plus récent en premier (en haut) et le moins récent en dernier (en bas).  
 
Voici comment mon formulaire procède pour ajouter un message:
 
$i=($number-1);
$i="$premierMsg";
WHILE ($i<$dernierMsg)
...
echo "<div class='commentaire texte'>$t_message</div>";
...    
$i++;
if ($i==$number){$i=$dernierMsg;}
}
 
Encore une fois, veuillez m'excuser si je passe pour nu noub total mais je saisi à peine les fonctions et variables en PHP, j'apprends tout seul sur le vif.
 
Merci pour votre aide ! :)

mood
Publicité
Posté le 13-09-2011 à 15:03:07  profilanswer
 

n°2101287
rufo
Pas me confondre avec Lycos!
Posté le 13-09-2011 à 16:19:19  profilanswer
 

Code :
  1. echo "<div class=\"commentaire_texte\">".nl2br($t_message)."</div>";


 
Essayes de mieux lire la doc php :/... nl2br() est une fonction php, elle ne peut donc pas être interprétée en étant mise dans une chaîne de caractères.

Message cité 1 fois
Message édité par rufo le 13-09-2011 à 16:20:10

---------------
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
n°2101291
7thSKY
Posté le 13-09-2011 à 16:27:14  profilanswer
 

Merci bien Rufo et désolé mais ça ne marche toujours pas... Pas de retour à la ligne... :(
 
Le code apparaîlt pourtant des mêmes couleurs, donc pas de problème de syntaxe à première vue...

n°2101293
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 13-09-2011 à 16:33:11  profilanswer
 

As-tu des retours à la ligne dans ton code ?
typiquement nl2br change \n par <br>\n
 
Regarde le code source HTML de la page générée.
 
Mais si $t_message vaut "bonjour mario" alors nl2br ne fera rien ...
 
En revanche si $t_message vaut "Bonjour,
Mario"
 
alors nl2br retournera le code html suivant :
 
Bonjour,<br />
Mario
 
 
(ou <br> si t'es en doctype HTML)


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°2101297
7thSKY
Posté le 13-09-2011 à 16:39:26  profilanswer
 

Il n'y a aucun retour à la ligne dans mon code. Ca vient peut-être de là le problème ?
 
Evidemment, quand je fais des tests, je prends soin de faire plusieurs retours à la ligne dans mon textarea.
 
Donc cet exemple est aussi le mien :
 
$t_message vaut "Bonjour,
Mario"  
 
 
J'ai le doctype HTML 5 donc <!DOCTYPE html>

n°2101298
7thSKY
Posté le 13-09-2011 à 16:39:58  profilanswer
 

Aucun retour à la ligne ni "<br />" ou autre...

n°2101307
rufo
Pas me confondre avec Lycos!
Posté le 13-09-2011 à 17:10:13  profilanswer
 

Ben c'est sûr que si t'as pas de \n dans la chaîne $t_message, nl2br() risque pas de faire grand chose :/
 
Reste à trouver pourquoi t'as pas de \n...


---------------
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
n°2101322
7thSKY
Posté le 13-09-2011 à 18:03:03  profilanswer
 

Ca marche enfin ! Super !
 
Merci ! :)

n°2101446
olivthill
Posté le 14-09-2011 à 10:48:19  profilanswer
 

rufo a écrit :

Code :
  1. echo "<div class=\"commentaire_texte\">".nl2br($t_message)."</div>";


 
Essayes de mieux lire la doc php :/... nl2br() est une fonction php, elle ne peut donc pas être interprétée en étant mise dans une chaîne de caractères.

Mais si, ça marche très bien cette syntaxe :)  
 
echo() est une fonction php, et nl2br() est aussi une fonction PHP. De plus nl2br() renvoie une chaine, donc c'est exactement ce qu'il faut.
PHP est un langage moderne qui permet d'imbriquer les fonctions.
Ici, cette syntaxe ne présent absolument aucun problème :sol:  
 
 

n°2101456
rufo
Pas me confondre avec Lycos!
Posté le 14-09-2011 à 11:17:17  profilanswer
 

Je faisais référence à cette syntaxe :

Code :
  1. echo "<div class='commentaire_texte'>nl2br($t_message)</div>";


Je doute que ça marche, nl2br va être vue comme une chaîne et non comme une fonction à interpréter...


Message édité par rufo le 14-09-2011 à 14:07:07

---------------
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
mood
Publicité
Posté le 14-09-2011 à 11:17:17  profilanswer
 

n°2101499
Tirkyth
Posté le 14-09-2011 à 14:00:39  profilanswer
 

Et puis de toute façon, echo n'est pas une fonction.


---------------
Mon Feedback !
n°2101507
olivthill
Posté le 14-09-2011 à 14:24:52  profilanswer
 

Tirkyth a écrit :

Et puis de toute façon, echo n'est pas une fonction.


S'il vous plait, ne faites pas d'affirmation péremptoire comme ça, sans aucun argument !
 
En plus, c'est faux. Il suffit de lire la documentation, qui se trouve à la page http://fr.php.net/manual/fr/function.echo.php, dont le mot "function" est même carrément présent dans l'URL, tellement c'est évident.
N.B. Et même si echo peut s'utiliser sans les parenthèses et qu'on l'appelle pour cela une "structure de langage", cela n'en reste pas moins une fonction au sens classique du terme.
 
@rufo. En lisant votre message, j'avais cru que les points de concaténation étaient dans le message d'origine, mais, en fait, ils ont été ajouté par vous. Je comprends mieux votre remarque.

Message cité 2 fois
Message édité par olivthill le 14-09-2011 à 14:34:02
n°2101517
gilou
Modérateur
Modzilla
Posté le 14-09-2011 à 14:51:25  profilanswer
 

olivthill a écrit :

En plus, c'est faux. Il suffit de lire la documentation, qui se trouve à la page http://fr.php.net/manual/fr/function.echo.php, dont le mot "function" est même carrément présent dans l'URL, tellement c'est évident.
N.B. Et même si echo peut s'utiliser sans les parenthèses et qu'on l'appelle pour cela une "structure de langage", cela n'en reste pas moins une fonction au sens classique du terme.

Ben peut être qu'il faut aller lire la doc en question, en effet:

Citation :

echo() n'est pas vraiment une fonction (c'est techniquement une structure du langage), cela fait que vous n'êtes pas obligé d'utiliser des parenthèses. echo() (contrairement à d'autres structures de langage) ne se comporte pas comme une fonction, il ne peut donc pas être utilisé dans le contexte d'une fonction. De même, si vous voulez passer plusieurs paramètres à echo(), les paramètres ne doivent pas être entourés de parenthèses.
...
Note: Comme ceci est une structure du langage, et non pas une fonction, il n'est pas possible de l'appeler avec les fonctions variables.


et a fonctions variables on a:

Citation :

PHP supporte le concept de fonctions variables. Cela signifie que si le nom d'une variable est suivi de parenthèses, PHP recherchera une fonction de même nom, et essaiera de l'exécuter. Cela peut servir, entre autres, pour faire des fonctions de rappel, des tables de fonctions...
 
Les fonctions variables ne peuvent pas fonctionner avec les éléments de langage comme les echo(), print(), unset(), isset(), empty(), include(), require() etc. Vous devez utiliser votre propre gestion de fonctions pour utiliser un de ces éléments de langages comme fonctions variables.


 [:souk]  
A+,


Message édité par gilou le 14-09-2011 à 14:54:09

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2101519
Tirkyth
Posté le 14-09-2011 à 14:54:19  profilanswer
 

olivthill a écrit :

En plus, c'est faux. Il suffit de lire la documentation, qui se trouve à la page http://fr.php.net/manual/fr/function.echo.php, dont le mot "function" est même carrément présent dans l'URL, tellement c'est évident.
N.B. Et même si echo peut s'utiliser sans les parenthèses et qu'on l'appelle pour cela une "structure de langage", cela n'en reste pas moins une fonction au sens classique du terme.


En effet il suffit de lire la documentation, c'est tout de même écrit de façon claire :

Citation :

echo() n'est pas vraiment une fonction (c'est techniquement une structure du langage), cela fait que vous n'êtes pas obligé d'utiliser des parenthèses. echo() (contrairement à d'autres structures de langage) ne se comporte pas comme une fonction, il ne peut donc pas être utilisé dans le contexte d'une fonction.


 
Edit :  [:grilled]


Message édité par Tirkyth le 14-09-2011 à 14:56:14

---------------
Mon Feedback !
n°2101536
7thSKY
Posté le 14-09-2011 à 16:09:41  profilanswer
 

Merci à tous pour vos réponses nombreuses, le cas de nl2br est désormais résolu, je me pencherai plutôt vers le problème de certains caractères non affichés tel que certains accents, ponctuations, etc.
 
Pour vous avouer franchement, c'est un projet professionnel qui doit se terminer rapidement et je n'ai assez de temps pour bucher la mécanique du PHP (du moins les bases), d'où mon niveau d'extrème novice. J'ai pu récupérer ce script et tenter de le comprendre dans les grandes lignes mais j'aurai été incapable de le rédiger moi-même. A l'avenir je compte perfectionner ce formulaire en essayant de le formuler moi-même mais pour l'instant, ce qui m'intéresse avant tout, c'est son fonctionnement alors si vous pouviez m'aider à résoudre certains problèmes (syntaxes, fonctions ou autre) afin que tous les caractères puissent s'afficher correctement, je vous en serez très reconnaissant.
 
J'ai essayé de me renseigner ici et là et j'ai pu trouver une fonction pouvant résoudre mon problème mais je n'en suis pas sûr et je ne suis pas arriver à l'utiliser dans mon code ("htmlentities" ).
 
Voici certains éléments de mon code, vous pourriez peut-être me trouver la solution :
 
Extrait du code relatif aux entrées et chaines de caractères avant l'entête HTML :

Code :
  1. // Nettoyage des entrées
  2. while(list($var,$val)=each($_POST)){
  3. if(!is_array($val)){
  4.  $$var=strip_tags($val);
  5. }else{
  6.  while(list($arvar,$arval)=each($val)){
  7.    $$var[$arvar]=strip_tags($arval);
  8.   }
  9.  }
  10. }
  11. // Formatage des entrées
  12. $pseudo=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $pseudo)));
  13. $email=strip_tags(trim($email));
  14. $message=trim(ucfirst(eregi_replace("[^a-zA-Z0-9çéêèëâàäôöïîùûü\'\n' -]", "", $message)));
  15. // Verification des champs
  16. if(strlen($pseudo)<2){
  17.  $erreur.="<li class='texte_error'>Le champ &laquo; Nom (ou pseudo) &raquo; est vide ou incomplet.";
  18.  $errpseudo=1;
  19. }
  20. if(strlen($email)<2){
  21.  $erreur.="<li class='texte_error'>Le champ &laquo; Email &raquo; est vide ou incomplet.";
  22.  $erremail=1;
  23. }else{
  24.  if(!ereg('^[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+'.
  25.  '@'.
  26.  '[-!#$%&\'*+\/0-9=?A-Z^_`a-z{|}~]+\.'.
  27.  '[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+$',
  28.  $email)){
  29.   $erreur.="<li class='texte_error'>La syntaxe de votre adresse e-mail n'est pas correcte.";
  30.   $erremail=1;
  31.  }
  32. }
  33. if(strlen($message)<2){
  34.  $erreur.="<li class='texte_error'>Le champ &laquo; Message &raquo; est vide ou incomplet.";
  35.  $errmessage=1;
  36. }
  37. if($erreur=="" ) {


 
Si vous avez besoin d'une autre partie du code, tenez-moi au courant ;)
 
PS : j'ai pas trouvé le moyen de rentrer le code en visualisation PHP (ici C / C++)
 
Merci par avance ! :)


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

  Fameux "nl2br" qui ne marche pas chez moi... et autres choses !

 

Sujets relatifs
[ligne de commandes] echo + redirecion marche pô!Module Flash - Marche de maniere aleatoire - URGENT
connexion a la base de données ne marche pasFilereference.download marche en local mais pas en distant
Sauts de lignes Textarea (nl2br fonctionne pas)Copier-coller par des Variables dans un Wscript.shell.run ne marche pa
Video FLV créée en DOM qui marche pas sur IE[resolu]tableau d'objet dans une classe (et ca marche pas bien sur)
XLST - Condition xsl:if ne marche pasAccess VBA cellule vide avec IF et Then (marche pas ?)
Plus de sujets relatifs à : Fameux "nl2br" qui ne marche pas chez moi... et autres choses !


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