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

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

Marsh Posté le 13-09-2011 à 15:03:07    

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

Reply

Marsh Posté le 13-09-2011 à 15:03:07   

Reply

Marsh Posté le 13-09-2011 à 16:19:19    

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
Reply

Marsh Posté le 13-09-2011 à 16:27:14    

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

Reply

Marsh Posté le 13-09-2011 à 16:33:11    

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
Reply

Marsh Posté le 13-09-2011 à 16:39:26    

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>

Reply

Marsh Posté le 13-09-2011 à 16:39:58    

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

Reply

Marsh Posté le 13-09-2011 à 17:10:13    

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
Reply

Marsh Posté le 13-09-2011 à 18:03:03    

Ca marche enfin ! Super !
 
Merci ! :)

Reply

Marsh Posté le 14-09-2011 à 10:48:19    

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:  
 
 

Reply

Marsh Posté le 14-09-2011 à 11:17:17    

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
Reply

Marsh Posté le 14-09-2011 à 11:17:17   

Reply

Marsh Posté le 14-09-2011 à 14:00:39    

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


---------------
Mon Feedback !
Reply

Marsh Posté le 14-09-2011 à 14:24:52    

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
Reply

Marsh Posté le 14-09-2011 à 14:51:25    

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

Marsh Posté le 14-09-2011 à 14:54:19    

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

Marsh Posté le 14-09-2011 à 16:09:41    

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

Reply

Sujets relatifs:

Leave a Replay

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