Un soucis de filtre

Résolu/Fermé
Profil bloqué - 28 déc. 2009 à 11:41
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 - 29 déc. 2009 à 16:10
Bonjour a tous.
je suis en train de modifier le script d'un livre d'or livre d'or. Seulement, je voudrais pouvoir y integrer un script de filtre par mot qui s'applique sur tous les champs de saisie afin de ne pas me retrouver polluer de message indesirable.
Il ne s'agit pas de verouiller les robots c'a c'est bon, c'es les post humain qu'il faut bloquer.

Voila les codes:
Pages index.php
<html>
<head>
<title>Livre d'or des animaux de la ferme</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="message_status.js"></script>
<script type="text/javascript" src="redim.js"></script>
<style type="text/css">
<!--
.Style1 {font-size: 12px;
color:#FF0000}
.Style2 {font-size: 14px}
-->
</style>
</head>
<body>
<table width="695" border="0" align="center">
  <tr>
    <td>
<h1 align="center">Le Livre d'OR des animaux de la ferme</h1>
<form action="message.php" method="post">
<div>
<table width="695" border="0" align="center">
  <tr>
    <td><fieldset> <legend>Votre Nom<span class="Style1">*</span></legend>
<input type="text" name="pseudo" /></fieldset></td>
    <td><fieldset><legend>Votre Prénom<span class="Style1">*</span></legend>
<input type="text" name="prenom" /></fieldset></td>
  </tr>
  <tr>
    <td colspan="2"><fieldset><legend>Votre Rue<span class="Style1">*§</span></legend>
<input type="text" name="rue" /></fieldset></td>
    </tr>
  <tr>
    <td><fieldset><legend>Votre Code Postale<span class="Style1">*§</span></legend>
<input type="text" name="code" /></fieldset></td>
    <td><fieldset><legend>Votre Ville<span class="Style1">*§</span></legend>
<input type="text" name="ville" /></fieldset></td>
  </tr>
  <tr>
    <td><fieldset><legend>Votre Téléphone<span class="Style1">*§</span></legend>
<input type="text" name="telephone" /></fieldset></td>
    <td><fieldset><legend>Votre E-Mail<span class="Style1">*§</span></legend>
<input type="text" name="mail" /></fieldset></td>
  </tr>
  <tr>
    <td colspan="2"><fieldset><legend>Postez un message pour le livre d'or<span class="Style1">*</span></legend><textarea cols="66" rows="6" name="message"></textarea>
</fieldset></td>
    </tr>
  <tr>
    <td colspan="2"><center><input type="submit" accesskey="Enter"/></center></td>
    </tr>
  <tr>
    <td colspan="2">Les champs avec <span class="Style1">*</span> sont obligatoire.<br />
          Les champs avec <span class="Style1">§</span> ne servent qu'a vous contacter le cas échéants afin que vous puissiez confirmez votre message.</td>
    </tr>
</table>
Pour consultez simplement le livre d'or <a href="consultezlo.php">cliquez ici</a>
</div>
</form>
</td>
  </tr>
</table>
</body>
</html>


page message.php
<?php
// Pour contrer les spams, on va faire une petite regex
if(preg_match("!http|/|www|\.[A-Za-z]{2,4}!is",@$_POST['message']))
{
   echo "<blockquote><h1>Anti-Spams</h1>
      <p><em>Les URL et les slashs sont interdits.
                Pensez aussi à mettre un espace après un point.</em></p>
                </blockquote>\n";
   exit();
}


/* Partie facultative
/ Pour éviter qu'une unique personne poste 50 fois dans le livre d'or, on va insérer un cookie
*/
//setcookie("ip",$_SERVER['REMOTE_ADDR'],time()+.3600*60*90);

// Si le cookie est égale à l'ip du client alors on le stop
//if(isset($_COOKIE['ip']) && $_COOKIE['ip']==$_SERVER['REMOTE_ADDR'])
//{
//        echo "<h1>Vous ne pouvez émettre qu'un seul avis et vous l'avez déjà donné !</h1>";
//
 //       // On stop le script
 //       exit;
//}
// Fin de la partie facultative

// Mettons le (future) fichier dans une variable
$commentaires="messages.doc";
$total="total.doc";

// assignons nos 2 variables du formulaire et on en profite pour les protégers des balises HTML
$pseudo=htmlspecialchars($_POST['pseudo']);
$prenom=htmlspecialchars($_POST['prenom']);
$rue=htmlspecialchars($_POST['rue']);
$code=htmlspecialchars($_POST['code']);
$ville=htmlspecialchars($_POST['ville']);
$telephone=htmlspecialchars($_POST['telephone']);
$mail=htmlspecialchars($_POST['mail']);
$message=htmlspecialchars($_POST['message']);

// Pensons au retour à la ligne et au stripslashes pour la variable $message
$message=stripslashes(nl2br($message));

// On met en place quelques conditions pour les cellules (nom et message)
// On vérifie avant tout si le fichier existe si ce n'est pas le cas on le crée
if(!is_file($commentaires))
{
        $verif=@fopen($commentaires,"w+");
}

// On vérifie que le login ou le message ne soient pas vide
elseif (trim($message)=="" || trim($pseudo)=="" || trim($prenom)=="")
{
        echo "Vous devez remplir tous les champs ! <a href=\"index.htm\">Retour sur le livre d'or</a>";
       
        // On sort du script !
        exit;
}

// Après ces quelques vérification d'usage on passe  à l'exécution de ce formulaire

       
        // Si ok on ouvre en écirture-enregistrement du fichier message.txt
        $verif=@fopen($commentaires,"r+");
               
        // On analyse les anciennes données et on les stocks
        $stock=@fread($verif,filesize($commentaires));
       
        // On met la date dans une varialbe
		$date=date ("d/m/Y - H:i");
       
        // On paramère le tout dans la variable $opinion
        $opinion="<b>".$pseudo."&nbsp;".$prenom."</b> a &eacute;crit le : ".$date."<br>\n".$message."<br />\n<hr />";
       
        // On remet le curseur du fichier en début de ligne
        rewind($verif);
       
        // On insère le nouveau commentaire
        fputs($verif,$opinion." \n".$stock);
       
        // On clore le fichier
        fclose($verif);
       
        // On creer le fichier totale
		
if(!is_file($total))
{
		$veriftotal=@fopen($total,"w+");
}
// On vérifie que le login ou le message ne soient pas vide
elseif (trim($message)=="" || trim($pseudo)=="" || trim($prenom)=="" || trim($rue)=="" || trim($code)=="" || trim($ville)=="" || trim($mail)=="" || trim($telephone)=="")
{
        echo "Vous devez remplir tous les champs ! <a href=\"index.htm\">Retour sur le livre d'or</a>";
       
        // On sort du script !
        exit;
}

// Après ces quelques vérification d'usage on passe  à l'exécution de ce formulaire

       
        // Si ok on ouvre en écirture-enregistrement du fichier message.txt
        $veriftotal=@fopen($total,"r+");
               
        // On analyse les anciennes données et on les stocks
        $stocktotal=@fread($veriftotal,filesize($total));
       
        // On paramère le tout dans la variable $opinion
        $opiniontotal="<b>".$pseudo."&nbsp;".$prenom."</b> a &eacute;crit le : ".$date."<br>\n".$rue."<br>".$code."&nbsp;".$ville."<br>".$telephone."&nbsp;".$mail."<br>".$message."<br />\n<hr />";
       
        // On remet le curseur du fichier en début de ligne
        rewind($veriftotal);
       
        // On insère le nouveau commentaire
        fputs($veriftotal,$opiniontotal." \n".$stocktotal);
       
        // On clore le fichier
        fclose($veriftotal);

        // On redirige vers la page d'affichage
        header('Location: consultezlo.php');
?>


le but, avoir des infos qui reste accecisble uniquement a la partie admin.

voila et j'ai beau essaye de coller des script php ou java, il ne filtre pas les champs meme pas le champs $message.
Si vous savez comment faire, merci de l'indiquer.
A voir également:

4 réponses

avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 503
28 déc. 2009 à 16:25
Tu peux utiliser les regex.
if(preg_match('#mot1|mot2|mot3|mot4#',$champ1) || preg_match('#mot1|mot2|mot3|mot4#',$champ2)) {
     echo 'Erreur';
} else {
     echo 'Ok';
}
0
Profil bloqué
29 déc. 2009 à 00:34
J'ai beau l'utiliser, cela ne fonctionne pas.
j'essaye avec un mot simple de robots pollueur: viagra

<?php
$message=htmlspecialchars($_POST['message']);

if(preg_match('viagra',$message)) {
     echo 'Erreur';
	 exit();
} else {
     echo 'Ok';
}
?>

mais je ne parviens pas a le faire fonctionner.
0
Profil bloqué
29 déc. 2009 à 12:44
desoler :p c'etait moi, je sai spas ou j'ay buger mais bon ca marche maintenant.
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 503
29 déc. 2009 à 16:10
Tu avais oublier les délimitation "#".
Pour rendre la regex insensible à la casse (majuscules/minuscules), ajoute un "i" après le deuxième "#".
0