Ajouter facilement des commentaires à vos page php sans sql/db

Soyez le premier à donner votre avis sur cette source.

Vue 39 349 fois - Téléchargée 2 521 fois

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 / Exemple :


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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

coockiesch
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3 -
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
cs_Bouillou2
Messages postés
11
Date d'inscription
dimanche 28 mars 2004
Statut
Membre
Dernière intervention
31 juillet 2006
-
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
kiki2sirom
Messages postés
153
Date d'inscription
mardi 17 août 2004
Statut
Membre
Dernière intervention
23 décembre 2010
-
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
coockiesch
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3 -
Salut!
Parce qu'on peut éventuellement, pour une variable non-initialisée, lui injecter une valeur depuis l'extérieur...

@++

R@f
cs_Anthomicro
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8 -
Salut,

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

# $commentaire=eregi_replace("\r\n","
",$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 +

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.