[PHP] Livre d'or

Fermé
FloR3nT Messages postés 9 Date d'inscription dimanche 20 juillet 2008 Statut Membre Dernière intervention 2 janvier 2011 - Modifié par FloR3nT le 1/01/2011 à 22:38
FloR3nT Messages postés 9 Date d'inscription dimanche 20 juillet 2008 Statut Membre Dernière intervention 2 janvier 2011 - 2 janv. 2011 à 19:47
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 19250 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 22 décembre 2024 4 505
1 janv. 2011 à 22:46
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 dimanche 3 octobre 2010 Statut Membre Dernière intervention 31 mai 2019 163
1 janv. 2011 à 23:12
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 19250 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 22 décembre 2024 4 505
1 janv. 2011 à 23:16
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 dimanche 3 octobre 2010 Statut Membre Dernière intervention 31 mai 2019 163
2 janv. 2011 à 16:19
Je suis tout à fait d'accord avec toi !
0
FloR3nT Messages postés 9 Date d'inscription dimanche 20 juillet 2008 Statut Membre Dernière intervention 2 janvier 2011
2 janv. 2011 à 12:02
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 19250 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 22 décembre 2024 4 505
2 janv. 2011 à 12:31
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 dimanche 20 juillet 2008 Statut Membre Dernière intervention 2 janvier 2011
2 janv. 2011 à 16:24
marche tjrs sans le code...
0
avion-f16 Messages postés 19250 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 22 décembre 2024 4 505
2 janv. 2011 à 16:40
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 dimanche 20 juillet 2008 Statut Membre Dernière intervention 2 janvier 2011
Modifié par FloR3nT le 2/01/2011 à 19:48
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
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 dimanche 2 janvier 2011 Statut Membre Dernière intervention 8 septembre 2012 5
Modifié par Facegeek le 2/01/2011 à 14:52
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 dimanche 20 juillet 2008 Statut Membre Dernière intervention 2 janvier 2011
2 janv. 2011 à 16:25
je préfère le captcha :)
0
Facegeek Messages postés 39 Date d'inscription dimanche 2 janvier 2011 Statut Membre Dernière intervention 8 septembre 2012 5
2 janv. 2011 à 17:04
ok :)
0