[PHP] Livre d'or

FloR3nT Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
FloR3nT Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'aimerais inclure un système d'antispam dans mon livre d'or en sorte que si il détecte le spam il l'auto supprime de la base de donnée

voici le code:

        <style type="text/css">  
        form, .pages  
        {  
            text-align:center;  
        }  
        </style>  
   
    <form method="post" action="livre.xml">  
 <div class="block_titre">  
   <h1 align="center"><u>Livre d'Or</u></h1>  
</div>  
<div class="block_contenu" style="text-align: center; padding: 20px 0px;"><i>Notre radio vous plaît ?</i>    Laissez-nous un message !</div>  
 <div class="block_contenu" style="text-align: center; font-size: 9px; padding: 20px 150px;">  
    </div>  
        <p>  
            Pseudo : <input name="pseudo" /><br /><br />  
            Message :<br />  
            <textarea name="message" rows="8" cols="35"></textarea><br />  
              
            <br /><input type="submit" value="Envoyer" />  
        </p>  
    </form>  
   
    <p class="pages">  
   
<?php  
mysql_connect("localhost", "rng", "pass");  
mysql_select_db("rng");  
   
// --------------- Etape 1 -----------------  
// Si un message est envoyé, on l'enregistre  
// -----------------------------------------  
   
if (isset($_POST['pseudo']) AND isset($_POST['message']))  
{  
    $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité  
    $message = mysql_real_escape_string(htmlspecialchars($_POST['message'])); // De même pour le message  
    $message = nl2br($message); // Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br />  
   
    // On peut enfin enregistrer :o)  
    mysql_query("INSERT INTO site_livre VALUES('', '" . $pseudo . "', '" . $message . "','". $date ."')");  
}  


// --------------- Etape 2 -----------------  
// On écrit les liens vers chacune des pages  
// -----------------------------------------  
   
// On met dans une variable le nombre de messages qu'on veut par page  
$nombreDeMessagesParPage = 8; // Essayez de changer ce nombre pour voir :o)  
// On récupère le nombre total de messages  
$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM site_livre');  
$donnees = mysql_fetch_array($retour);  
$totalDesMessages = $donnees['nb_messages'];  
// On calcule le nombre de pages à créer  
$nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);  
// Puis on fait une boucle pour écrire les liens vers chacune des pages  
echo 'Page(s) : ';  
for ($i = 1 ; $i <= $nombreDePages ; $i++)  
{  
    echo '<a href="livre.xml?page=' . $i . '">' . $i . '</a> ';  
}  
?>  
   
</p>  
   
<?php  
   
   
// --------------- Etape 3 ---------------  
// Maintenant, on va afficher les messages  
// ---------------------------------------  
   
if (isset($_GET['page']))  
{  
        $page = intval($_GET['page']); // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4)  
}  
else // La variable n'existe pas, c'est la première fois qu'on charge la page  
{  
        $page = 1; // On se met sur la page 1 (par défaut)  
}  
   
// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL  
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;  
   
$reponse = mysql_query('SELECT * FROM site_livre ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);  
   
while ($donnees = mysql_fetch_array($reponse))  
{  
        echo '<br /><p><strong>' . $donnees['pseudo'] . '</strong> a écrit :<br />' . $donnees['message'] . '</p>';  
}  
   
mysql_close(); // On n'oublie pas de fermer la connexion à MySQL ;o)  
?>


merci de vos future réponse !

A voir également:

6 réponses

avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Salut.

Tu peux utiliser Askimet : https://akismet.com/
C'est une sorte de base de données connaissant une partie du spam.

Tu peux en plus ajouter une image contenant un code à recopier (captcha) :
http://www.captcha.fr/
https://www.google.com/recaptcha/about/

Tu peux également utiliser du Javascript pour l'envoie du formulaire.
Les robots spammeurs ne le comprennent pas, donc ils seront bloqués.
3
MastercroW Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   163
 
Avion, sais tu que maintenant les robots comprennent le JavaSript. De plus tu peux être un spammeur sans être un robot xD.
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Pas tous, puis il y en a même qui lisent les captchas, et il y a aussi des robots spammeurs humains ;) (tu crois que ça paye bien?)
De toutes façons, il est impossible d'éradiquer le spam à 100%, mais on peut le ralentir.
0
MastercroW Messages postés 1094 Date d'inscription   Statut Membre Dernière intervention   163
 
Je suis tout à fait d'accord avec toi !
0
FloR3nT Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour,

j'ai installer le captcha,

le seul problème sais que meme si on tape pas le code, le message ce valide...

voici le code mise à jour avec le captcha dedans :)

http://pastebin.com/edjPb1NZ
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Ajoute session_start() avant debut.inc.php
Il faut mieux faire la vérification chk_script() dans la condition suivant le commentaire de l'étape 1.
0
FloR3nT Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
marche tjrs sans le code...
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Est-ce que le fichier debut.inc.php contient du code HTML ?
Si oui, alors le session_start() doit être fait avant.
Il y en a une dans le script du captcha, mais ce script est inclus après, et on ne peut pas lancer une session après l'écriture de caractères.

Et j'ai dit chk_script() au lieu de chk_crypt() ...
0
FloR3nT Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai changer ce que tu viens de me dire,

voilà ce qui en est:

Fatal error: Call to undefined function chk_script() in /home/rng/www/website_pages/guestbook.php on line 8

http://pastebin.fr/9918

la code sessions est déjà dans le debut.inc.php :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
Salut,

Il suffit de faire un bon captcha et peu contraignant, donc exit celui qui te demande de lire les lettres. Après tu peux t'amuser à faire des captcha sympa :

- Une image où il doit cliquer sur un endroit précis.
- Une addition ou soustraction.

Ensuite fais toi une liste noir des ip.

Enfin augmente la durée entre 2 formulaire.

En fait tout est réalisable, la seule limite c'est ton imagination ...
La chance aide parfois, le travail toujours !
0
Facegeek Messages postés 39 Date d'inscription   Statut Membre Dernière intervention   5
 
Il y a un truc très bête, tu crée un champ de texte que tu cache avec CSS, et 90% des robots vont automatiquement remplir ce champ. Un visiteur normal ne va pas le remplir puisqu'il ne le verra pas. Donc avant d'enregistrer le message tu ajoute une condition:

if (empty($antirobot))
ect...

C'est moins embêtant qu'un captcha pour le visiteur.
-1
FloR3nT Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
je préfère le captcha :)
0
Facegeek Messages postés 39 Date d'inscription   Statut Membre Dernière intervention   5
 
ok :)
0