[PHP] Vérification captcha
Résolu/Fermé
digival
Messages postés
193
Date d'inscription
mercredi 14 octobre 2009
Statut
Membre
Dernière intervention
7 novembre 2010
-
16 déc. 2009 à 21:19
le père - 19 déc. 2009 à 10:00
le père - 19 déc. 2009 à 10:00
A voir également:
- [PHP] Vérification captcha
- Easy php - Télécharger - Divers Web & Internet
- Vérification url - Guide
- Captcha impossible à valider ✓ - Forum Mozilla Firefox
- Valider le captcha - Forum Réseaux sociaux
- La vérification du captcha a échoué (erreur code = 2) - Forum Mozilla Firefox
7 réponses
Bonjour
J'ai essayé avec if( $code = $_POST['verif'] ) et if( $code = $_POST['verif'] )
J'ai beau relire, j'ai l'impression que c'est deux fois la même chose.
Plusieurs remarques : la comparaison, c'est avec deux = :if( $code == $_POST['verif'] ). D'autre part, j'espère que quand tu fais ta comparaison, c'est bien avec la captcha affiché, (et donc généré lors de l'appel précédent) et pas avec un nouveau captcha tiré au sort. Comme on ne voit pas le reste du script, je le crains.
Pour ton cookie, c'est peut-être simplement qu'il est vide. As-tu essayé de le remplacer par$_POST['mail'] ?
J'ai essayé avec if( $code = $_POST['verif'] ) et if( $code = $_POST['verif'] )
J'ai beau relire, j'ai l'impression que c'est deux fois la même chose.
Plusieurs remarques : la comparaison, c'est avec deux = :if( $code == $_POST['verif'] ). D'autre part, j'espère que quand tu fais ta comparaison, c'est bien avec la captcha affiché, (et donc généré lors de l'appel précédent) et pas avec un nouveau captcha tiré au sort. Comme on ne voit pas le reste du script, je le crains.
Pour ton cookie, c'est peut-être simplement qu'il est vide. As-tu essayé de le remplacer par$_POST['mail'] ?
digival
Messages postés
193
Date d'inscription
mercredi 14 octobre 2009
Statut
Membre
Dernière intervention
7 novembre 2010
1
17 déc. 2009 à 17:25
17 déc. 2009 à 17:25
"J'ai essayé avec if( $code = $_POST['verif'] ) et if( $code = $_POST['verif'] )
J'ai beau relire, j'ai l'impression que c'est deux fois la même chose. "
-> C'est bien 2 fois la même chose, désolé :) Je voulais dire avec if( $code == $_POST['verif'] ) comme tu me l'as indiqué...
"D'autre part, j'espère que quand tu fais ta comparaison, c'est bien avec la captcha affiché, (et donc généré lors de l'appel précédent) et pas avec un nouveau captcha tiré au sort."
-> Ah oui, j'avais pas pensé à ça :s . Merci de me l'avoir signalé.
=> J'ai donc pensé astucieux de faire le script ci-dessous mais ça ne créér pas de cookie ?!
"Pour ton cookie, c'est peut-être simplement qu'il est vide"
-> Pourtant, dans la fenêtre des cookies (de Fx), j'ai bien ma valeur de variable de session (avec %40 au lieu de @). J'ai bien sûr essayé avec $_POST['mail'] et là ça s'affiche o0 .
Comme le @ est remplacé par %40, j'ai écrit cela : html_entity_decode($_COOKIE['captcha']) ... je sais pas si c'est nécessaire ?
J'ai beau relire, j'ai l'impression que c'est deux fois la même chose. "
-> C'est bien 2 fois la même chose, désolé :) Je voulais dire avec if( $code == $_POST['verif'] ) comme tu me l'as indiqué...
"D'autre part, j'espère que quand tu fais ta comparaison, c'est bien avec la captcha affiché, (et donc généré lors de l'appel précédent) et pas avec un nouveau captcha tiré au sort."
-> Ah oui, j'avais pas pensé à ça :s . Merci de me l'avoir signalé.
=> J'ai donc pensé astucieux de faire le script ci-dessous mais ça ne créér pas de cookie ?!
if( !isset($_COOKIE['captcha']) ) { setcookie('captcha', $code, $cookie_expire); } (...) if( $_POST['verif'] == $_COOKIE['captcha'] ) { captcha bien écrit t'es pas un robot c cool c beau etc etc. }
"Pour ton cookie, c'est peut-être simplement qu'il est vide"
-> Pourtant, dans la fenêtre des cookies (de Fx), j'ai bien ma valeur de variable de session (avec %40 au lieu de @). J'ai bien sûr essayé avec $_POST['mail'] et là ça s'affiche o0 .
Comme le @ est remplacé par %40, j'ai écrit cela : html_entity_decode($_COOKIE['captcha']) ... je sais pas si c'est nécessaire ?
Pas possible de conclure, on ne voit que des petits morceaux de ton script sans savoir comment ils s'enchaînent.
Pour ce qui est du html_entity_decode, il est complètement inadapté : %40 n'est pas une entité html !
Pour ce qui est du html_entity_decode, il est complètement inadapté : %40 n'est pas une entité html !
digival
Messages postés
193
Date d'inscription
mercredi 14 octobre 2009
Statut
Membre
Dernière intervention
7 novembre 2010
1
17 déc. 2009 à 19:05
17 déc. 2009 à 19:05
Ok ok, j'enlève illico presto mon html_entity_decode... mais par quoi le remplacer alors ?
Et voici mon script (enfin c'est pas encore toute la page mais ça devrait faire l'affaire) :
NOTE :
. J'envisage d'améliorer la simplicité du formulaire pour le client, à savoir placer le captcha avec la liste déroulante et de n'afficher les champs du formulaire qu'après vérification du captcha.
-> Les robots sont-ils capables de sélectionner un champ d'une liste déroulante ?
Merci pour ton aide
Et voici mon script (enfin c'est pas encore toute la page mais ça devrait faire l'affaire) :
<?php session_start(); $cookie_expire = time() + 01*15*60; if( isset($_POST['objet']) ) { setcookie('objet', $_POST['objet'], $cookie_expire); } if( isset($_POST['mail']) ) { setcookie('mail', $_POST['mail'], $cookie_expire); } if( !isset($_COOKIE['captcha']) ) { setcookie('captcha', $code, $cookie_expire); } ?> <?php // DÉFINITION DES VARIABLES $destinataire = '*@free.fr'; $nom = $_SESSION['nom']; $objet = $_COOKIE['objet']; $mail = $_POST['mail']; ?> <?php // CRÉATION DU MAIL : if( isset($_POST['send']) ) { (...) // Sont définis ici les headers, les messages, etc if( $transfert != true ) { if( preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $_POST['mail']) ) { if( $_POST['verif'] == $_COOKIE['captcha'] ) { // Envoi du mail mail(...) $transfert = true; } else { $offcaptcha = true; } } else { $offmail = true; } } } ?> <!DOCTYPE ... > <form method="post" action="w.formulaire_contact.php" > <?php // STATUT DE L'ENVOI if ( isset($_POST['send']) ) { if( $transfert == true ) { ?> Merci <?php echo $_SESSION['nom']; ?>, ta demande a été envoyée avec succès ! <br /> Je t'enverrai dans la semaine un mail de confirmation à <?php $_COOKIE['mail']); ?> <br /> Tu peux m'envoyer un autre mail en sélectionnant un autre sujet ci-dessous <?php } elseif( $offcaptcha == true ) { ?> Erreur lors de la re-écriture du captcha : Mail non envoyé ! <?php } elseif( $offmail == true ) { ?> L'adresse mail <cite> <?php echo $_POST['mail']; ?> </cite> est invalide : Mail non envoyé ! <?php } } ?> <span class="etape"> 1. Sélectionne le sujet du message puis clique sur Ok : </span> <br /> <select name="objet"> <option value="inscription" <?php if ( isset($_POST['objet']) AND ($_POST['objet'] == 'inscription') ){ ?> selected="selected" <?php } ?> >t'inscrire et bénéficier des nombreux avantages !</option> <option value="password_oubli" <?php if ( isset($_POST['objet']) AND ($_POST['objet'] == 'password_oubli') ){ ?> selected="selected" <?php } ?> >se rappeler de son mot de passe ?</option> <option ... > (...) </select> <input type="submit" value="Ok" > <br /> </form> <br/> <form method="post" action="w.formulaire_contact.php" enctype="multipart/form-data" > <span class="etape">2. Remplis le(s) champ(s) suivants :</span> <br /> <label for="mail">adresse mail :</label> <input type="text" name="mail" style="margin-left: 4.5%" value="<?php echo html_entity_decode($_COOKIE['mail']); ?>" /> <br /> <?php if( isset($_POST['objet']) ) { //--------------------------Si client non identifié comme membre------------------------ if( $_SESSION['nom'] == true ) { if ($_POST['objet'] == 'password_change') { ?> <label for="mdp_change">mot de passe désiré :</label> <input type="text" name="mdp_change" /> <br/> <?php } elseif ( $_POST['objet'] == ... (...) elseif ( $_POST['objet'] == 'password_change' OR ... (...) ) { ?> <br/> <span class="etape">3. Recopie maintenant le captcha :</span> <img src="w.captcha.php" alt="captcha" style="margin-left: 2%; border: 1px solid grey" /> <input type="text" name="verif" size="10" maxlength="6" /> <br /> <input name="send" type="submit" value="Envoyer !" style="margin-left: 2%"> <label for="send" style="color: blue"> Clique pour valider et envoyer ton message !</label> <?php } //----demande d'inscription mais déjà membre---- elseif( $_POST['objet'] == 'inscription' OR $_POST['objet'] == 'password_oubli' ) { ?> <p style="color: red; text-align: center"> Tu es déjà identifié avec un mot de passe en tant que membre ! </p> <?php } } //------------------------------------------------------------------------------------------------------ //-----------------------------Si client non identifié comme membre--------------------------------- elseif( $_SESSION['nom'] == false ) { if( $_POST['objet'] == 'inscription' OR $_POST['objet'] == 'password_oubli' ) { ?> <label for="nom">prénom et nom :</label> <input type="text" name="nom" /> <br /> <br/> <span class="etape">3. Recopie maintenant le code de vérification ci-dessous :</span> <br /> <img src="w.captcha.php" alt="captcha" style="margin-left: 2%; border: 1px solid gray" /> <input type="text" name="verif" size="10" maxlength="6" /> <input name="send" type="submit" value="Envoyer !" style="margin-left: 5%"> <label for="send" style="color: blue"> Clique pour valider et envoyer ta demande !</label> <br /> <?php } elseif ( $_POST['objet'] == 'password_change' OR ... (...) ) { ?> <p style="color: red; text-align: center" > Tu dois t'identifier en tant que membre pour pouvoir faire cela ! </p> <?php } //---------------------------------------------------------------------------------------------------- } ?> </form> <?php ;} ?>
NOTE :
. J'envisage d'améliorer la simplicité du formulaire pour le client, à savoir placer le captcha avec la liste déroulante et de n'afficher les champs du formulaire qu'après vérification du captcha.
-> Les robots sont-ils capables de sélectionner un champ d'une liste déroulante ?
Merci pour ton aide
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
par quoi le remplacer alors ? Par rien du tout. Tu n'as qu'à afficher la valeur de ton cookie dans ton script et tu verras qu'il y a bien un @ là où FF te montre %40.
Quant à la vérification que tu fais if( $_POST['verif'] == $_COOKIE['captcha'] )
je ne la comprends pas du tout. D'où sort ton $_COOKIE['captcha'] ??? Au tout début, il n'existe pas. Alors tu l'initialises avec une certaine variable $code, mais rien ne dit d'où elle vient, elle. Ce cookie ne devrait en toute logique être initialisé que dans w.captcha.php (c'est peut-être le cas d'ailleurs)
Quant à la vérification que tu fais if( $_POST['verif'] == $_COOKIE['captcha'] )
je ne la comprends pas du tout. D'où sort ton $_COOKIE['captcha'] ??? Au tout début, il n'existe pas. Alors tu l'initialises avec une certaine variable $code, mais rien ne dit d'où elle vient, elle. Ce cookie ne devrait en toute logique être initialisé que dans w.captcha.php (c'est peut-être le cas d'ailleurs)
digival
Messages postés
193
Date d'inscription
mercredi 14 octobre 2009
Statut
Membre
Dernière intervention
7 novembre 2010
1
18 déc. 2009 à 12:25
18 déc. 2009 à 12:25
Effectivement, j'initialisais mon cookie dans ma page de formulaire et non dans celle du captcha.
C'est maintenant corrigé :)
Mais on ne m'a pas répondu...
Les robots sont-ils capables de sélectionner un champ d'une liste déroulante ?
C'est maintenant corrigé :)
Mais on ne m'a pas répondu...
Les robots sont-ils capables de sélectionner un champ d'une liste déroulante ?