PHP - utilisation guillemets, apostrophes, \n

Fermé
Gizmil Messages postés 706 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 3 octobre 2022 - Modifié par Gizmil le 11/01/2012 à 19:09
Gizmil Messages postés 706 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 3 octobre 2022 - 11 janv. 2012 à 19:24
Salut à tous,

étant débutant en php et afin de créer un livre d'or sur un site web, j'ai été chercher un code-source sur un site dédié. Pas de souci, le script est relativement simple et il fonctionne... à l'exception d'une petite chose !

Il s'agit du code '\n' pour le saut de ligne qu'a utilisé l'auteur du script ! L'anti-slash n'étant pas vraiment reconnu par les moteurs de recherche, je trouve peu de documentation à ce sujet sur le net! J'ignore même comment on appelle ce genre de code. J'en appelle donc à vos lumières !

En effet, j'ai remarqué que le \n est mal interprété par PHP ! Le livre d'or utilise non pas une base de données pour enregistrer les commentaires mais un fichier txt. Le \n est donc utilisé dans ce cas-ci pour créer des sauts de ligne dans le fichier de commentaires, afin de rendre tout ça un peu plus lisible si on ouvre le fichier afin d'effacer un commentaire, par exemple.

Bref, à un moment donné, dans mon script, j'ai cette ligne qui enferme l'intégralité du code à enregistrer dans mon fichier txt:

$opinion="<hr />\n<p>Message de : <a href=\"mailto:".$email."\">".$pseudo."</a>, posté le : ".$date."<br /><br />\n<span>".$message."</span></p>\n";


Le fait est que, moi, j'ai tendance à coder tout mon php en mettant les attributs des balises entre guillemets et la chaine string des variables entre apostrophes, ce qui me permet d'écrire les guillemets en toute lettre sans passer par un code du genre \" ou & apos;, comme ceci :

$opinion='<hr />\n<p>Message de : <a href="mailto:'.$email.'">".$pseudo."</a>, posté le : '.$date.'<br /><br />\n<span>'.$message.'</span></p>\n';


Mais mon livre d'or n'aime pas ça car avec ce type de sémantique, il restitue tous les caractères \n en brut dans le rendu du commentaire, ce qui n'est bien sûr pas l'effet escompté !

J'ai donc décidé d'utiliser la première ligne de code indiquée ci-dessus (qui correspond à la sémantique utilisée par l'auteur) mais il reste un problème avec celle-ci, c'est qu'elle prend bien tous les \n en invisible et les restitue uniquement dans le fichier txt à l'exception du dernier \n de la ligne, celui qui est derrière la balise fermante </p>. Lui, s'affiche dans le rendu de ma page et j'ai du mal à comprendre le pourquoi !

Je pense que j'aurais besoin d'un petit cours sur l'utilisation préférentielle des guillemets et apostrophes (j'avoue, j'utilise ça de manière un peu désinvolte) et je vais m'informer sur la question mais en attendant, est-ce que vous pourriez m'expliquer pourquoi mon dernier \n n'est pas interprété comme prévu ?

Merci ! (-;

A toute fin utile, voici le script du livre d'or :

<?php 
//On place dans une variable le chemin du (futur) fichier enregistrant les messages 
$wayFileComments = 'pages/livre_dor/messages.txt'; 
//Assignons nos 3 variables du formulaire et on en profite pour les protégers des balises HTML 
$pseudo = htmlentities($_POST['pseudo']); 
$email = htmlentities($_POST['email']); 
$message = htmlentities($_POST['message']); 
//Pensons au retour à la ligne et aux stripslashes pour la variable $message 
$message = stripslashes(nl2br($message)); 
//---------------------------------------------------------------------------- 
//On met en place quelques conditions pour les cellules (nom et message) 
//---------------------------------------------------------------------------- 
//On vérifie avant tout si le fichier existe si ce n'est pas le cas on le crée 
if(!is_file($wayFileComments)){ 
 $verif=@fopen($wayFileComments,"w+"); 
} 
//On vérifie que le Nom ou le Message ne soient pas vide et envoie le code html d'en-tête du formulaire 
else if (trim($message)=="" || trim($pseudo)==""){ 
 echo '<div id="guestBook" class="generalText">'; 
 echo ' 
 <p> 
  Vous devez compléter les champs '<b class="whiteText">Nom</b>' et '<b class="whiteText">Message</b>' pour pouvoir poster dans le Livre d'Or !<br /> 
  <br /> 
  <a href="index.php?prevPageNumber='.$pageNumber.'&pageNumber=10&type=addMessage">Retour au formulaire</a> 
 </p> 
 '; 
 echo '</div>'; 
}else{ 
 //---------------------------------------------------------------------------- 
 //Après ces quelques vérification d'usage on passe à l'exécution du formulaire 
 //---------------------------------------------------------------------------- 
 //On ouvre en écriture-enregistrement le fichier 'message.txt' (le @ permet de ne pas afficher l'éventuel message d'erreur que pourrait retourner la fonction) 
 $verif=@fopen($wayFileComments,'r+'); 
 //On analyse les anciennes données et on les stocke 
 $stock=@fread($verif,filesize($wayFileComments)); 
 //On met la date dans une varialbe 
 $date = date('d/m/Y à H:i'); 
 //On paramère le tout dans la variable $opinion 
 $opinion="<hr />\n<p>Message de : <a href=\"mailto:".$email."\">".$pseudo."</a>, posté le : ".$date."<br /><br />\n<span>".$message."</span></p>\n"; 
 //On remet le curseur du fichier en début de ligne 
 rewind($verif); 
 //On insère le nouveau commentaire 
 fputs($verif,$opinion.' \n'.$stock); 
 //On clos le fichier 
 fclose($verif); 
 //On envoie le code html d'en-tête du formulaire + le contenu du fichier contenant les messages 
 echo '<div id="guestBook">'; 
 echo $insertCommButt; 
 readfile($wayFileComments); 
 echo '<hr class="borderTopDashed" />'; 
 echo $insertCommButt; 
 echo '</div>'; 
} 
?> 
A voir également:

1 réponse

Gizmil Messages postés 706 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 3 octobre 2022 65
Modifié par Gizmil le 11/01/2012 à 19:26
Autant pour moi, je viens de réaliser que le problème se situe au niveau de cette ligne :

//On insère le nouveau commentaire
fputs($verif,$opinion.' \n'.$stock);

J'ai retiré le '\n' et tout rentre dans l'ordre ! ^^

Le but de la manoeuvre était sans doute de passer une ligne dans le fichier afin d'insérer le commentaire suivant...
0