Aller au contenu

Affichage immédiat des messages


Sujets conseillés

Posté

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

Posté

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

Posté (modifié)

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
Posté

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

Posté

lol ca c'est du service rapide...

ce qui est rassurant, c'est que l'on est tous d'accord sur le problème ;)

Posté

J'y avais pensé, mais je voudrais que les messages s'affichent avant le formulaire...

Je ne sais pas trop comment séparer le début du code et l'écriture du texte que ce début a été cherché...

Je vais essayer... :unsure:

Posté

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.

Posté (modifié)

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
Posté

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.

Posté

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

Posté

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:

Posté

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.

Posté
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... ;)

Posté

Dans ce cas, convertis les 2.

Posté (modifié)

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
Posté

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.

Posté

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

Posté
Par exemple imagine que dans ton code tu ais quelque part du javascript

<{POST_SNAPBACK}>

Dans le code de ma page?

Ou dans le code que les internautes voudraient mettre sur mon site?

Posté

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.

Posté

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:

Posté

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

Posté

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é
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:

Veuillez vous connecter pour commenter

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



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