Fameux "nl2br" qui ne marche pas et autres choses...

Petit nouveau ! | 3 Messages

13 sept. 2011, 16:38

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

Mammouth du PHP | 672 Messages

13 sept. 2011, 16:53

Bonjour.

1. Pense à utiliser les balises qui vont bien pour mettre en forme ton code (bouton PHP ou balise
).
C'est plus lisible, donc plus pratique...

2. Essaye d'être plus précis que "ça ne marche toujours pas." Messages d'erreur, page blanche, le résultat ne correspond pas à celui attendu (dans ce cas préciser ce que tu veux et ce que tu obtiens).
Ca peut nous aider à "voir" où se trouve le problème...

3. Pour le [b]nl2br()[/b], je pense que leproblème c'est qu'il est dans le [b]echo[/b] (et donc interprété comme du texte, pas comme une fonction).

4. [php]$message=trim(ucfirst(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $message)));
Tu essayes de faire quoi, au juste ?
Avant tout, évite le eregi_replace(). C'ets une fonction obsolète.

5. Pour trier les commentaires dans l'autre sens, il suffit de partir du dernier et de diminuer à chaque passage dans ta boucle !
$i="$dernierMsg"; // on commence par le dernier message
WHILE ($i>$premierMsg) { // tant qu'on n'a pas atteint le premier message...
   echo "<div class='commentaire texte'>$t_message</div>";
   $i--; // on soustrait 1 à $i
   if ($i==$number){$i=$premierMsg;}
}

Petit nouveau ! | 3 Messages

13 sept. 2011, 18:51

Merci beaucoup pour la boucle, elle est effective mais que dans une les premières page (étant donné que les messages s'affichent à 10 par page) et la dernière page comporte des erreurs :
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 30 on MySQL result index 4 in /var/www/site.com/htdocs/page.php3 on line 199
Code définition du nombre de page :
				$nbrePages = ceil($nbreTotal/$msg_pges);
				if ($page==""){$page="0";}
				$premierMsg = ($page * $msg_pges);
				$dernierMsg = ($premierMsg + $msg_pges);

				if ($nbrePages>1)
				{
				$code.= "| "; 
				$x = "0";
				while ($x < $nbrePages)
					{
						if ($page != $x)
							{
							$code.= "<a href=$pageCourante?page=$x>".($x+1)."</a> | ";
							}else{
							$code.= " ".($x+1)." | ";
							}
					$x++;
					}
				}
Je viens de comprendre pour nl2br, c'est parce-que je n'avais pas de ' \n' dans ma chaine de caractère et effectivement, la syntaxe n'était pas bonne.
D'ailleurs, pour la chaine des caractères, je n'ai pas de "htmlentities" et certains caractères ne passent pas bien (accents, parenthèses, etc.), dois-le les rentrer manuellement ou bien je dois rentrer "htmlentities" quelque part ?

Pour la fonction obsolète, j'ai récupéré cette chaine sans en comprendre les détails... Mais mon code ne doit pas être récent... Je suis en PHP 3 il me semble.

Merci encore et désolé pour mon bas niveau.

ViPHP
xTG
ViPHP | 7331 Messages

13 sept. 2011, 18:55

Qui dit accent sous-entend souvent encodage ? Qu'en est-il du tien ?

Mammouth du PHP | 672 Messages

15 sept. 2011, 09:19

Merci beaucoup pour la boucle, elle est effective mais que dans une les premières page (étant donné que les messages s'affichent à 10 par page) et la dernière page comporte des erreurs :
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 30 on MySQL result index 4 in /var/www/site.com/htdocs/page.php3 on line 199
Ce serait bien d'avoir le code, parce que là on en est réduits à des suppositions...
A vue de nez, c'est parce que tu ne testes pas le nombre de résultats. Du coup, si tu as 25 résultats, quand tu essayes de récupérer le 26ème MySQL n'est pas content...
Qui dit accent sous-entend souvent encodage ? Qu'en est-il du tien ?
+1

Pense à vérifier l'ensemble des encodages : MySQL, les fichiers PHP, etc.

Je te conseille de faire une recherche sur Google (ou dans le forum), tu devrais trouver pas mal de tutoriels pour la pagination ou l'encodage...

ViPHP
ViPHP | 2577 Messages

15 sept. 2011, 10:15

Bonjour,

$message=trim(ucfirst(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $message)));

Tu enlèves les "\n" avec cette ligne. Donc il n'est pas surprenant que que nl2br() n'ait aucun effet. A priori la fonction htmlentities() peut surement te servir à la place de eregi_replace() .

Pour le problème de la dernière page, je suppose que tu as un problème lié au calcul de la dernière page ou un problème d'affichage pour les pages qui ne sont pas complètes.