Gribouille26 Posté 15 Décembre 2004 Posté 15 Décembre 2004 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. 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!
Dan Posté 15 Décembre 2004 Posté 15 Décembre 2004 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
Titag Posté 15 Décembre 2004 Posté 15 Décembre 2004 (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é 15 Décembre 2004 par Titag
Vincent Posté 15 Décembre 2004 Posté 15 Décembre 2004 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
Vincent Posté 15 Décembre 2004 Posté 15 Décembre 2004 lol ca c'est du service rapide... ce qui est rassurant, c'est que l'on est tous d'accord sur le problème
Gribouille26 Posté 15 Décembre 2004 Auteur Posté 15 Décembre 2004 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...
Anonymus Posté 15 Décembre 2004 Posté 15 Décembre 2004 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.
Gribouille26 Posté 15 Décembre 2004 Auteur Posté 15 Décembre 2004 (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... Anonymus: Tu m'interpelles là! 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.... Modifié 15 Décembre 2004 par Gribouille26
Jan Posté 15 Décembre 2004 Posté 15 Décembre 2004 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.
Gribouille26 Posté 15 Décembre 2004 Auteur Posté 15 Décembre 2004 Ouuulala!!! Comment dois-je procéder alors? Je dois donc interdire les balises html, mais comment faire?
Jan Posté 15 Décembre 2004 Posté 15 Décembre 2004 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
Gribouille26 Posté 15 Décembre 2004 Auteur Posté 15 Décembre 2004 Je suis allée voir les liens, je comprend pas tout... 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? De plus, je ne sais pas comment/où l'intégrer à mon code...
Jan Posté 15 Décembre 2004 Posté 15 Décembre 2004 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.
Gribouille26 Posté 15 Décembre 2004 Auteur Posté 15 Décembre 2004 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...
Gribouille26 Posté 15 Décembre 2004 Auteur Posté 15 Décembre 2004 (modifié) Euh... Z'aurriez pas plus d'explications... 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.. Je crois que je comprend pas sur ce coup là... [é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? [/edit] Modifié 15 Décembre 2004 par Gribouille26
Anonymus Posté 15 Décembre 2004 Posté 15 Décembre 2004 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.
Gribouille26 Posté 15 Décembre 2004 Auteur Posté 15 Décembre 2004 D'accord; merci. Ca c'est bon alors, j'ai compris. Mais les guillemets? Je vois pas...
Jan Posté 15 Décembre 2004 Posté 15 Décembre 2004 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...
Gribouille26 Posté 15 Décembre 2004 Auteur Posté 15 Décembre 2004 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?
Jan Posté 15 Décembre 2004 Posté 15 Décembre 2004 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.
Gribouille26 Posté 15 Décembre 2004 Auteur Posté 15 Décembre 2004 Dans le cas donc où les commentaires des internautes seraient inséres sur une page en php!? 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 ?
Anonymus Posté 16 Décembre 2004 Posté 16 Décembre 2004 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à.
Anonymus Posté 16 Décembre 2004 Posté 16 Décembre 2004 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
Gribouille26 Posté 16 Décembre 2004 Auteur Posté 16 Décembre 2004 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 <{POST_SNAPBACK}>
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant