Vérification reCAPTCHA

Résolu/Fermé
info_php Messages postés 10 Date d'inscription samedi 20 juin 2020 Statut Membre Dernière intervention 17 juillet 2020 - Modifié le 20 juin 2020 à 20:32
info_php Messages postés 10 Date d'inscription samedi 20 juin 2020 Statut Membre Dernière intervention 17 juillet 2020 - 20 juin 2020 à 22:58
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

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 juin 2020 à 20:34
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

.



0
info_php Messages postés 10 Date d'inscription samedi 20 juin 2020 Statut Membre Dernière intervention 17 juillet 2020
20 juin 2020 à 20:40
-> 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
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 juin 2020 à 20:45
Je ne m'inquiète pas ..... mais je suppute que tu ne vois pas le résultat de tes captcha à cause d'une redirection de page ou autre truc du genre.
En gros.... pour qu'on puisse te venir en aide.. il faut que tu nous postes l'intégralité de ton code.
0
info_php Messages postés 10 Date d'inscription samedi 20 juin 2020 Statut Membre Dernière intervention 17 juillet 2020 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
Modifié le 20 juin 2020 à 21:05
ah d'accord, alors voici tout mon code php de cette page :
<?php
    session_start(); 
?>
<?php
    if(!empty($_POST))
    {
        $errors=array(); 
        require_once 'base_de_donnees.php'; 
        $password_length = $_POST['password']; 
        // Nom //
        if(empty($_POST['nom']) || !preg_match('/^[a-zA-Zéèàêëôüîï \- ]*-?[a-zA-Zéèàêëôüîï ]*+$/', $_POST['nom']))
        {
            $nom_erreur = $errors['nom'] ="Votre nom est incorrect"; 
        }

        // Prénom //
        if(empty($_POST['prenom']) || !preg_match('/^[a-zA-Zéèàêëôüîï ]*-?[a-zA-Zéèàêëôüîï ]*+$/', $_POST['prenom']))
        {
            $prenom_erreur = $errors['prenom'] ="Votre prénom est incorrect"; 
        }

        //E-mail // 
        if(empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
        {
            $email_erreur = $errors['email'] = "Votre e-mail n'est pas valide"; 
        }
        else 
        {
            $req = $pdo->prepare('SELECT id FROM membre WHERE email = ?'); 
            $req->execute([$_POST['email']]); 
            $user = $req->fetch(); 
            if($user)
            {
                $email_erreur = $errors['email'] = 'Cette adresse e-mail est déjà associé à un compte'; 
            }
        }
        // Mot de passe //  
        if(empty($_POST['password']))
        {
            $password_erreur = $errors['password']="Veuillez saisir un mot de passe"; 
        }
            if(!empty($_POST['password']) && $_POST['password'] != $_POST['password_confirm'])
                {
                    $password_erreur = $errors['password']="Veuillez saisir un mot de passe identique"; 
                }

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

        // reCAPTCHA //
        require('recaptcha/autoload.php'); 
        if(isset($_POST['submitpost']))
        {
            if(isset($_POST['g-recaptcha-response']))
            {
                $recaptcha = new \ReCaptcha\ReCaptcha('cle secrète');
                $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"; 
            }
        }
        // Requête MySQL //
        
        if(empty($errors))
        {
            $req = $pdo->prepare("INSERT INTO membre SET nom = ?, prenom = ?, email = ?, password = ?, confirmation_token = ?"); 
            $password = password_hash($_POST['password'], PASSWORD_BCRYPT); 
            $token = str_random(60);
            $req->execute([$_POST['nom'], $_POST['prenom'], $_POST['email'], $password, $token]); 
            $user_id = $pdo->lastInsertId(); 
            header('Location: login.php'); 
            exit(); 
        }
    }
?>
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > info_php Messages postés 10 Date d'inscription samedi 20 juin 2020 Statut Membre Dernière intervention 17 juillet 2020
20 juin 2020 à 20:58
peux-tu correctement utiliser les balises de code, comme expliqué ici: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
info_php Messages postés 10 Date d'inscription samedi 20 juin 2020 Statut Membre Dernière intervention 17 juillet 2020 > yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024
20 juin 2020 à 21:05
ah oui excusez moi, je viens de le mettre correctement ^^
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > info_php Messages postés 10 Date d'inscription samedi 20 juin 2020 Statut Membre Dernière intervention 17 juillet 2020
20 juin 2020 à 21:09
veux-tu dire que ton code ne génère pas 'Captcha Invalide'?
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié le 20 juin 2020 à 22:09
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.



0
info_php Messages postés 10 Date d'inscription samedi 20 juin 2020 Statut Membre Dernière intervention 17 juillet 2020
20 juin 2020 à 22:29
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)
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 juin 2020 à 22:32
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
info_php Messages postés 10 Date d'inscription samedi 20 juin 2020 Statut Membre Dernière intervention 17 juillet 2020
Modifié le 20 juin 2020 à 22:56
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 !!
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 juin 2020 à 22:54
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 ??
0
info_php Messages postés 10 Date d'inscription samedi 20 juin 2020 Statut Membre Dernière intervention 17 juillet 2020
20 juin 2020 à 22:58
c'est bon j'ai trouvé, c'était un problème de php
Maintenant tout fonctionne comme je veux ^^

Merci beaucoup de votre aide !!
0