Aller au contenu

Affichage immédiat des messages


Gribouille26

Sujets conseillés

Bonjour, :)

J'ai un script en php qui enregistre et affiche les messages des visiteurs sur une page de mon site.

Le message est envoyé et inscrit sur la même page.

Le problème étant:

lorsque je met un message, il s'enregistre via le formulaire présent sur la page, mais ne s'affiche pas dans la foulée sur la page... Je voudrais qu'il appraisse de suite pour que le visiteur ne l'envoie pas plusieurs fois de suite. :nono:

Voici le code en question:

<?php
$file = "id000.txt";
$contenu = '';
if ( !empty($file) ) {
 $fp = _AT_fopen($file, 'r');
 if ($fp)
 {
     $fsize = filesize($file);
     $contenu = $fsize > 0 ? fread($fp, $fsize) : '';
     fclose ($fp);
   }
   else {
   }
}
if ( empty($contenu) ) {
echo "blabla...";
}
else {
echo $contenu;
}
$file = "id00.txt";
if (isset($_POST["Submit"])) {
$date = date("d/m/y");
$session = fopen("id01.txt","a+");
$texte = $nom." le ".$date." : ".$texte."<br />"."\n";
fwrite( $session, $texte);
fclose( $session );
}
?>
et le formulaire en méthod post qui revoit sur la même page..

Merci d'avance de votre aide! ;)

Lien vers le commentaire
Partager sur d’autres sites

Salut Gribouille,

Il suffit à mon sens de mettre le bloc

if (isset($_POST["Submit"])) {
  $date = date("d/m/y");
  $session = fopen("id01.txt","a+");
  $texte = $nom." le ".$date." : ".$texte."<br />"."\n";
  fwrite( $session, $texte);
  fclose( $session );
}

tout au début du code... juste après la balise <?php, pour que lorsque la variable $contenu est analysée elle contienne le texte envoyé avec le formulaire ;)

Dan

Lien vers le commentaire
Partager sur d’autres sites

Salut Gribouille,

Ca ne s'affiche pas parce que tu affiche le contenu du fichier puis tu y ecris ce que l'internaute a ecrit par l'intermédiaire du formulaire.

Oups... je crois que Dan a été plus rapide sur le coup :)

Modifié par Titag
Lien vers le commentaire
Partager sur d’autres sites

gribouille, tu affiches le contenu de ton fichier avant d'ecrire dans celui ci le nouveau message ecrit par le visiteur.

il commencer le traitement de ta page par rajouter le nouveau comentaire s'il y a eu soummission,

ensuite, tu lis ton fichier pour afficher son contenu

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

au sujet du nom du fichier. Il n'est pas prudent de mettre un fichier en .txt, même s'il ne contient rien de 'sensible'. Tu devrais mettre plutot un fichier en .php.

De la même facon, tu devrais controler ce que l'internaute a envoyé, et éventuellement, interdire certains caractères.

Lien vers le commentaire
Partager sur d’autres sites

Merci effectivement ça marche !!!

Le seul problème est que maintenant, il recharge le même message si je réactualise ma page sans rien écrire dans le formulaire... :o

Anonymus: Tu m'interpelles là! :blink:

Puis-je me servir d'un fichier .php comme je me sert ici, des fichiers .txt?

Ton interdiction de certains caractères, je ne vois pas trop pourquoi.... :unsure:

Modifié par Gribouille26
Lien vers le commentaire
Partager sur d’autres sites

Si tu n'interdis pas certains caractères, tu t'exposes au "cross site scripting".

Il sera possible pour tes visiteurs les plus mals intentionnés de faire appeler par ta page des scripts éxécutés sur un autre serveur en postant un message du style:

<script type="text/javascript" src="http://www.domaine.tld/script_malicieux.js"></script>

Dans le meilleur des cas il feront ouvrir une popup de pub dans ta page, mais ils peuvent aussi s'en servir pour récupérer des informations sur tes visiteurs.

Il est donc conseillé de bloquer certaines balises html dans ta page.

Lien vers le commentaire
Partager sur d’autres sites

Une méthode simple et radicale est de transformer tous les < en < lors du traitement des données envoyées par le formulaire. Tu supprimes ainsi toutes les balises:

<a href="#">lien</a> sera affiché tel quel et pas comme ça: lien

Il existe aussi les fonctions php htmlentities et htmlspecialchars:

http://www.php.net/manual/fr/function.htmlentities.php

http://www.php.net/manual/fr/function.htmlspecialchars.php

Lien vers le commentaire
Partager sur d’autres sites

Je suis allée voir les liens, je comprend pas tout... :blush:

Je ne sais pas comment la transfo se fait entre ce que les visiteurs écrivent et ce qui ressort ecrit sur la page.

Du coup, je ne comprend pas vraiment cette histoire de guillemets simples ou double. Quelle diférence? :huh:

De plus, je ne sais pas comment/où l'intégrer à mon code... :whistling:

Lien vers le commentaire
Partager sur d’autres sites

Il faut intégrer ça au début de ton code dans la partie du code PHP qui traite les données soumises par le formulaire:

$_POST["texte_saisi"] = htmlentities($_POST["texte_saisi"]);

Le 2ème paramètre de la fonction, quote_style, optionnel, te permet juste de choisir si tu veux convertir les " ou les ' ou les 2.

Lien vers le commentaire
Partager sur d’autres sites

Le 2ème paramètre de la fonction, quote_style, optionnel, te permet juste de choisir si tu veux convertir les " ou les ' ou les 2.

<{POST_SNAPBACK}>

Je ne vois pas la différence entre les deux sortes de guillemets donc je ne sais pas choisir... ;)

Lien vers le commentaire
Partager sur d’autres sites

Euh... Z'aurriez pas plus d'explications... :blush:

Je comprend pas pourquoi ils disent : tous les caractères qui ont des équivalents en entités HTML sont effectivement traduits.

Ce qu'on veut, c'est pas qu'ils ne le soit pas justement? Qu'ils s'affichent sans traduction.. :huh:

Je crois que je comprend pas sur ce coup là... :nono:

[édit]En fait, corrigez moi si c'est pas comme ça....

Si le visteur entre un é, il sera ecrit en &aecute; (pas sur du code ;-}) puis pour étre réécrit en é.

Si le visteur entre du code <a href="truc.exe">, suivant le même procécus, il ressortira tel quel et pas sous forme de lien cliquable.

C'est ça? :D

[/edit]

Modifié par Gribouille26
Lien vers le commentaire
Partager sur d’autres sites

C'est ca, oui.

Pour la balise <a href, par exemple, elle sera affichée >a href dans le code source, ce qui fait qu'elle ne sera pas considérée comme un lien par le navigateur. Mais elle apparaitra <a href sur la page du navigateur.

Cela limite déjà un certain nombre de problèmes.

Lien vers le commentaire
Partager sur d’autres sites

Pourquoi vouloir transformer les quotes ou les guillements?

Par exemple imagine que dans ton code tu ais quelque part du java script:

alert('<?php echo $_POST["texte"]; ?>');

... et que le texte saisi contienne justement le caractère '

Si tu ne transforme pas ce ' il sera considéré comme la fin du message d'alerte javascript...

Lien vers le commentaire
Partager sur d’autres sites

Non, je parlais du code de ta page. Mais ce n'était qu'un exemple pour expliquer l'intérêt de convertir quotes et guillemets.

Lien vers le commentaire
Partager sur d’autres sites

Dans le cas donc où les commentaires des internautes seraient inséres sur une page en php!? :huh:

Car dans mon cas, ils sont stockés dans un fichier .txt qui ne contient rien d'autre que les commentaires ligne par ligne...

Bon de toutes façons, je traduit les deux, je pense que c'est plus sage, non?

Tout cela me ramène à cette histoire de ne pas stocker dans des fichiers textes... Pourquoi et comment faire avec les fichiers en .php plutôt que .txt ? :rolleyes:

Lien vers le commentaire
Partager sur d’autres sites

Tu changes l'extension, tout simplement.

Mais en fait, ce que je fais personnellement dans un cas comme ca, c'est d'ajouter une ligne tout au début du fichier, du style :

<? die(""); ?>

qui aura pour effet de ne pas executer la suite de la page. Ainsi, si quelqu'un ouvre la page, en tapant directement son nom dans son navigateur, le fichier n'affichera rien.

Quand tu créées ton fichier, ou quand tu écris ton fichier, tu ajoutes cette ligne, tout au début.

Quand tu lis ton fichier, tu ne lis pas la première ligne, ou tout du moins tu ne la prend pas en compte.

Ainsi, ton fichier est 'a peu près' inaccessible.

Voilà.

Lien vers le commentaire
Partager sur d’autres sites

Mais l'extension ne sert qu'à toi, à te rappeler ce qu'il y a dans le fichier.

Un fichier comme celui ci, tu peux très bien lui mettre l'extension .ext, ou .inc ou .gribouille :lol:

Lien vers le commentaire
Partager sur d’autres sites

Mais en fait, ce que je fais personnellement dans un cas comme ca, c'est d'ajouter une ligne tout au début du fichier, du style :

<? die(""); ?>

qui aura pour effet de ne pas executer la suite de la page. Ainsi, si quelqu'un ouvre la page, en tapant directement son nom dans son navigateur, le fichier n'affichera rien.

Quand tu créées ton fichier, ou quand tu écris ton fichier, tu ajoutes cette ligne, tout au début.

Quand tu lis ton fichier, tu ne lis pas la première ligne, ou tout du moins tu ne la prend pas en compte.

<{POST_SNAPBACK}>

Oulàlà... Faut donc que je refasse tout mon code!

Je comptais le nombre de lignes pour donner, sur une autre page, le nombre de contributions. Faudra pas qu'il compte la première ligne dans ce cas...

Mais l'extension ne sert qu'à toi, à te rappeler ce qu'il y a dans le fichier.

Un fichier comme celui ci, tu peux très bien lui mettre l'extension .ext, ou .inc ou .gribouille :lol:

<{POST_SNAPBACK}>

:huh:
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...