Fameux "nl2br" qui ne marche pas chez moi... et autres choses ! - PHP - Programmation
Marsh Posté le 13-09-2011 à 16:19:19
Code : |
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.
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...
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)
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>
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...
Marsh Posté le 14-09-2011 à 10:48:19
rufo a écrit :
|
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
Marsh Posté le 14-09-2011 à 11:17:17
Je faisais référence à cette syntaxe :
Code :
|
Je doute que ça marche, nl2br va être vue comme une chaîne et non comme une fonction à interpréter...
Marsh Posté le 14-09-2011 à 14:00:39
ReplyMarsh 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.
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. |
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. |
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... |
A+,
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. |
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 :
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 :
|
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 !
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 !