Mot de passe à retrouver avec recaptchalib.

Résolu/Fermé
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024 - 18 oct. 2022 à 10:56
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024 - 21 oct. 2022 à 18:16

Bonjour,

Je viens de m'apercevoir qu'il n'est plus possible pour un joueur de mon site de retrouver son mot de passe lorsqu'il ne s'en souvient plus.

Car en cliquant sur un lien qui mène vers cette page recuperation.php

et en y entrant une adresse e-mail afin d'y recevoir un code de confirmation pour réinscrire un mot de passe, voici le message d'erreur qui apparait:

Fatal error: Uncaught Error: Undefined constant "error" in /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/recaptchalib.php:125 Stack trace: #0 /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/recuperation.php(20): ReCaptcha->verifyResponse('2a01:cb0c:2e1:4...', '03AIIukzhHhX119...') #1 {main} thrown in /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/recaptchalib.php on line 125

Voici le script du fichier recuperation.php dont il s'agit:

<?php
session_start();
require_once('includes/config.inc.php');
require '../connexion.php';
require 'recaptchalib.php';

if(isset($_GET['section'])) {
$section = htmlspecialchars($_GET['section']);
} else {
$section = "";
}

$siteKey = 'XXXXXXXXXXXXXXXXXXXX'; // votre clé publique
$secret = 'XXXXXXXXXXXXXXXXXXXX'; // votre clé privée

$reCaptcha = new ReCaptcha($secret);
if(isset($_POST["g-recaptcha-response"])) {
    $resp = $reCaptcha->verifyResponse(
        $_SERVER["REMOTE_ADDR"],
        $_POST["g-recaptcha-response"]
        );
    if ($resp != null && $resp->success) {
        if(isset($_POST['recup_submit'],$_POST['recup_mail'])) {//Si un e-mail est présent et que "valider" est appuyé on passe ligne suivante.
           if(!empty($_POST['recup_mail'])) { //Si ($_POST['recup_mail']) présent et pas vide on passe ligne suivante.
              $recup_mail = htmlspecialchars($_POST['recup_mail']);
              if(filter_var($recup_mail,FILTER_VALIDATE_EMAIL)) {
 
         $mailexist = $connection->prepare("SELECT * FROM ".T_PLAYER." WHERE p_email = '$recup_mail'"); 
         $mailexist->execute(array($recup_mail));//$recup_mail est le mail inscrit dans le formulaire (<input type="email") et qui doit se trouver en table inscription.
                 $mailexist_count = $mailexist->rowCount();//On compte les lignes correspondant à l'e-mail (1 ou 0 ligne).
        }
         if($mailexist_count >0) {
            
            $pseudo = $mailexist->fetch();
			$pseudo = $pseudo['p_username'];// $pseudo est le membre demandant sont mot de passe.
			//var_dump ($pseudo);	//Fonction qui permet d'analyser la variable pseudo.
            $_SESSION['recup_mail'] = $recup_mail; //L'e-mail est mis en session pour la demande du code.
            $recup_code = "";
            for($i=0; $i < 8; $i++) { 
               $recup_code .= mt_rand(0,9); //Le point permet d'écrire les chiffres les uns à la suite des autres.
            }
			//var_dump ($recup_code); //Fonction qui permet d'analyser une variable.
            
            $mail_recup_exist =$connection->prepare('SELECT id FROM recuperation WHERE mail = ?');//Pour vérifier si l'e-mail exite dans la table.
            $mail_recup_exist->execute(array($recup_mail));
            $mail_recup_exist = $mail_recup_exist->rowCount();
            if($mail_recup_exist == 1) {//Si $mail_recup_exist cette variable est égale à 1. On passe alors à la ligne suivante.
               $recup_insert = $connection->prepare('UPDATE recuperation SET code = ? WHERE mail = ?');//Si l'e-mail existe déjà => on  met à jour le code.
               $recup_insert->execute(array($recup_code,$recup_mail));
            } else {//Sinon on insère dans la table recuperation l'e-mail, le code de confirmation et 0 ligne suivante.
               $recup_insert = $connection->prepare('INSERT INTO recuperation(mail,code,confirme) VALUES (?, ?, "0")');
               $recup_insert->execute(array($recup_mail,$recup_code));
            }
############  Envoi de l'e-mail  ################################################################################################           
            //$son_email=$recup_mail; //e-mail du membre qui demande à obenir un mot de passe.

            //Variable à compléter
            $mon_pseudo="Admin";
            $mon_email="xxxxxxx@xxxx.xxx";
            $msg_pour_moi="Le membre $pseudo a demandé un nouveau mot de passe";
            $son_objet="Envoi du code d'identification de mot de passe.";
            $mon_objet="Demande d'envoi d'un code d'identification de mot de passe.";
            
            //Mise en forme de l'accusé de réception que la personne recevra.
		$accuse_pour_lui = "Bonjour $pseudo,\n
    	Nous avons reçu une demande de récupération de votre mot de passe envoyée avec votre adresse e-mail $recup_mail.\n
    	- Votre code de validation pour le jeu est : $recup_code\n
    	- Ceci est un email automatique, merci de ne pas y répondre.  \n
    	Cordialement";
          
         //Envoie du mail que recevra la personne qui souhaite un renouvellement de mot de passe.
		//On prépare l'entête du message
		$entete="MIME-Version: 1.0\r\n";
		$entete.= "From: " . $mon_pseudo . " <" . $mon_email . ">\n";
		$entete.='Content-Type:text/plain; charset="utf-8"'."\n";
		$entete .='Content-Transfer-Encoding: 8bit';
		//$entete.='Content-Type:text/html; charset="utf-8"'."\n";

		//if (@mail($mon_email,$mon_objet,$msg_pour_moi,$entete) && @mail($son_email,$son_objet,$accuse_pour_lui,$entete)){
        if (@mail($mon_email,$mon_objet,$msg_pour_moi,$entete) && @mail($recup_mail,$son_objet,$accuse_pour_lui,$entete)){//Si le mail a été envoyé
			//On affiche un message de confirmation
			$error= "<h3 style=\"text-align:center\">Votre message a été envoyé, vous recevrez une confirmation par mail.><br /><br />\n"; 
			//Avec un lien de retour vers l'accueil du site
			$error= "<a href=\"" . $mon_url . "\">Retour au login</a></h3>\n"; 
		}else {	//Sinon il y a eu une erreur lors de l'envoi
			$error= "<p style=\"text-align:center\">Un problème s'est produit lors de l'envoi du message.\n";
			//On propose un lien de retour vers le formulaire
			$error= "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez...</a></p>\n"; 
		}
         
            header('Location: recuperation.php?section=code');
            exit ();
         } else {
            $error = "Cette adresse mail n'est pas enregistrée";
         }
      } else {
         $error = "Adresse mail invalide";
      }
   } else {
      $error = "Veuillez entrer votre adresse mail";
   }
}
}
//Le formumaire pour entrer le code s'affiche.
if(isset($_POST['verif_submit'],$_POST['verif_code'])) {//Si un le code reçu par e-mail est présent et que "valider" est appuyé on passe ligne suivante.
   if(!empty($_POST['verif_code'])) {//Si ($_POST['verif_code']) présent et pas vide on passe ligne suivante.
      $verif_code = htmlspecialchars($_POST['verif_code']);
      $verif_req = $connection->prepare('SELECT id FROM recuperation WHERE mail = ? AND code = ?');
      $verif_req->execute(array($_SESSION['recup_mail'],$verif_code));
      $verif_req = $verif_req->rowCount();
      
      if($verif_req == 1) { //Si le code inscrit provenant de l'e-mail est identique à celui du champ code de la table recuperation.
         $up_req = $connection->prepare('UPDATE recuperation SET confirme = 1 WHERE mail = ?');//Mise à jour par 1 dans le champ confirme en correspondance avec l'e-mail.
         $up_req->execute(array($_SESSION['recup_mail']));
         header('Location:recuperation.php?section=changemdp');
		 exit ();
      } else {
         $error = "Code invalide";
      }
   } else {
      $error = "Veuillez entrer votre code de confirmation";
   }
}
if(isset($_POST['change_submit'])) { //Pour changer le mot de passe.
   if(isset($_POST['change_mdp'],$_POST['change_mdpc'])) {//Si les mots de passe sont inscrits.
      $verif_confirme = $connection->prepare('SELECT confirme FROM recuperation WHERE mail = ?');//Sélectionne le champ confirme à partir de l'e-mail.
      $verif_confirme->execute(array($_SESSION['recup_mail']));
      $verif_confirme = $verif_confirme->fetch();
      $verif_confirme = $verif_confirme['confirme'];
      if($verif_confirme == 1) { //Si dans le champ confirme la valeur est égale à 1, on passe à la ligne suivante.
         $mdp = htmlspecialchars($_POST['change_mdp']);
         $mdpc = htmlspecialchars($_POST['change_mdpc']);
         if(!empty($mdp) AND !empty($mdpc)) { //Si $mdp et $mdpc sont présents et ne sont pas vides, on passe à la ligne suivante.
            if($mdp == $mdpc) {
               //$mdp = hash('sha256',$mdp);
               	$mdpx = md5($mdp);
//$connection = null;               	
           	
$recup_mail= $_SESSION['recup_mail'];

$query = "
			UPDATE ".T_PLAYER."
			SET p_password = '{$mdpx}'
			, p_motpasse = '{$mdp}'
			WHERE p_email = '{$recup_mail}'
		";
		$mysql->query($query, __LINE__, __FILE__);         
               
//var_dump( $mysql);
//var_dump( $ins_mdp);

            $del_req = $connection->prepare('DELETE FROM recuperation WHERE mail = ?');//On supprime la ligne en correspondance avec l'email dans la table recuperation.
            $del_req->execute(array($_SESSION['recup_mail']));
            header('Location:motpasse.php'); //Redirection vers la confirmation du mot de passe remplacé.	
		    exit ();
            } else {
               $error = "Vos mots de passes ne correspondent pas";
            }
         } else {
            $error = "Veuillez remplir tous les champs";
         }
      } else {
         $error = "Veuillez valider votre mail grâce au code de vérification qui vous a été envoyé par mail";
      }
   } else {
      $error = "Veuillez remplir tous les champs";
   }
}
?>
<!-- Formulaires-->
<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Récupération de votre mot de passe</title>
<script src="https://www.google.com/recaptcha/api.js"></script>
<link href="./css/style.css" rel="stylesheet" type="text/css" />
</head>
    
<style>
    @-webkit-keyframes ombre {
  0% {
    box-shadow: 0 0 15px blue;
  }
  100% {
    box-shadow: 0 0 15px #ffffff;/*Blanc*/
  }
}
@-moz-keyframes ombre {
  0% {
    box-shadow: 0 0 15px blue;
  }
  100% {
    box-shadow: 0 0 15px #ffffff;/*Blanc*/
  }
}
@keyframes ombre {
  0% {
    box-shadow: 0 0 15px blue;
  }
  100% {
    box-shadow: 0 0 15px #ffffff;/*Blanc*/
  }
}
#passe {
  width: 460px;
  padding: 10px; 
  border: 1px solid #333;
  border-radius: 10px;
  /* Animation */
  -webkit-animation: ombre ease-in infinite alternate 500ms;
  -moz-animation: ombre ease-in infinite alternate 500ms;
  animation: ombre ease-in infinite alternate 500ms;
}
</style>    
    
<body>
<div align="center">
         <h2 class="title-element">Récupération de votre mot de passe</h2></br>	
         
			<!--************************* Envoi du code *****************************************************************-->
				<?php if($section == 'code') { ?>
				<?php
				$mel= '<span style="color:blue;font-size:20px;">' . $_SESSION['recup_mail'] . '</span>';
				?>
				<p><span style="color:black;font-size:20px;">Inscrivez votre code de validation qui vous a été envoyé par mail à: </span></p><?= $mel ?>
				</br>
				<form id="passe" method="post">
				   <fieldset>
				   <legend>Votre code :</legend>
				   </br>
				   <input type="text" placeholder="Code de vérification" name="verif_code"/><br/><br/>
				   <input type="submit" value="Valider" name="verif_submit"/>
				   </fieldset>
				</form>
				</br>
				<ul class="introduction">    
                    <blockquote><li>Un e-mail comportant le code de réinitialisation de votre mot de passe a été envoyé à l’adresse de votre compte.</br> Mais cela peut prendre plusieurs minutes avant qu’il n'arrivve dans votre boîte de réception. </br>
                        Veuillez patienter au maximum 10 minutes avant de tenter une autre réinitialisation si vous ne le recevez pas.
                    </li></blockquote>
                </ul>    
			<!--************************* Envoi du mot de passe **********************************************************-->
				<?php } elseif($section == "changemdp") { ?>
				<?php
				$mel= '<span style="color:blue;font-size:20px;">' . $_SESSION['recup_mail'] . '</span>';
				?>
				<p><span style="color:black;font-size:20px;">Inscrivez votre nouveau mot de passe pour: </span></p><?= $mel ?>
				</br></br>
				<form id="passe" method="post">
				   <fieldset>
				   <legend>Votre mot de passe</legend>
				   </br>
	                <input type="password" placeholder="Nouveau mot de passe" name="change_mdp" size="50" maxlength="50" id="mdp1"/><br/><br/>
	                <input type="password" placeholder="Confirmation du mot de passe" name="change_mdpc" size="50" maxlength="50" id="mdp2"/><br/><br/>
				   <input type="submit" value="Valider" name="change_submit"/>
				   </fieldset>
				</form>
			<!--************************** Envoi de l'e-mail ************************************************************-->	
				<?php } else { ?>
			<b><span style="color:black;font-size:20px;">Inscrivez votre e-mail.</br>
                Puis cliquez sur "Je ne suis pas un robot". Et validez.</span></b></br></br></br>
				<form id="passe" method="post">
			    <fieldset>	
			    <legend>Votre e-mail :</legend>	
			       </br>
				   <input type="email" placeholder="Votre adresse mail" name="recup_mail" size="50" maxlength="50" /><br/><br/>
				   <div class="g-recaptcha" data-sitekey="<?php echo $siteKey; ?>"></div>
				   <br/>
				   <input type="submit" value="Valider" name="recup_submit"/>
			    </fieldset>	
				</form>
                	</br>	
                <?php if(isset($captcha)) { echo $captcha; } else { echo ""; } ?>	
                     
                    <div style="float:left;margin-left: 10%;"><h3 class="introduction">
                                - Ici vous pouvez obtenir un nouveau mot de passe en remplacement de celui perdu.</br>
                                - Pour cela indiquer votre e-mail afin d'y recevoir un code à inscrire sur la page qui s'affichera après avoir cliqué sur Validez ci dessus.</br>
                                - Ce code vous autorisera à enregister votre nouveau mot de passe.</br>
                                - Pour toutes questions relatives à ce renouvellement, vous pouvez cliquer sur la boite à lettre présente ici:
                                <a href="/_qcm/formulaire.php"><img src="https://www.lacasagoum.com/php/images/gifs/email/emailgr1.gif" style="vertical-align:middle" alt="Ecrire un message" /></a></h3>
                    </div>
<?php } ?>
<?php if(isset($error)) { echo '<span style="color:red">'.$error.'</span>'; } else { echo ""; } ?>
</div>
<!--recuperation.php-->
</body>
</html>

Ainsi que le fichier recaptchalib auquel le fichier recuperation.php fait appel:

<?php
//https://fr.jeffprod.com/blog/2014/installez-le-nouveau-captcha-de-google-sur-votre-site-en-php/
/**
 * This is a PHP library that handles calling reCAPTCHA.
 *    - Documentation and latest version
 *          https://developers.google.com/recaptcha/docs/php
 *    - Get a reCAPTCHA API Key
 *          https://www.google.com/recaptcha/admin/create
 *    - Discussion group
 *          http://groups.google.com/group/recaptcha
 *
 * @copyright Copyright (c) 2014, Google Inc.
 * @link      http://www.google.com/recaptcha
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
/**
 * A ReCaptchaResponse is returned from checkAnswer().
 */
class ReCaptchaResponse
{
    public $success;
    public $errorCodes;
}
class ReCaptcha
{
    private static $_signupUrl = "https://www.google.com/recaptcha/admin";
    private static $_siteVerifyUrl =
        "https://www.google.com/recaptcha/api/siteverify";
    private $_secret;
    private static $_version = "php_1.0";
    /**
     * Constructor.
     *
     * @param string $secret shared secret between site and ReCAPTCHA server.
     */
    function ReCaptcha($secret)
    {
        if ($secret == null || $secret == "") {
            die("To use reCAPTCHA you must get an API key from <a href='"
                . self::$_signupUrl . "'>" . self::$_signupUrl . "</a>");
        }
        $this->_secret=$secret;
    }
    /**
     * Encodes the given data into a query string format.
     *
     * @param array $data array of string elements to be encoded.
     *
     * @return string - encoded request.
     */
    private function _encodeQS($data)
    {
        $req = "";
        foreach ($data as $key => $value) {
            $req .= $key . '=' . urlencode(stripslashes($value)) . '&';
        }
        // Cut the last '&'
        $req=substr($req, 0, strlen($req)-1);
        return $req;
    }
    /**
     * Submits an HTTP GET to a reCAPTCHA server.
     *
     * @param string $path url path to recaptcha server.
     * @param array  $data array of parameters to be sent.
     *
     * @return array response
     */
    private function _submitHTTPGet($path, $data)
    {
        $req = $this->_encodeQS($data);
        $response = file_get_contents($path . $req);
        return $response;
    }
    /**
     * Calls the reCAPTCHA siteverify API to verify whether the user passes
     * CAPTCHA test.
     *
     * @param string $remoteIp   IP address of end user.
     * @param string $response   response string from recaptcha verification.
     *
     * @return ReCaptchaResponse
     */
    public function verifyResponse($remoteIp, $response)
    {
        // Discard empty solution submissions
        if ($response == null || strlen($response) == 0) {
            $recaptchaResponse = new ReCaptchaResponse();
            $recaptchaResponse->success = false;
            $recaptchaResponse->errorCodes = 'missing-input';
            return $recaptchaResponse;
        }
        $getResponse = $this->_submitHttpGet(
            self::$_siteVerifyUrl,
            array (
                'secret' => $this->_secret,
                'remoteip' => $remoteIp,
                'v' => self::$_version,
                'response' => $response
            )
        );
        $answers = json_decode($getResponse, true);
        $recaptchaResponse = new ReCaptchaResponse();
        if (trim($answers ['success']) == true) {
            $recaptchaResponse->success = true;
        } else {
            $recaptchaResponse->success = false;
            $recaptchaResponse->errorCodes = $answers [error-codes];
        }
        return $recaptchaResponse;
    }
}
?>

Je ne comprends ce dysfonctionnement subit du fait qu'avant cela fonctionnait et que je n'ai rien modifié à ces fichiers.

Peut être que le passage à PHP8 en serait la raison?

Quand au message d'erreur il serait question de la ligne 20 du fichier recuperation.php en rapport avec

g-recaptcha-response dont la condition est vraie en ligne 17 ?

Pouvez vous m'aider à y voir plus clair SVP?

Merci.


Windows / Firefox 105.0

7 réponses

yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
18 oct. 2022 à 14:34

bonjour,

peut-être remplacer

 $answers [error-codes]

par

 $answers ['error-codes']
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
18 oct. 2022 à 15:46

Merci pour ta réponse et de t'intéresser à ce problème.

Mais cela ne fonctionne pas. Car bien que le message d'erreur n'apparaît plus avec ta solution, on ne passe pas à la page suivante qui est celle où on doit inscrire le code de validation reçu par e-mails lors de la validation précédente.

En fait l'utilisateur ne reçoit pas d'e-mail de ce formulaire présenté à partir de la ligne 258 du fichier recuperation.php :

<!--************************** Envoi de l'e-mail ************************************************************-->	
				<?php } else { ?>
			<b><span style="color:black;font-size:20px;">Inscrivez votre e-mail.</br>
                Puis cliquez sur "Je ne suis pas un robot". Et validez.</span></b></br></br></br>
				<form id="passe" method="post">
			    <fieldset>	
			    <legend>Votre e-mail :</legend>	
			       </br>
				   <input type="email" placeholder="Votre adresse mail" name="recup_mail" size="50" maxlength="50" /><br/><br/>
				   <div class="g-recaptcha" data-sitekey="<?php echo $siteKey; ?>"></div>
				   <br/>
				   <input type="submit" value="Valider" name="recup_submit"/>
			    </fieldset>	
				</form>
                	</br>	
                <?php if(isset($captcha)) { echo $captcha; } else { echo ""; } ?>	

Et si mon analyse est bonne, l'envoi du formulaire correctement rempli devrait avoir pour effet de rendre la condition en ligne 22 vrai :

if ($resp != null && $resp->success) {
        exit("<br/> Stop");
        if(isset($_POST['recup_submit'],$_POST['recup_mail'])) {//Si un e-mail est présent et que "valider" est appuyé on passe ligne suivante.

Mais cependant, elle ne l'est pas car le code ne s'arrête pas à la ligne suivante représenté par:

exit("<br/> Stop");

Par contre la condition de la ligne 17 est vrai car il se produit bien un arrêt de la lecture du script en ligne 18 comme ceci:

if(isset($_POST["g-recaptcha-response"])) {
    exit("<br/> Stop");
    $resp = $reCaptcha->verifyResponse(

C'est ainsi que je soupçonne les lignes 18 à 20:

$resp = $reCaptcha->verifyResponse(
        $_SERVER["REMOTE_ADDR"],
        $_POST["g-recaptcha-response"]

de faire partie de la cause de ce dysfonctionnement.

Si je ne me trompe, je n'en comprends pas pour autant les raisons.

Peut être aurais tu une idée?

0
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
18 oct. 2022 à 19:00

Je crois comprendre que tu soupçonnes le if en ligne 22.

Pour analyser cela, il faudrait faire "var_dump($resp);", par exemple juste avant la ligne 22.

0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
19 oct. 2022 à 10:47

Ok.Voici le script ajouté juste avant la ligne 22:

(Ici en ligne 7 ci dessous)

$reCaptcha = new ReCaptcha($secret);
if(isset($_POST["g-recaptcha-response"])) {
    $resp = $reCaptcha->verifyResponse(
        $_SERVER["REMOTE_ADDR"],
        $_POST["g-recaptcha-response"]
        );
        var_dump($resp);
    if ($resp != null && $resp->success) {

Je n'ai pas eu de réponse à cela.

Mais le message d'erreur qui s'affiche:

Fatal error: Uncaught Error: Undefined constant "error" in /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/recaptchalib.php:125 Stack trace: #0 /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/recuperation.php(20): ReCaptcha->verifyResponse('2a01:cb0c:2e1:4...', '03AIIukzhGkEVnP...') #1 {main} thrown in /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/recaptchalib.php on line 125

Il renvoi à la même ligne que le précédent message d'erreur affiché lors de mon premier message.

J'ai un autre formulaire ici:

https://jeuxechecs.fr/formulaire.php

Dont voici la présentation:

Et présente lui aussi un message d'erreur que voici:

Fatal error: Uncaught Error: Undefined constant "error" in /customers/6/0/9/jeuxechecs.fr/httpd.www/recaptchalib.php:124 Stack trace: #0 /customers/6/0/9/jeuxechecs.fr/httpd.www/formulaire.php(39): ReCaptcha->verifyResponse('2a01:cb0c:2e1:4...', '03AIIukzgGt9oz9...') #1 {main} thrown in /customers/6/0/9/jeuxechecs.fr/httpd.www/recaptchalib.php on line 124

<?php
/**
 * This is a PHP library that handles calling reCAPTCHA.
 *    - Documentation and latest version
 *          https://developers.google.com/recaptcha/docs/php
 *    - Get a reCAPTCHA API Key
 *          https://www.google.com/recaptcha/admin/create
 *    - Discussion group
 *          http://groups.google.com/group/recaptcha
 *
 * @copyright Copyright (c) 2014, Google Inc.
 * @link      http://www.google.com/recaptcha
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
/**
 * A ReCaptchaResponse is returned from checkAnswer().
 */
class ReCaptchaResponse
{
    public $success;
    public $errorCodes;
}
class ReCaptcha
{
    private static $_signupUrl = "https://www.google.com/recaptcha/admin";
    private static $_siteVerifyUrl =
        "https://www.google.com/recaptcha/api/siteverify";
    private $_secret;
    private static $_version = "php_1.0";
    /**
     * Constructor.
     *
     * @param string $secret shared secret between site and ReCAPTCHA server.
     */
    function ReCaptcha($secret)
    {
        if ($secret == null || $secret == "") {
            die("To use reCAPTCHA you must get an API key from <a href='"
                . self::$_signupUrl . "'>" . self::$_signupUrl . "</a>");
        }
        $this->_secret=$secret;
    }
    /**
     * Encodes the given data into a query string format.
     *
     * @param array $data array of string elements to be encoded.
     *
     * @return string - encoded request.
     */
    private function _encodeQS($data)
    {
        $req = "";
        foreach ($data as $key => $value) {
            $req .= $key . '=' . urlencode(stripslashes($value)) . '&';
        }
        // Cut the last '&'
        $req=substr($req, 0, strlen($req)-1);
        return $req;
    }
    /**
     * Submits an HTTP GET to a reCAPTCHA server.
     *
     * @param string $path url path to recaptcha server.
     * @param array  $data array of parameters to be sent.
     *
     * @return array response
     */
    private function _submitHTTPGet($path, $data)
    {
        $req = $this->_encodeQS($data);
        $response = file_get_contents($path . $req);
        return $response;
    }
    /**
     * Calls the reCAPTCHA siteverify API to verify whether the user passes
     * CAPTCHA test.
     *
     * @param string $remoteIp   IP address of end user.
     * @param string $response   response string from recaptcha verification.
     *
     * @return ReCaptchaResponse
     */
    public function verifyResponse($remoteIp, $response)
    {
        // Discard empty solution submissions
        if ($response == null || strlen($response) == 0) {
            $recaptchaResponse = new ReCaptchaResponse();
            $recaptchaResponse->success = false;
            $recaptchaResponse->errorCodes = 'missing-input';
            return $recaptchaResponse;
        }
        $getResponse = $this->_submitHttpGet(
            self::$_siteVerifyUrl,
            array (
                'secret' => $this->_secret,
                'remoteip' => $remoteIp,
                'v' => self::$_version,
                'response' => $response
            )
        );
        $answers = json_decode($getResponse, true);
        $recaptchaResponse = new ReCaptchaResponse();
        if (trim($answers ['success']) == true) {
            $recaptchaResponse->success = true;
        } else {
            $recaptchaResponse->success = false;
            $recaptchaResponse->errorCodes = $answers [error-codes];
        }
        return $recaptchaResponse;
    }
}
?>

Je trouve qu'il est curieux d'obtenir un message presque identique pour 2 formulaires différents mais avec un fichier commun placé à deux endroits différents de mon site.

L'un ici: www/echecs/recaptchalib.php

Et l'autre à la racine là: www/recaptchalib.php

Quelles conclusions peut on en tirer?

Merci.

0
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
19 oct. 2022 à 11:17

Conclusion: tu n'as pas appliqué la suggestion en #1.

0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
19 oct. 2022 à 11:30

C'est à dire?

Quelle suggestion en 1?

0
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
19 oct. 2022 à 12:12

#1

0

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

Posez votre question
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
19 oct. 2022 à 12:26

****************************************************************

C'est à dire?

Quelle suggestion en #1?

0
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
19 oct. 2022 à 12:48

As-tu cliqué sur le lien: #1?

0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
19 oct. 2022 à 13:09

Ha ok j'ai compris avec #1 !

Alors pour en revenir à ta question, je t'ai répondu hier à 15h46 en t'indiquant que cela ne fonctionne pas.

Car bien que le message d'erreur n'apparaît plus avec ta solution, on ne passe pas à la page suivante qui est celle où on doit inscrire le code de validation reçu par e-mails lors de la validation précédente.

0
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
19 oct. 2022 à 13:40

C'est nécessaire, peut-être pas suffisant.

0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
21 oct. 2022 à 18:16

Ce n'était pas suffisant.

C'est ainsi que je me suis orienté vers une version plus récente du Captcha.

La version 3 plus exactement. Donc j'ai trouvé les fichiers accompagnés des explications ici:

reCAPTCHA V3.

Cerise sur le gâteau, le présentateur (sans doute un enseignant) possède une bonne pédagogie!

Il est aussi bien sympathique!

Les fichiers adaptés à mon site sur les questions du jeu d' échec (Q-C-M) fonctionnent sur celui ci.

Il me reste à les adapter désormais sur mon site pour jouer aux échecs par correspondance.

Ce qui ne saurait tarder.

Voilà. Je voulais faire partager cette expérience à tous les amateurs passionnés d'informatique.

Et notamment sur les sites web.

La question est finalement résolue pour moi.

Cordialement.

0