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

PHP & Base de données Discussion :

captcha PHP pas synchronisé [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Par défaut captcha PHP pas synchronisé
    Bonjour.

    Mon captcha n'est jamais synchronisé. Quelque chose m'échappe.

    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
    session_start();
     
    $couleur = array("yellow","green","blue","red","gray","pink","black");
      unset($_SESSION['color']);
    	$color = $couleur[rand(0,5)];
    	if($color == "yellow") $code = "jaune";
    	if($color == "green")  $code = "vert";
    	if($color == "blue")   $code = "bleu";
    	if($color == "red")    $code = "rouge";
    	if($color == "gray")   $code = "gris";
    	if($color == "pink")   $code = "rose";
    	if($color == "black")  $code = "noir";
     
      $captcha = '<div style="width:20px;"><div style="float:right;width:20px;height:20px;background-color:'.$color.'"></div></div>';
     
    	$_SESSION['color'] = $code;
     
    	if(isset($_POST['color']))
     
    	echo '<pre>';
    	var_dump($_POST['color']);
    	var_dump($_SESSION['color']);
     
     
      if(empty($_POST['color']))
      if($_POST['color'] == $_SESSION['color']){ 
        echo 'ok';
        unset($_SESSION['color']);
        }
     
    ?>
     
    <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="POST">
                <input type="hidden" name="token" value="<?php echo $token; ?>" />
                <input style="width:66px" type="submit" name="envoye" value="Envoyer" />
                <input style="width:66px" type="reset" name="annuler" value="Annuler" />
     
                    Quelle est cette couleur?
                    <?php	 echo $captcha; ?>								
                <input class="form" style="width:75px" type="text" id="color" name="color" value="" size="10" />
    </form>
    </pre>

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    A mon sens tu fais les choses dans le désordre, car dès le départ tu détruit la variable de session "color" : unset($_SESSION['color']);

    Il faut normalement vérifier que la couleur saisie dans le champ texte (une fois le formulaire validé) corresponde à la couleur définie dans la session (lors de la création du formulaire), et ça en 1er.

    Quelque chose comme :
    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
     
    if (isset($_POST['color']), $_SESSION['color']) {
        if ($_POST['color'] === $_SESSION['color']) {
            // Les couleurs sont les mêmes
        }
        else {
            // Les couleurs ne sont pas les mêmes
        }
    }
     
    // Maintenant on détruit le session color
    unset($_SESSION['color']);
     
    // Puis on définie une nouvelle couleur
    $_SESSION['color'] = $code;

  3. #3
    Membre éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Par défaut
    Pour commencer, merci et bonjour!

    Dans le manuelle, if(isset($a,$b), on indique ça comme syntaxe correcte.
    Mais, j'ai déjà essayé et j'ai essayé de nouveau et ça indique une erreur
    vis-a-vis la virgule entre post et session.

    Citation Envoyé par RunCodePhp Voir le message
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (isset($_POST['color']), $_SESSION['color']) {
    A l'entrée dans le formulaire, ça m'indique "erreur" qu'on a défini dans le code.
    Et je n'ai pas encore tappé la couleur.

    Ensuite, si je continue et que je fais refresh, l'indication "erreur" disparait.
    Et là, je tappe la couleur et la page n'est que rafraichie.

    code revisé (traitement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (isset($_POST['color']) AND isset($_SESSION['color'])){
      if ($_POST['color'] === $_SESSION['color']) {
        echo 'OK';
      }
    }
    else{
      echo 'Error';
    }
     
    unset($_SESSION['color']);
    $_SESSION['color'] = $code;
    Il manque peut-être quelque chose dans le formulaire?

    le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="POST">
                <input type="hidden" name="token" value="<?php echo $token; ?>" />
                <input style="width:66px" type="submit" name="envoye" value="Envoyer" />
                <input style="width:66px" type="reset" name="annuler" value="Annuler" />
     
                    Quelle est cette couleur?
                    <?php	 echo $captcha; ?>								
                <input class="form" style="width:75px" type="text" id="color" name="color" value="" size="10" />
    </form>

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Corrige comme ceci :
    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
    session_start();
    //
    if (isset($_POST['color'], $_SESSION['color'])) {
        if ($_POST['color'] == $_SESSION['color']) {
            echo 'OK';
        }
        else {
            echo 'Error';
        }
    }
     
    // Maintenant on détruit le session color
    unset($_SESSION['color']);
     
    // Puis on définie une nouvelle couleur
    // Tous les codes ici qui crée/définie $code
    $_SESSION['color'] = $code;
    (Je n'ai pas mis tous les codes, c'est juste pour expliquer le déroulement)


    Concernant la syntaxe du isset(), j'avais fais une petite erreur effectivement.
    Dans la doc de Php il est indiqué ceci : bool isset ( mixed $var [, mixed $... ] )
    On peu donc mettre plusieurs paramètres successivement, ce qui évite de répéter isset().
    Ceci : if (isset($var1, $var2, $var3)) ...
    est équivalent à : if (isset($var1) && isset($var2) && isset($var3)) ...


    Il manque peut-être quelque chose dans le formulaire?
    Si le formulaire n'est pas soumis (submité), il doit avoir une erreur de HTML par là.
    Remplace $_SERVER['PHP_SELF'] par le nom de ta page (c'est mieux de toute manière).
    Il y a une variable $token. Existe t-elle ? Sa valeur est elle correcte ?
    Puis englobe tous les éléments avec un <fieldset> ou <p> : (c'est plus conforme selon la W3C)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <form action="nom_de_la_page.php" method="post">
        <fieldset>
            ... etc ...
        </fieldset>
    </form>
    Sinon, observe le code HTML généré, peut être verrais tu une erreur. (clic droit dans la page puis "code source de la page".

  5. #5
    Membre éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Par défaut
    Là, ça fonctionne avec ces changements.

    Je révise ma version complète avant de fermer ce poste. Il se peut que j'aie d'autres problème. Pour le token en soit, il fonctionne bien. Je vais peut-être revoir l'emplacement du unset($_POST). Pour ...php_self, je vais revoir.

    La version corrigée :
    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
    <?php 
    session_start();
     
    $couleur = array("yellow","green","blue","red","gray","pink","black");
    	$color = $couleur[rand(0,5)];
    	if($color == "yellow") $code = "jaune";
    	if($color == "green")  $code = "vert";
    	if($color == "blue")   $code = "bleu";
    	if($color == "red")    $code = "rouge";
    	if($color == "gray")   $code = "gris";
    	if($color == "pink")   $code = "rose";
    	if($color == "black")  $code = "noir";
     
      $captcha = '<div style="width:20px;"><div style="float:right;width:20px;height:20px;background-color:'.$color.'"></div></div>';
     
    echo '<pre>';
    	//var_dump($_POST['color']);
    	//var_dump($_SESSION['color']);
     
    if (isset($_POST['color'], $_SESSION['color'])) {
        if ($_POST['color'] == $_SESSION['color']) {
            echo 'OK';
        }
        else {
            echo 'Error<br><br>';
            echo 'post: '.$_POST['color'].'<br>';
            echo 'sess: '.$_SESSION['color'];
        }
    }
     
    // Maintenant on détruit le session color
    unset($_SESSION['color']);
     
    // Puis on définie une nouvelle couleur
    // Tous les codes ici qui crée/définie $code
    $_SESSION['color'] = $code;          
    ?>
     
    <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="POST">
                <input style="width:66px" type="submit" name="envoye" value="Envoyer" />
                <input style="width:66px" type="reset" name="annuler" value="Annuler" />
     
                    Quelle est cette couleur?
                    <?php	 echo $captcha; ?>								
                <input class="form" style="width:75px" type="text" id="color" name="color" value="" size="10" />
     
    </form>
    </pre>
    Je pense pas que les bots peuvent savoir que green est vert et si c'est le cas, il ne peuvent pas savoir que green est Vert. Mais, faut pas être daltanien bien sur à cause des couleurs.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [EasyPHP] PHP pas interprété par EasyPHP
    Par LethaL86 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 17/07/2007, 08h35
  2. [ODBC] Access et PHP pas super, mais pas le choix
    Par miss_monika dans le forum PHP & Base de données
    Réponses: 27
    Dernier message: 12/06/2007, 09h45
  3. Exécuter le PHP pas à pas
    Par sam01 dans le forum Zend
    Réponses: 7
    Dernier message: 17/02/2006, 09h34
  4. [Apache / PHP] PHP pas interpété
    Par melitta dans le forum Apache
    Réponses: 8
    Dernier message: 15/09/2004, 09h19

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