Livre d'or Anti-Bots ! ==>Résolue est Bonne Année 2007 !

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Livre d'or Anti-Bots ! ==>Résolue est Bonne Année 2007 !

par Moxostoma » 02 janv. 2007, 17:13

J'ai oublié de me connectez ^^ :lol:

par Invité » 02 janv. 2007, 17:12

J'ai tout bidouille mon code est sa est le code marche impec ;-)
Merci ! :o

par thehawk » 01 janv. 2007, 12:15

Moi je vois une autre erreur en effet php lit le code uniquement jusqu'a ce que on lui dise de s'arreter par ?> ou exit(); ici lorsque tu traite la verification tu ne lui dit pas de s'arreter ainsi moi je verrai :
else 
{
echo '<p>Désolé, le code n\'est pas bon, retournez sur la page précédente.</p>';
exit();
}
Ainsi le code situer plus bas ne sera pas afficher ...

Ou encor si tu ne veut pas arrete completement l affichage de ta page je te conseile ceci :
if( strtolower($_POST['code']) == $_SESSION['enregistrement_du_code'] ) {
       
                echo '<p>ok, pas de prob, le code est bon</p>';
                $post_verfication = TRUE;
                // Action autorisée par la validation du code
       
        }
       
        // Ici, on va afficher ce qu'on veut pour indiquer que ca n'a pas été
        else echo '<p>Désolé, le code n\'est pas bon, retournez sur la page précédente.</p>';

} 

Puis ensuite
if (isset($_POST['pseudo']) AND isset($_POST['message']) AND $post_verification)
{
    

par Ajoloca » 31 déc. 2006, 22:03

Bonjour,

Je ne suis pas sur que la structure de ta page soit correcte.

Essaie de voir le code XHTLM généré, je crois que l'une des "form" n'est pas fermée.

Si elle est fermée, dans ce cas tu mets une form dans une form == interdit.

Livre d'or Anti-Bots ! ==>Résolue est Bonne Année 2007 !

par Moxostoma » 31 déc. 2006, 21:47

Bonsoir, sur mon site, j'ai un problèmes de bot qui pollue mon livre d'or,
ainsi, j'ai voulus créer mon propre code de vérification. Le visiteur doit entrez le code, qui se trouvent sur l'image est validez. Si, le code entrer est bon le message est postez, s'il ne l'est pas le message n'est pas postez!

La page de mon livre d'or :
<?php

// Démarage de la session PHP4
// Il faut toujours déclarer la session avant le premier envoi de donnés.
// Par sécurité, on le fait tout au début.

session_start();

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Livre d'or</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <style type="text/css">
        form, .pages
        {
            text-align:center;
        }
        </style>
    </head>
   
    <body>

    <form method="post" action="http://www.zone-dinogaia.omivu.net/test/bot/exemple.php">
    <p>Mon site vous plaît ? Laissez-moi un message !</p>
   
    <?php

// Si on a pas encore validé le formulaire, la variable POST "code" n'existe pas.
// On va donc écrire le formulaire

// Vous pouvez voir ceci dans le code du formulaire "<img src="image.php" />"
// En réalité, on appelle la page qui est une image mais qui va également génerer le code.

if( !isset($_POST['code']) ) {

        echo '<form id="form1" name="form1" method="post" action=""> 
        Pseudo : <input type="text" name="champs_1_exemple" /><br />
        Message :<br />
        <textarea name="message" rows="8" cols="35"></textarea> <br />
 
        <p><img src="image.php" /></p>
 
        <p>Entrez votre code de vérfication
        <input type="text" name="code" /></p>
       
        <p><input type="submit" name="Submit" value="Envoyer" /></p>

        </form>';


}

// Autrement, la variable CODE existe

else {

        // On va la vérifier avec celle générée par l'image (image.php)
        // On utilise la fct "strtolower" qui renvoie l'entree du formulaire en minuscule par sécurité
        if( strtolower($_POST['code']) == $_SESSION['enregistrement_du_code'] ) {
       
                echo '<p>ok, pas de prob, le code est bon</p>';
                // Action autorisée par la validation du code
       
        }
       
        // Ici, on va afficher ce qu'on veut pour indiquer que ca n'a pas été
        else echo '<p>Désolé, le code n\'est pas bon, retournez sur la page précédente.</p>';

}




?>

<p class="pages">
<?php
mysql_connect("******", "******", "******");
mysql_select_db("******");

// --------------- Etape 1 -----------------
// Si un message est envoyé, on l'enregistre
// -----------------------------------------

if (isset($_POST['pseudo']) AND isset($_POST['message']))
{
   
    $pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES); // On utilise htmlentities par mesure de sécurité
       
    $message = htmlentities($_POST['message'], ENT_QUOTES); // 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 livreor VALUES('', '" . $pseudo . "', '" . $message . "')");
}

// --------------- 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 = 20; // 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 livreor');
$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 : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
    echo '<a href="livreor.php?page=' . $i . '">' . $i . '</a> ';
}

?>

</p>

<?php
// --------------- Etape 3 ---------------
// Maintenant, on va afficher les messages
// ---------------------------------------

if (isset($_GET['page']))
{
    $page = $_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 livreor ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);

while ($donnees = mysql_fetch_array($reponse))
{
    echo '<p><strong>' . $donnees['pseudo'] . '</strong> a écrit :<br />' . $donnees['message'] . '</p>';
}

mysql_close(); // On n'oublie pas de fermer la connexion à MySQL ;o)
?>

</body>
</html>
La page de l'image :
<?php
session_start();

               

                header ("Content-type: image/png");

                // Nombre de caractère du code
                $nb_caract = 8;

                // Emplacement des images
                $pathimg = './code/';

                // Taille de l'image de brouillage
                $taille_code['x'] = 40;
                $taille_code['y'] = 320;

                // Taille des lettres
                $taille_lettre['x'] = 32;
                $taille_lettre['y'] = 45;

                $im = imageCreate ($nb_caract*$taille_lettre['x'], $taille_lettre['y']);
                $couleur_fond = ImageColorAllocate ($im, 219, 219, 219);

                $pass = "";
                $chaine = 'abcdefghijklmnopqrstuvwxyz0123456789';

                for($ct=0; $ct<$nb_caract; $ct++) $pass .= $chaine{mt_rand()%strlen($chaine)};

                for($i=0;$i<$nb_caract;$i++) {

                        $imc = imagecreatefrompng($pathimg.$pass{$i}.'.png');
                        imagecopy ($im, $imc,$i*$taille_lettre['x'] ,mt_rand(-4, 4) ,mt_rand(-1, 1) ,0, $taille_lettre['x'], $taille_lettre['y']);

                }

                $imc = imagecreatefrompng($pathimg.'code.png');

                for($i=0;$i<$nb_caract;$i++) imagecopy ($im, $imc,$i*$taille_lettre['x'] ,0 ,mt_rand(0, $taille_code['x']-$taille_lettre['x']) ,mt_rand(0, $taille_code['y']-$taille_lettre['y']) , $taille_lettre['x'], $taille_lettre['y']);

                imagePng ($im);


$_SESSION['enregistrement_du_code'] = $pass;

?>
Le problème, c'est que le code soit bon où mauvais, sa affiche quand même le message :x
Comment y remediez... :?:

Merci ! :P