Vérification reCAPTCHA [Résolu]

Signaler
Messages postés
10
Date d'inscription
samedi 20 juin 2020
Statut
Membre
Dernière intervention
17 juillet 2020
-
Messages postés
10
Date d'inscription
samedi 20 juin 2020
Statut
Membre
Dernière intervention
17 juillet 2020
-
Bonjour à tous,

Je débute dans la programmation en php et j'essaye de faire un formulaire d'inscription avec une vérification reCAPTCHA, cependant, je n'arrive pas à rendre obligatoire le fait d'utiliser le recaptcha, mon formulaire s'envoi même si le captcha n'est pas rempli par l'utilisateur ..

Voici mon code php :
        require('recaptcha/autoload.php'); 
        if(isset($_POST['submitpost']))
        {
            if(isset($_POST['g-recaptcha-response']))
            {
                $recaptcha = new \ReCaptcha\ReCaptcha('clé secrete');
                $resp = $recaptcha->setExpectedHostname('recaptcha-demo.appspot.com')->verify($_POST['g-recaptcha-response']);
                if ($resp->isSuccess()) 
                {
                    var_dump('Captcha Valide'); 
                } 
                else 
                {
                    $errors = $resp->getErrorCodes();
                    var_dump('Captcha Invalide'); 
                    var_dump($errors); 
                }
            }
            if(!isset($_POST['g-recaptcha-response']) AND empty($_POST['g-recaptcha-response']))
            {
                // var_dump('Captcha non rempli'); 
                $errors['g-recaptcha-response']="Veuillez confirmer que vous n'êtes pas un robot"; 
            }
        }

et voici mon code html pour le reCAPTCHA :
<div class="g-recaptcha" data-sitekey="clé secrète" name="g-recaptcha-response"></div>


Je n'arrive vrmt pas a trouver la solution, j'espère que qql pourra m'aider

Merci d'avance !!

EDIT : Ajout des BALISES DE CODE

Configuration: Windows / Chrome 83.0.4103.106

6 réponses

Messages postés
29544
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 septembre 2020
2 776
Bonjour

Que t'affiches tes var_dump ?

Tu parles d'envoyer... mais je ne vois rien d'autre que la vérification du captcha dans le code que tu nous as posté ...


NB: Pour poster ton code correctement sur le forum, tu dois utiliser les BALISES DE CODE.
Explications à lire ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

.



Messages postés
10
Date d'inscription
samedi 20 juin 2020
Statut
Membre
Dernière intervention
17 juillet 2020

-> Que t'affiches tes var_dump ?
Bah en ft rien, c'est à dire que je fasse le recaptcha ou pas il n'y a rien, après j'ai juste suivi une vidéo youtube qui expliquer comment intégrer un recaptcha

-> Tu parles d'envoyer... mais je ne vois rien d'autre que la vérification du captcha dans le code que tu nous as posté ...
C'est parce que j'ai juste mis le code relatif à la vérification du reCAPTCHA, ne t'inquiète pas dans mon fichier, il y a bien la parti envoie
Messages postés
10
Date d'inscription
samedi 20 juin 2020
Statut
Membre
Dernière intervention
17 juillet 2020
>
Messages postés
12170
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 septembre 2020

ah oui excusez moi, je viens de le mettre correctement ^^
Messages postés
12170
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 septembre 2020
684 >
Messages postés
10
Date d'inscription
samedi 20 juin 2020
Statut
Membre
Dernière intervention
17 juillet 2020

veux-tu dire que ton code ne génère pas 'Captcha Invalide'?
Messages postés
10
Date d'inscription
samedi 20 juin 2020
Statut
Membre
Dernière intervention
17 juillet 2020
>
Messages postés
12170
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 septembre 2020

euh non en ft même si le captcha n'est pas rempli, le formulaire s'envoi quand même malgré cette condition :
            
if(!isset($_POST['g-recaptcha-response']) AND empty($_POST['g-recaptcha-response']))
            {
                // var_dump('Captcha non rempli'); 
                $errors['g-recaptcha-response']="Veuillez confirmer que vous n'êtes pas un robot"; 
            }

D'ailleurs je ne sais pas si elle est correct, d'après moi elle l'est mais après je ne sais pas
Messages postés
29544
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 septembre 2020
2 776 >
Messages postés
10
Date d'inscription
samedi 20 juin 2020
Statut
Membre
Dernière intervention
17 juillet 2020

Commence par mettre en commentaire la ligne de redirection header('Location: login.php');

Et active l'affichage des erreurs php http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Place également un var_dump ($_SESSION) juste après ton
if(!empty($_POST))


Autre chose, lorsque tu affiches la page qui est sensée contenir le captcha... affiche la console Javascript de ton navigateur et vérifie qu'il n'y a pas d'erreur..
(comme une clé non valide par exemple...)
Messages postés
10
Date d'inscription
samedi 20 juin 2020
Statut
Membre
Dernière intervention
17 juillet 2020
>
Messages postés
29544
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 septembre 2020

je viens de faire ce que vous m'avez dit et sans rien valider j'ai c'est deux erreurs :

( ! ) Notice: Undefined index: password in C:\wamp64\www\site\register.php on line 11
Call Stack
# Time Memory Function Location
1 0.0002 361008 {main}( ) ...\register.php:0

( ! ) Notice: Undefined index: password in C:\wamp64\www\site/register.php on line 49
Call Stack
# Time Memory Function Location
1 0.0002 361008 {main}( ) ...\register.php:0
Messages postés
29544
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 septembre 2020
2 776
Tu n'as pas appliqué tout ce qui est indiqué dans le lien que je t'ai donné...
Donc, grosso modo, voici ton code remis au propre
<?php
//-------------------------------------------------------------//
//démarrage Session
//-------------------------------------------------------------//
session_start(); 
//-------------------------------------------------------------//
//affichage des erreurs PHP
//-------------------------------------------------------------//
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//-------------------------------------------------------------//
//include/require des fichiers
//-------------------------------------------------------------//
require_once 'base_de_donnees.php'; 
require('recaptcha/autoload.php'); 

//-------------------------------------------------------------//
//récupération PROPRE des variables AVANT de les utiliser
//-------------------------------------------------------------//

$nom = !empty($_POST['nom']) ? trim($_POST['nom']) : "";
$prenom = !empty($_POST['prenom']) ? trim($_POST['prenom']) : "";
$email = !empty($_POST['email']) ? trim($_POST['email']) : "";
$password = !empty($_POST['password']) ? trim($_POST['password']) : "";
$password_confirm = !empty($_POST['password_confirm']) ? trim($_POST['password_confirm']) : "";

$recaptcharesponse = !empty($_POST['g-recaptcha-response']) ? $_POST['g-recaptcha-response'] : NULL;


//autre variables
$password_length = strlen($password);
$errors = array(); 

//-------------------------------------------------------------//
// Fonctions
//-------------------------------------------------------------//
function checkString($str){
  return empty($str) || !preg_match('/^[a-zA-Zéèàêëôüîï \- ]*-?[a-zA-Zéèàêëôüîï ]*+$/', $str);
}

function checkMail($email){
  return empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL);
}


function getMembreByMail($email){
  global $pdo;
  $sql = 'SELECT id FROM membre WHERE email = ?';
  $datas = array($email);
  try{
    $req = $pdo->prepare($sql); 
    $req->execute($datas); 
    $user = $req->fetch(); 
    return $user;
  }catch(Exception $e){
    echo "Erreur ". $e->getMessage();
    die();
  }
  
}

function addMember($nom, $prenom, $email, $password) {
  global $pdo;
  $password = password_hash($password, PASSWORD_BCRYPT); 
  $token = str_random(60);
  
  $sql = "INSERT INTO membre (nom, prenom , email , password , confirmation_token) 
           VALUES (? , ? , ? , ? , ? )";
  $datas = array($nom, $prenom, $email, $password, $token);
   try{
    $req = $pdo->prepare($sql); 
    $req->execute($datas); 
    $user_id = $pdo->lastInsertId(); 
    return $user_id ;
  }catch(Exception $e){
    echo "Erreur ". $e->getMessage();
    die();
  }  
}

//-------------------------------------------------------------//
// Traitement du submit du formulaire
//-------------------------------------------------------------//
if(!empty($_POST)){

  if(! checkString($nom)) {
    $errors['nom'] = "Votre nom est incorrect"; 
  }

  // Prénom //
  if(!checkString($prenom)) {
    $errors['prenom'] = "Votre prénom est incorrect"; 
  }

  //E-mail // 
  if(!checkMail($email){
     $errors['email'] = "Votre e-mail n'est pas valide"; 
  } else  {          
    $user = getMembreByMail($email);
    if($user){
      $errors['email'] = 'Cette adresse e-mail est déjà associé à un compte'; 
    }
  }
  // Mot de passe //  
  if(empty($password)) {
    $errors['password'] = "Veuillez saisir un mot de passe"; 
  }
  if(empty($password_confirm)) {
    $errors['password_confirm'] = "Veuillez confirmer votre mot de passe"; 
  }
  
  if(!empty($password) && $password != $password_confirm){
    $errors['password'] = "Veuillez saisir un mot de passe identique"; 
  }

  if( $password_length < 6 ){
    $errors['password'] = "Votre mot de passe est trop court";     
  }

  // reCAPTCHA //
  if($recaptcharesponse){
    $recaptcha = new \ReCaptcha\ReCaptcha('cle secrète');
    $resp = $recaptcha->setExpectedHostname('recaptcha-demo.appspot.com')->verify($recaptcharesponse);
    if ($resp->isSuccess()) {
        var_dump('Captcha Valide'); 
    } else {
        $errors['recaptcha'] = $resp->getErrorCodes();
        var_dump('Captcha Invalide'); 
        var_dump($errors); 
    }
  }
  

  // Requête MySQL //
  if(empty($errors)) {
      $user_id = addMember($nom, $prenom, $email, $password);
      if($user_id){
        //header('Location: login.php'); 
        exit(); 
      }else{
        echo "Erreur lors de l'ajout en base de données.";
        exit;              
      }
  }else{
    var_dump($errors);
  }
        
}


Par contre, tu ne m'as toujours pas indiqué ce qu'affiche la console de ton navigateur...
Si la variable de recaptcha n'est pas présente dans la variable $_POST .. c'est que le souci se situe au niveau du code javascript... pas au niveau du code php.



Cordialement,
Jordane
Messages postés
10
Date d'inscription
samedi 20 juin 2020
Statut
Membre
Dernière intervention
17 juillet 2020

Je viens de remettre le code que vous m'avez fait (merci beaucoup d'ailleurs), cependant j'ai une erreur à la ligne 99 :
( ! ) Parse error: syntax error, unexpected ';' in C:\wamp64\www\site_e_commerce\register.php on line 99

-> Par contre, tu ne m'as toujours pas indiqué ce qu'affiche la console de ton navigateur...
Si la variable de recaptcha n'est pas présente dans la variable $_POST .. c'est que le souci se situe au niveau du code javascript... pas au niveau du code php.

Comment fait-on s'il vous plait ?
(je suis débutant)
Messages postés
29544
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 septembre 2020
2 776
Ligne 98, manque une parenthèse.

en ce qui concerne la console JavaScript du navigateur, pour l'ouvrir, en général, il suffit d'appuyer sur la touche F12.
tu trouveras de nombreux tutos sur le net à ce sujet.
Messages postés
10
Date d'inscription
samedi 20 juin 2020
Statut
Membre
Dernière intervention
17 juillet 2020

ah oui, en effet

c'est bon j'ai trouvé, c'était un problème de php
Maintenant tout fonctionne comme je veux ^^

Merci beaucoup de votre aide !!
Messages postés
29544
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 septembre 2020
2 776
Ce message là ne sont pas bloquant.

Tu as bien afficher la page qui contient ton formulaire ?
Tu pourrais afficher le code source de cette page en appuyant sur les touches contrôle et u
Et nous coller le code ainsi obtenu sur le forum.

et donc vu que tu es parti à regarder dans la console je suppose que ta variable poste ne contient pas le caprcha... Oui, non ??
Messages postés
10
Date d'inscription
samedi 20 juin 2020
Statut
Membre
Dernière intervention
17 juillet 2020

c'est bon j'ai trouvé, c'était un problème de php
Maintenant tout fonctionne comme je veux ^^

Merci beaucoup de votre aide !!