IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Captcha


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Captcha
    Bonjours (ou bonsoir) a tous,
    j'ai fais un tuto il y a pas longtemps pour avoir un antiflood sur un de mes formulaire.
    mais je ne parviens pas a bien intégrer mon formulaire ce cette antiflood du coup au moment de la validation du formulaire par l'utilisateur, que la réponse a l'antiflood soit bonne ou pas le formulaire est posté :s

    si vous voulez bien m'aider, Merci beaucoup.

    Voici le code de mon antiflood (sans mon formulaire ni aucunes autres retouche) :

    Index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    <?php
    require(dirname(__FILE__).DIRECTORY_SEPARATOR.'captcha.php');
     
    if(isset($_POST['captchaResult']))
    {
    	if(checkCaptcha('captchaResult', isset($_POST['caseInsensitive'])))
    		$result = '<div class="result true">Bonne r&eacute;ponse bonne... bravo... .. !</div><br />';
    			else
    				$result = '<div class="result false">Mauvaise r&eacute;ponse... pas de chance... il fallait r&eacute;pondre '.$_SESSION['captchaResult'].'... .. !</div><br />';
    }
    else $result = '';
     
    $captcha = getCaptcha();
     
    echo '<?xml version="1.0" encoding="ISO-8859-1"?>'."\n"; 
     
    ?>
    <!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" lang="fr" dir="ltr">
    	<head>
    		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    		<meta http-equiv="content-language" content="english" />
    		<title>Captcha</title>
    		<style type="text/css">
    	    <!--//
    	    body { background-color:#F8F8F8; } 
    	    input
    		{
    			border: #000000 1px solid; 
    			margin-bottom:2px;
    			vertical-align:middle;
    			display: in-line;
    			background-color:#ffffff;
    		}
    		input[type="checkbox"] { border: none; } 
    		.result { margin:auto;text-align:center; }
    		.true { color:#00ff00; }
    		.false {  color:#ff0000; }
    		//-->
    		</style>
    	</head>
    <body>
      <div style="width:50%;margin:auto;margin-top:30px;">
    	<fieldset style="text-align:center;">
    		<legend>Captcha</legend>
    		<br />
    		<?php echo $result; ?>
    		<form action="index.php?" method="post">
    			<label for="captchaResult"><?php echo $captcha; ?> : </label><input type="text" name="captchaResult" size="1" />
    				<br />
    			<input type="checkbox" name="caseInsensitive" value="1" <?php echo isset($_POST['caseInsensitive']) ? 'checked="checked" ' : ''; ?>/> Case insensitive 
    				<br />
    			<input type="submit" value="Go" />
    		</form>
    	</fieldset>
      </div>
    </body>
    </html>
    Captcha.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    <?php
    function _captchaLettres()
    {
        $str = 'abcdefghijklmnopqrstuvwxyz';// on crée la chaine
        $str .= strtoupper($str);
        $length = mt_rand(5,12);
        $str = substr(str_shuffle($str),0,$length);
        $pos = mt_rand(2,$length-1); // on choisi la position
     
        if(!isset($_SESSION))// on met le résultat en session puis on renvois la question
            session_start();
     
        $_SESSION['captchaResult'] = $str[$pos-1];
     
        return 'Dans <b>'.$str.'</b> quelle lettre se trouve entre <b>'.$str[$pos-2].'</b> et <b>'.$str[$pos].'</b>'; 
    }
     
    function _captchaCalculChiffres()
    {
        $operators = array('-','+','*');
        $operator = $operators[array_rand($operators)];// on récup&egrave;re l'opérateur de calcul
     
        $nb1 = rand(1, 10);
        $nb2 = ($operator === '-') ? mt_rand(1, $nb1) : mt_rand(1, 10); // on évite les résultats négatif en cas de soustraction
     
        $calcul = $nb1.' '.$operator.' '.$nb2;
     
        if(!isset($_SESSION))// on met le résultat en session puis on renvois la question
            session_start();
     
        eval('$_SESSION[\'captchaResult\'] = strval('.$nb1.$operator.$nb2.');');
     
        return 'Combien font <b>'.$nb1.' '.($operator === '*' ? 'x' : $operator).' '.$nb2.'</b>';
    }
     
    function _captchaCalculLettres()
    {
        $operators = array('-' => 'moins', '+' => 'plus', '*' => 'fois');
        $operator = array_rand($operators);
        $op = $operators[$operator]; // on récup&egrave;re l'opérateur de calcul
     
        $num = array(
                    'zero', 'un', 'deux', 'trois',
                    'quatre', 'cinq', 'six', 'sept',
                    'huit', 'neuf', 'dix'
                    );
     
        $nb1 = array_rand($num);
        $nb2 = array_rand($num);
     
        if($operator === '-' && $nb1 < $nb2)
            while($nb1 < ($nb2 = array_rand($num))); // on évite les résultats négatif en cas de soustraction
     
        if(!isset($_SESSION)) // on met le résultat en session puis on renvois la question
            session_start();
     
        eval('$_SESSION[\'captchaResult\'] = strval('.$nb1.$operator.$nb2.');');
     
        return 'Combien font <b>'.$num[$nb1].' '.$op.' '.$num[$nb2].'</b>';
    } 
     
    function _captchaAlphaNum()
    {
        $str = md5(time()); // création de la chaine
        $length = mt_rand(5,12);
        $str = substr($str,0,$length);
        $pos = mt_rand(1,$length); // on choisi la position
     
        if(!isset($_SESSION))// on met le résultat en session puis on renvois la question
            session_start();
     
        $_SESSION['captchaResult'] = $str[$pos-1];
     
        if($pos === 1)
            $pos = 'le premier';
                elseif($pos === 2)
                    $pos = 'le second';
                        elseif($pos === $length)
                            $pos = 'le dernier';
                                elseif($pos === ($length-1))
                                    $pos = 'l\'avant dernier';
                                        else
                                            $pos = 'le '.$pos.'&egrave;me';
     
        return 'Quel est '.$pos.' caract&egrave;re dans <b>'.$str.'</b>';
    }
     
     
    function getCaptcha()
    {
        $functions = array(
                        '_captchaLettres',  '_captchaCalculChiffres',
                        '_captchaCalculLettres', '_captchaAlphaNum'
                        );
     
        $captcha = $functions[array_rand($functions)];
        return $captcha();
    }
     
     
    function checkCaptcha( $postVarName = 'captchaResult', $caseInsensitive = false)
    {
        if(!isset($_SESSION))
            session_start();
     
    	if(!isset($_POST[$postVarName],$_SESSION['captchaResult']))
    		return false;
     
    	if($caseInsensitive === true && !is_numeric($_SESSION['captchaResult']))
    	{
    		$_POST[$postVarName] = strtolower($_POST[$postVarName]);
    		$_SESSION['captchaResult'] = strtolower($_SESSION['captchaResult']);
    	}
     
    	return ($_POST[$postVarName] === $_SESSION['captchaResult']);
    }
     
    ?>
    Merci

  2. #2
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Et où se trouve le traitement du form
    Tu dis que le formulaire est validé quoi qu'il arrive, c'est que le problème doit venir du traitement...ou au moins il nous aidera à comprendre la source du problème.
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    <form action="index.php?" method="post">
    c'est peut être pas faux mais bon... le point d'interrogation n'a pas vraiment lieu d'être...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    le form est traité dans l'index non ?
    mais le captcha fonctionne bien, lorsque l'on donne une movaise réponse il est pas d'acore mais envoi le formulaire :s

    je vous donne le code que j'ai modifié :
    et le lien ou on peut tester ce scripte en mp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    <?php
    require(dirname(__FILE__).DIRECTORY_SEPARATOR.'captcha.php');
     
    if(isset($_POST['captchaResult']))
    {
    	if(checkCaptcha('captchaResult', isset($_POST['caseInsensitive'])))
    		$result = '<div class="result true">Le mail a bien était envoyé.</div><br />';
    			else
    				$result = '<div class="result false">Mauvaise r&eacute;ponse...</div><br />';
    }
    else $result = '';
     
    $captcha = getCaptcha();
     
    echo '<?xml version="1.0" encoding="ISO-8859-1"?>'."\n"; 
    ?>
    <?php
    mysql_connect("....");
    mysql_select_db("....");
    //-----------------------------------------------------
    // V\Ufffffffffication 1 : est-ce qu'on veut poster ?
    //-----------------------------------------------------
    if (isset($_POST['titre']) AND isset($_POST['contenu']))
    {
        $titre = addslashes($_POST['titre']);
        $contenu = addslashes($_POST['contenu']);
        // On v\Ufffffffffie si c'est une modification de contact ou pas
        if ($_POST['id_news'] == 0)
        {
            // Ce n'est pas une modification, on cr\Uffffffffune nouvelle entr\Uffffffffdans la table
            mysql_query("INSERT INTO contact VALUES('', '" . $titre . "', '" . $contenu . "', '" . time() . "')");
        }
        else
        {
            // On prot\Uffffffff la variable "id_contact" pour \Uffffffffter une faille SQL
            $_POST['id_contact'] = addslashes($_POST['id_news']);
            // C'est une modification, on met juste \Uffffffffour le titre et le contenu
            mysql_query("UPDATE contact SET titre='" . $titre . "', contenu='" . $contenu . "' WHERE id='" . $_POST['id_contact'] . "'");
        }
    }
     
    //--------------------------------------------------------
    // V\Ufffffffffication 2 : est-ce qu'on veut supprimer contact ?
    //--------------------------------------------------------
    if (isset($_GET['supprimer_contact'])) // Si on demande de supprimer contact
    {
        // Alors on supprime le contact correspondante
        // On prot\Uffffffff la variable "id_contact" pour \Uffffffffter une faille SQL
        $_GET['supprimer_news'] = addslashes($_GET['supprimer_news']);
        mysql_query('DELETE FROM news WHERE id=\'' . $_GET['supprimer_news'] . '\'');
    }
    $retour = mysql_query('SELECT * FROM news ORDER BY id DESC');
    while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les contact
    if (isset($_GET['modifier_contact'])) // Si on demande de modifier un contact
    {
        // On prot\Uffffffff la variable "modifier_contact" pour \Uffffffffter une faille SQL
        $_GET['modifier_news'] = mysql_real_escape_string(htmlspecialchars($_GET['modifier_contact']));
        // On r\Uffffffffp\Uffffffff les infos du contact correspondant
        $retour = mysql_query('SELECT * FROM contact WHERE id=\'' . $_GET['modifier_contact'] . '\'');
        $donnees = mysql_fetch_array($retour);
     
        // On place le titre et le contenu dans des variables simples
        $titre = stripslashes($donnees['titre']);
        $contenu = stripslashes($donnees['contenu']);
        $id_news = $donnees['id']; // Cette variable va servir pour se souvenir que c'est une modification
    }
    else // C'est qu'on r\Uffffffffge une nouvelle news
    {
        // Les variables $titre et $contenu sont vides, puisque c'est un nouveaux contact
        $titre = '';
        $contenu = '';
        $id_news = 0; // La variable vaut 0, donc on se souviendra que ce n'est pas une modification
    }
        ?>
     
    <br />
     
    <?php echo $result; ?>
     
    <form action="index.php3?page=19" method="post">
    <table>
    <tr>
    <td>
    <p> Pseudo, mail :
    <br />
    <input type="text" size="40" name="titre" value="<?php echo $titre; ?>" /> 	 &nbsp; 	 &nbsp; 	 &nbsp; 	 &nbsp;
    </p>
    <br />
    <br />
    <label for="captchaResult"><?php echo $captcha; ?> : </label>
    <br />
    <input type="text" name="captchaResult" size="40" /> 	 &nbsp; 	 &nbsp; 	 &nbsp; 	 &nbsp;
    </td>
    <td>
    <br />
    <br />
    <br />
    <br />
    <p>Contenu :
    <br />
    <textarea name="contenu" cols="50" rows="10">
    <?php echo $contenu; ?>
    </textarea>
    <input type="hidden" name="id_mp" value="<?php echo $id_mp; ?>" />
     </p>
     </td>
     </tr>
     </table>
    <br />
    <br />
    <br />
    <br />
     
    <input type="submit" value="Envoyer" />
     
    </form>
    </form>
    <br />

Discussions similaires

  1. [Mail] captcha validation ?
    Par loady dans le forum Langage
    Réponses: 1
    Dernier message: 01/01/2007, 10h00
  2. Redirection après validation d'un captcha
    Par GarGamel55 dans le forum Langage
    Réponses: 4
    Dernier message: 08/09/2006, 19h42
  3. Génération d'image de sécurité (captcha) et système alternatif
    Par eric41 dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 02/05/2006, 12h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo