Un soucis de filtre

Résolu
Profil bloqué -  
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   -
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 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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é
 
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é
 
desoler :p c'etait moi, je sai spas ou j'ay buger mais bon ca marche maintenant.
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Tu avais oublier les délimitation "#".
Pour rendre la regex insensible à la casse (majuscules/minuscules), ajoute un "i" après le deuxième "#".
0