begin process at 2008 08 20 12:07:42
1 228 769 membres
141 nouveaux aujourd'hui
14 257 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

AJOUTER FACILEMENT DES COMMENTAIRES À VOS PAGE PHP SANS SQL/DB


Information sur la source

Description

Infos
*****
Ce script php ajoute très simplement une gestion des commentaires à votre page sans SQL/DB.
Très utile pour interagir avec les internautes qui pourront ainsi exprimer leurs impressions sur vos pages photos ou vos articles.

Utilisations
************
Il suffit d'ajouter la ligne suivante à l'endroit ou vous désirez que les commentaires s'affichent:

    include("http://www.monsite/gestion_commentaires_plus.inc");

Si vous désirez gerer les pseudos par cookies, ajouter les lignes suivantes en premier dans votre page php:

    <?
    //Cookies du pseudo
    //*****************
    
    $pseudo = $_POST['pseudo'];  
    //Enregistre le pseudo actuel
    if(($pseudo != "")&&($pseudo != "Anonyme"))setcookie ("cookie_rep", $pseudo, time()+3600*24*365); //valable 1 année
    
    //Lecture du pseudo
    $cook_rep= $HTTP_COOKIE_VARS["cookie_rep"];
    
    if(!isset($cook_rep))$cook_rep = "Anonyme";
    if($pseudo == "")$pseudo = $cook_rep;
    ?>
    

Demo
****
http://www.jeunessebottens.com/images/albums_photos/manifs/giron_2006/photos_giron/samedi/tonelle/samedi.php

Bouillou

Source

  • <?php
  • /* ***************************************************** */
  • /* Gestion des commentaires des pages photos */
  • /* */
  • /* Date de modification : 25 juillet 2006 */
  • /* Auteur : Bouillou */
  • /* */
  • /* Gère, crée ou affiche les commentaires s'ils existent */
  • /* */
  • /******************************************************* */
  • //*************************
  • //Définitions des variables
  • //*************************
  • $debug = 1; //0=off / 1=on
  • $notification_mail = 1; //0=non / 1=oui
  • $adresse_mail = "monmail@mail.com";
  • $provenance_mail = "From: commentaire_photo@domaines.com";
  • //****
  • //Main
  • //****
  • //Récupère le commentaire
  • $commentaire = $_POST['commentaire'];
  • //Extrait le nom de la page et l'utilise pour le nom du fichier de sauvegarde en ".txt"
  • $script_name = $_SERVER['SCRIPT_NAME'];
  • $pos = strrpos($script_name, "/");
  • $path = substr($script_name, $pos+1, strlen($script_name) - $pos - 5).'.txt';
  • if($debug == 1)
  • echo "path :".$path."<br />";
  • //Gestion du cookies
  • if(!isset($pseudo))
  • {
  • $pseudo = $_POST['pseudo'];
  • if($pseudo == "")$pseudo = "Anonyme";
  • if($debug == 1)
  • echo "<br /><br />Pas de cookies!!!<br /><br />";
  • }
  • else
  • if($debug == 1)
  • echo "<br /><br />Cookies actifs pseudo = <br /><br />".$pseudo;
  • //Enregistre et affiche les commentaires
  • if(isset($_POST['submit']))
  • save_comment($path,$pseudo,$commentaire);
  • else
  • //Affiche les commentaires
  • if(file_exists($path))
  • echo affiche_commentaires($path);
  • //Affichage du formulaire
  • echo '
  • <form enctype="multipart/form-data" name="comment_form" action="'.$_SERVER['PHP_SELF'].'" method="POST">
  • <br />Votre Pseudo<br />
  • <input name="pseudo" type="text" value="'.$pseudo.'" size="20" >
  • <br />Ajouter votre commentaire ici:<br />
  • <textarea name="commentaire" cols="70" rows="5"></textarea><br />
  • <input type="submit" name="submit" value="Envoyer le commentaire" />
  • <br /><br />
  • </form>
  • ';
  • //*********
  • //Fonctions
  • //*********
  • function affiche_commentaires($path)
  • {
  • global $debug;
  • if($debug == 1)
  • echo "<br /><br />Affichage des commentaires<br />";
  • $handletmp = fopen($path,"r");
  • $tableau_content = file($path);
  • fclose($handletmp);
  • //Affichage des commmentaires
  • //***************************
  • // boucle sur tous les elements
  • $HTML = '<style>.font_tableau{color: black; font-size: 10pt;}</style><br /><br />';
  • $HTML .= '<center><table width="550">';
  • $HTML .= '<tr><td align="center" bgcolor="#BEBEBE"><b>Vos impressions</b></td></tr>';
  • for($i=0; $i < count($tableau_content); $i++)
  • {
  • if($i%2==0)
  • {
  • $HTML .= '<tr><td class="font_tableau" valign="center" align="left" bgcolor="#FFFFFF">';
  • $HTML .= $tableau_content[$i].'</td></tr>';
  • }
  • else
  • {
  • $HTML .= '<tr><td class="font_tableau" valign="center" align="left" bgcolor="#BEBEBE">';
  • $HTML .= $tableau_content[$i].'</td></tr>';
  • }
  • }
  • $HTML .= '</table></center>';
  • return $HTML;
  • }
  • function save_comment($path,$pseudo,$commentaire)
  • {
  • //Enregistrement du commentaire
  • //*****************************
  • global $debug;
  • global $notification_mail;
  • if($debug == 1)
  • echo "<br /><br />Enregistrement des commentaires<br />path: ".$path."<br />pseudo: ".$pseudo."<br />commentaire: ".$commentaire."<br />";
  • global $adresse_mail;
  • global $provenance_mail;
  • if(file_exists($path))
  • {
  • $handle = fopen($path,"r");
  • $tableau_content = file($path);
  • fclose($handle);
  • }
  • //remplace le retour à la ligne par <br /> et le \' par '
  • $commentaire=eregi_replace("\r\n","<br />",$commentaire);
  • $commentaire=eregi_replace("\\\'","'",$commentaire);
  • if(($commentaire != "")&&(($commentaire . "\r\n") != $tableau_content[count($tableau_content)-1]))
  • {
  • $handle = fopen($path,"w");
  • for($i=0;$i < count($tableau_content); $i++)
  • {
  • if(($tableau_content[$i] != "")&&($tableau_content[$i] != "\r\n"))
  • fwrite($handle,$tableau_content[$i]);
  • }
  • $str_out = $pseudo." le ".date('d.m.y à H:i:s')."\r\n".$commentaire."\r\n";
  • fwrite($handle,$str_out);
  • fclose($handle);
  • if($notification_mail == 1)
  • {
  • $message = $pseudo." le ".date('d.m.y à H:i:s')."\r\n".$commentaire."\r\nhttp://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
  • mail($adresse_mail,"Nouveau commentaire de ".$pseudo,$message,$provenance_mail);
  • }
  • }
  • else
  • {
  • if($debug == 1)
  • echo "<br /><br />Commentaire vide ou redondant!!!<br />";
  • }
  • echo Affiche_commentaires($path);
  • }
  • ?>
<?php
/* ***************************************************** */
/* Gestion des commentaires des pages photos             */
/*                                                       */
/* Date de modification : 25 juillet 2006                */
/* Auteur               : Bouillou                       */
/*                                                       */
/* Gère, crée ou affiche les commentaires s'ils existent */
/*                                                       */
/******************************************************* */
 
 //*************************
 //Définitions des variables
 //*************************
 
 $debug = 1; //0=off / 1=on
 $notification_mail = 1; //0=non / 1=oui 
 $adresse_mail = "monmail@mail.com";
 $provenance_mail = "From: commentaire_photo@domaines.com";
 
 //****
 //Main
 //****
 
 //Récupère le commentaire
 $commentaire = $_POST['commentaire'];
 //Extrait le nom de la page et l'utilise pour le nom du fichier de sauvegarde en ".txt"
 $script_name = $_SERVER['SCRIPT_NAME'];
 $pos = strrpos($script_name, "/");
 $path = substr($script_name, $pos+1, strlen($script_name) - $pos - 5).'.txt';
 if($debug == 1)
   echo "path :".$path."<br />";
 
 //Gestion du cookies
 if(!isset($pseudo))
   {
   	$pseudo = $_POST['pseudo'];
    if($pseudo == "")$pseudo = "Anonyme";
    if($debug == 1)
      echo "<br /><br />Pas de cookies!!!<br /><br />";
  }
 else 
  if($debug == 1)
   echo "<br /><br />Cookies actifs pseudo = <br /><br />".$pseudo;

 //Enregistre et affiche les commentaires
 if(isset($_POST['submit']))
  save_comment($path,$pseudo,$commentaire);
 else
 //Affiche les commentaires
   if(file_exists($path))
      echo affiche_commentaires($path);  
 
 //Affichage du formulaire
 echo '
 <form enctype="multipart/form-data" name="comment_form" action="'.$_SERVER['PHP_SELF'].'" method="POST"> 
 <br />Votre Pseudo<br />
 <input name="pseudo" type="text" value="'.$pseudo.'" size="20" >
 <br />Ajouter votre commentaire ici:<br />
 <textarea name="commentaire" cols="70" rows="5"></textarea><br />
 <input type="submit" name="submit" value="Envoyer le commentaire" />
 <br /><br />
 </form>
 ';
 
 //*********
 //Fonctions
 //********* 

 function affiche_commentaires($path)
 {
  global $debug;
  if($debug == 1)
   echo "<br /><br />Affichage des commentaires<br />";
 
  $handletmp = fopen($path,"r");
  $tableau_content = file($path);
  fclose($handletmp);
     
  //Affichage des commmentaires  
  //***************************
  
  // boucle sur tous les elements
  $HTML  = '<style>.font_tableau{color: black; font-size: 10pt;}</style><br /><br />';
  $HTML .= '<center><table width="550">';
  $HTML .= '<tr><td align="center" bgcolor="#BEBEBE"><b>Vos impressions</b></td></tr>'; 
 
  for($i=0; $i < count($tableau_content); $i++)
  {
    if($i%2==0)
      {
       $HTML .= '<tr><td class="font_tableau" valign="center" align="left" bgcolor="#FFFFFF">';
       $HTML .= $tableau_content[$i].'</td></tr>';
      }
    else
     {
       $HTML .= '<tr><td class="font_tableau" valign="center" align="left" bgcolor="#BEBEBE">';
       $HTML .= $tableau_content[$i].'</td></tr>';
     }
  }
  $HTML .= '</table></center>';
  
  return $HTML;
 } 
 
 
 function save_comment($path,$pseudo,$commentaire)
  {
   //Enregistrement du commentaire	
   //*****************************
   
   global $debug;
   global $notification_mail;
   if($debug == 1)
   echo "<br /><br />Enregistrement des commentaires<br />path: ".$path."<br />pseudo: ".$pseudo."<br />commentaire: ".$commentaire."<br />";
 
   global $adresse_mail;
   global $provenance_mail;
  
   if(file_exists($path))
     {
      $handle = fopen($path,"r");
      $tableau_content = file($path);
      fclose($handle);  
     }
   //remplace le retour à la ligne par <br /> et le \' par '
   $commentaire=eregi_replace("\r\n","<br />",$commentaire);
   $commentaire=eregi_replace("\\\'","'",$commentaire);   

   if(($commentaire != "")&&(($commentaire . "\r\n") != $tableau_content[count($tableau_content)-1]))
     { 
      $handle = fopen($path,"w"); 
      for($i=0;$i < count($tableau_content); $i++)
         {  
          if(($tableau_content[$i] != "")&&($tableau_content[$i] != "\r\n"))
          fwrite($handle,$tableau_content[$i]);
         }     
      $str_out = $pseudo." le ".date('d.m.y à H:i:s')."\r\n".$commentaire."\r\n";
      fwrite($handle,$str_out);   
      fclose($handle);
      if($notification_mail == 1)
        {
         $message = $pseudo." le ".date('d.m.y à H:i:s')."\r\n".$commentaire."\r\nhttp://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
         mail($adresse_mail,"Nouveau commentaire de ".$pseudo,$message,$provenance_mail);
        } 
     }
   else
    {
     if($debug == 1)
      echo "<br /><br />Commentaire vide ou redondant!!!<br />";	
    }   
   echo Affiche_commentaires($path); 
 }
 
?>

Conclusion

N'hésitez pas à challenger mon code ;o)

En espérant que ce code sera utile,

A+,

Bouillou
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de coockiesch le 26/07/2006 07:24:15

    Salut!
    Tu devrais coder avec register_gloabsl à OFF: d'un point de vue sécurité c'est beaucoup mieux... :)

    Autrement, tu devrais protéger les commentaires avec htmlentities, pas que qlqn s'amuse à rentrer du HTML ou JavaScript ;)

    @++

    R@f

  • signaler à un administrateur
    Commentaire de Bouillou2 le 26/07/2006 10:52:07

    Salut,

    Effectivement, cette sécurité n'est pas implémentée ce qui n'est pas très bien...

    Du côté des variables globales, pourquoi cela pose un problème sécuritaire?

    A+,

    Bouillou

  • signaler à un administrateur
    Commentaire de kiki2sirom le 26/07/2006 11:32:25

    salut
    il ne faut pas faire de count dans une boucle mais avant la boucle.
    ligne 88 et 133 : for($i=0; $i < count($tableau_content); $i++)

    à remplacer par :
    $nb=count($tableau_content);
    for($i=0; $i < $nb; $i++)

    optimisation non négligeable si tu as beaucoup de commentaires

    cdt

    kiki

  • signaler à un administrateur
    Commentaire de coockiesch le 26/07/2006 14:29:18

    Salut!
    Parce qu'on peut éventuellement, pour une variable non-initialisée, lui injecter une valeur depuis l'extérieur...

    @++

    R@f

  • signaler à un administrateur
    Commentaire de Anthomicro le 26/07/2006 22:45:46

    Salut,

    pense à vérifier que  $commentaire = $_POST['commentaire']; existe car sinon tu auras une erreur d'undefined variable ;)

    #  $commentaire=eregi_replace("\r\n","<br />",$commentaire);
    #    $commentaire=eregi_replace("\\\'","'",$commentaire);

    tu peux remplacer ça par un str_replace et puis un stripslashes() ;)

    Sinon je trouve que l'idée est sympa et l'utilisation a l'air simple ;)

    a +

  • signaler à un administrateur
    Commentaire de Vyper909 le 31/07/2006 15:39:33

    Il est aussi important de ne PAS utiliser de fichiers ayant une extension de type ".inc" car la plupart des serveurs (Apache ou autres) ne connaissent pas cette extension et si un "hacker" réussit à connaitre les noms de fichiers "include" (ce qui n'est pas très difficile), il peut tenter de les faire exécuter par le serveur et comme il ne connait pas l'extension, il les affichera comme du texte.  Pour un script de commentaires ce n'est pas vital, mais pour d'autres trucs (un fichier include qui comprendrait un nom d'utilisateur et mot de passe pour une base de données, par exemple), c'est la sécurité complète de ton site qui est en jeu.

    Je nomme TOUS Mes fichiers includes avec l'extension ".php" à la fin, comme de vrais fichiers PHP.  Donc si quelqu'un veut les exécuter, ca ne fonctionnera tout simplement pas.

    Sinon je crois que la source est bien et je vais probablement m'en inspirer pour un petit "guestbook" sur mon site perso, un jour...

  • signaler à un administrateur
    Commentaire de Bouillou2 le 31/07/2006 15:43:25

    Merci pour tous vos commentaires!

    J'en prends bonne note et je réaliserai une version 1.1 dès que j'aurai un peu de temps.

    A+,

    Bouillou

  • signaler à un administrateur
    Commentaire de JackNUMBER le 05/01/2007 12:43:48

    bonjour !
    j'orai aimé savoir si il était possible de faaire en sorte que les commentaires les plus ressents s'affichent en haut

    merci

  • signaler à un administrateur
    Commentaire de malalam le 05/01/2007 12:53:32 administrateur CS

    Hello,

    faites attention à l'orthographe quand même, un minimum...
    "bonjour!
    J'aurais aimé savoir s'il était possible de faire en sorte que les commentaires les plus récents s'affichent en haut.

    Merci"

  • signaler à un administrateur
    Commentaire de JackNUMBER le 05/01/2007 13:40:48

    ha oui, désolé...

  • signaler à un administrateur
    Commentaire de MadOlivierMax le 22/02/2007 11:44:51

    Bonjour tout le monde,

    Je suis aussi intérresser pour avoir les commentaires au début (et ne pas se taper tous les commentaires avant (même si c'est une logique !!!))
    Donc je fais un up sur cette demande en attendant vos réponses je remercie Bouillou (particulièrement) pas  Anthomicro et Vyper909 pour les précisions dans le code.

  • signaler à un administrateur
    Commentaire de pwepwe973 le 29/12/2007 03:49:25

    comment faire pour les pseudo frame le système de récupération de la page ne marche pas

  • signaler à un administrateur
    Commentaire de gregchris789 le 01/03/2008 19:01:26

    bonjour voila je suis novice lol petite question   include("http://www.monsite/gestion_commentaires_plus.inc");
    je dois le metres ou ? en php ou bien htlm je comprend pas

  • signaler à un administrateur
    Commentaire de nimp0rtequi le 13/03/2008 21:28:22

    Bonjour,
    Je suis encore moins que novice aussi, mais j'ai lu un peu de doc et me suis fait aider par un ami.
    Donc j'ai renommé le gestion_commentaire_plus.inc en gestion_commentaire_plus.php pour plus de sécurité, d'après ce que j'ai lu plus haut.
    J'ai aussi mis l'option
    $debug = 0; //0=off / 1=on
    à la place de
    $debug = 1; //0=off / 1=on
    pour éviter d'afficher des commentaires de débogage du script au milieu de ceux des visiteurs.
    Globalement ça marche bien. Mais peut-être est-ce dù au CSS ou à la ligne concernant l'affichage dans un tableau HTML de 550 pixels : sur firefox sous windows, ça me change ma mise en page de départ.
    Par contre avec firefox sous linux, ça apparait comme je veux
    Un exemple :
    http://thibault.aspe.free.fr/content/christian_rosset_10022008.php
    un autre :
    http://thibault.aspe.free.fr/content/chereeunschnell022008.php

    Enfin, bravo, ce script tourne bien.
    Et pour répondre au demandeur ci-dessus, il faut nommer la page sur laquelle on veut que le commentaire agisse en .php
    et mettre dans le code de cette page :
    <?php include (gestion_commentaires_plus.inc");?>
    si le formulaire gestion_commentaires_plus.inc est bien dans le même répertoire que le fichier sur lequel on veut qu'il agisse.
    Voilà ce que j'ai appris et appliqué hier soir.
    comme quoi ce script est éfficace même avec les novices du php.

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS