Récupération du mot de passe

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Voila je met mon code ci-dessous pour essayé de trouver l'erreur ensemble, de mon coté je pense que ça coince au niveau de 9 à 14 j'ai encore du mal avec les requetes, j'ai l'erreur " 2 " qui apparaît quand j'écrit n'importe quoi dans mon formulaire.

session_start();

include('../php/config.php');

if(isset($_POST['verif_submit'],$_POST['verif_code']))
{
 if(!empty($_POST['verif_code']))
 {
     $verif_code = htmlspecialchars($_POST['verif_code']);
  $verif_req = $bdd->prepare('SELECT id FROM membres WHERE mail = ? AND code = ?');
  $verif_req->execute(array($_POST['mail_valid'],$verif_code));
  $verif_req = $verif_req->rowCount();
  if($verif_req == 1)
  {
   $sql = "SELECT * FROM membres WHERE mail = ?";
   $datas = array($mail_valid, $pass_valid, $pass2_valid);
   try{
    $prep= $bdd->prepare($sql);
    $prep->execute($datas);
    $a_result = $prep->fetchAll();
    $nbResult =  !empty($a_result) ? count($a_result) : 0;
   }catch(Exception $e){
    echo " Erreur : " . $e->getMessage();
   }
    $userexist = $nbResult;
   if($userexist == 1)
   {
    $userinfo = $a_result[0];
    $id = $userinfo['id'];
    $mail = $userinfo['mail'];
    $code = $userinfo['recup'];

    if($code == $_POST['verif_code'])
    {
     if($mail == 1)
     {
      $pass = hash("sha512",($_POST['pass']));
      $pass2 = hash("sha512",($_POST['pass2']));
      if($pass == $pass2)
      {
       $insert_db = $bdd->prepare("INSERT INTO membres(pass) VALUES(?)");
       $insert_db->execute(array($pass));
       $up_req = $bdd->prepare('UPDATE membres SET confirme = 1 WHERE mail = ?');
       $up_req->execute(array($mail));
      }
      else
      {
       $erreur = "Mots de passes incorrect ou non identique !";
      }
     }
     else
     {
      $erreur = "Email incorrect !";
     }
    }
    else
    {
     $erreur = "Code de vérification incorrect";
    }
   }
   else
   {
    $erreur = "1";
   }
  }
  else
  {
      $erreur = "2";
  }
 }
 else
 {
  $erreur = "Veuillez entrer votre code de confirmation";
 }
}

4 réponses

Résumé de la discussion

Problème central : une erreur « 2 » apparaît lorsque le formulaire de vérification est soumis, et les échanges de la discussion portent sur les requêtes SQL et le nombre de paramètres liés. Des conseils ont invité à afficher les valeurs ($_POST), vérifier le contenu des variables mail_valid et verif_code, et tester les requêtes directement dans la base. La piste principale identifiée est un décalage entre le nombre de paramètres passés et les tokens dans la requête, conduit à des messages comme Invalid parameter number, et nécessite de corriger les valeurs liées. D'autres échanges proposent également de tester la requête directement et de vérifier que les données correspondent aux paramètres attendus, afin d'éviter les erreurs liées au comptage des paramètres.

Bobot (l'IA à votre service)
  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonsoir, peux-tu ajouter des commentaires pour indiquer à quel "if" correspond chaque "else", ou expliquer à quoi correspond ton erreur "2"?
    0
  2. Utilisateur anonyme
     
    L'erreur correspond au if de la ligne 13 ci-dessus, l'erreur intérieur ce sont les lignes juste au dessus je pense.
    0
  3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    Pourquoi ne pas avoir tenu compte de toutes mes remarques de ta question précédente ???

    Plusieurs choses ne vont pas dans ton code (encore...) :
    - il faut activer les erreurs php
    - Il faut mettre TOUTES tes requêtes dans des blocs try/catch
    - htmlspecialchars ne s'utilise que pour l'affichage ... pas pour la comparaison ou l'insertion en bdd
    - Il ne faut pas utiliser, pour une requete de type select, le RowCount
    - etc...

    <?php
    session_start();
    
    //activation de l'affichage des erreurs PHP
    error_reporting(E_ALL);
    ini_set('display-errors','on');
    
    include('../php/config.php');
    
    
    //------------------------------------------------------------//
    //récupération PROPRE des variables AVANT de les utiliser
    //------------------------------------------------------------//
    $verif_code = !empty($_POST['verif_code']) ? $_POST['verif_code']: NULL;
    $mail_valid = !empty($_POST['mail_valid']) ? $_POST['mail_valid']: NULL;
    
    
    if(isset($_POST['verif_submit'])){
       if($verif_code ) {
        
        $sql  = "SELECT id FROM membres WHERE mail = ? AND code = ?";
        $datas = array($mail_valid,$verif_code);
        try{
          $prep= $bdd->prepare($sql);
          $prep->execute($datas);
          $a_result_mail = $prep->fetchAll();
          $verif_req =  !empty($a_result_mail) ? count($a_result_mail) : 0;
         }catch(Exception $e){
           echo " Erreur : " . $e->getMessage();
         }
        
    
        if($verif_req == 1) {
           $sql = "SELECT * FROM membres WHERE mail = ?";
           $datas = array($mail_valid, $pass_valid, $pass2_valid);
           try{
            $prep= $bdd->prepare($sql);
            $prep->execute($datas);
            $a_result = $prep->fetchAll();
            $nbResult =  !empty($a_result) ? count($a_result) : 0;
           }catch(Exception $e){
            echo " Erreur : " . $e->getMessage();
           }
    
           if($nbResult == 1) {
             $userinfo = $a_result[0];
            $id = $userinfo['id'];
            $mail = $userinfo['mail'];
            $code = $userinfo['recup'];
    
            if($code == $verif_code) {
              if($mail == 1) {
                $pass = hash("sha512",($_POST['pass']));
                $pass2 = hash("sha512",($_POST['pass2']));
                if($pass == $pass2)  {
                
                $insert_db = $bdd->prepare("INSERT INTO membres(pass) VALUES(?)");
                 $insert_db->execute(array($pass));
                 $up_req = $bdd->prepare('UPDATE membres SET confirme = 1 WHERE mail = ?');
                 $up_req->execute(array($mail));
               
               } else {
                 $erreur = "Mots de passes incorrect ou non identique !";
               }
               
              } else {
                $erreur = "Email incorrect !";
              }
            } else  {
             $erreur = "Code de vérification incorrect";
            }
          } else {
            $erreur = "1";
          }
        } else {
            $erreur = "2";
            print_r($a_result_mail);
        }
      } else {
        $erreur = "Veuillez entrer votre code de confirmation";
      }
    }
    

    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Au passage ..... dans le code actuel ... les variables $mail_valid, $pass_valid, $pass2_valid .. ne sont pas définies ....
      et tu vas avoir un souci avec ces deux lignes
      $sql = "SELECT * FROM membres WHERE mail = ?";
      $datas = array($mail_valid, $pass_valid, $pass2_valid);
      

      -> Tu ne mets qu'un seul "?" dans ta requête... mais tu envoies 3 variables dans les datas........
      0
    2. Utilisateur anonyme > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Oui, désolé je vient de voir ça, par contre le : print_r($a_result_mail); ma retourné : Array ( ) et l'erreur 2 toujours
      0
    3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > Utilisateur anonyme
       
      ce qui veut dire que ta requête n'a retourné aucun résultat ....
      Peux tu
      1 - Faire un print du premier $data
      if($verif_code ) {
          
          $sql  = "SELECT id FROM membres WHERE mail = ? AND code = ?";
          $datas = array($mail_valid,$verif_code);
          print_r($datas);
      

      nous dire ce que ça donne

      2 - tester ta requête DIRECTEMENT dans ta BDD (via phpmyadmin par exemple)
      0
    4. Utilisateur anonyme > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
       
      J'ai trouver le bug c'était if($verif_code == 1) { il manquait le == 1 x)
      0
    5. Utilisateur anonyme > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Maintenant ça bug au niveau de l'erreur = "Veuillez entrer votre code de confirmation";
      print n'a rien retourné
      0
  4. Utilisateur anonyme
     
    J'ai fais comme ça je n'ai plus l'erreur au même endroit cette fois ci elle est revenu à " 2 " donc au niveau de la ligne : if($verif_req == 1)

    $verif_code = !empty($_POST['verif_code']) ? $_POST['verif_code']: NULL;
    $mail_valid = !empty($_POST['mail_valid']) ? $_POST['mail_valid']: NULL;
    
    if(isset($_POST['verif_submit']))
    {
    	$sql = "SELECT * FROM membres WHERE mail = ? AND recup = ?";
    	$datas = array($mail_valid,$verif_code);
    	try{
    	   $prep= $bdd->prepare($sql);
    	   $prep->execute($datas);
    	   $a_result = $prep->fetchAll();
    	   $nbResult =  !empty($a_result) ? count($a_result) : 0;
    	}catch(Exception $e){
    	  echo " Erreur : " . $e->getMessage();
    	}
    
    	$userexist = $nbResult;
    	if($userexist == 1)
    	{
    		$userinfo = $a_result[0];
    		$code = $userinfo['recup'];
    
    		if($verif_code == $code)
    		{
    			$sql  = "SELECT id FROM membres WHERE mail = ? AND code = ?";
    			$datas = array($mail_valid,$verif_code);
    			try{
    				$prep= $bdd->prepare($sql);
    				$prep->execute($datas);
    				$a_result_mail = $prep->fetchAll();
    				$verif_req =  !empty($a_result_mail) ? count($a_result_mail) : 0;
    			}catch(Exception $e)
    			{
    				echo " Erreur : " . $e->getMessage();
    			}
    
    			if($verif_req == 1)
    			{
    
    0
    1. Utilisateur anonyme > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Array ( [0] => mon_mail [1] => 43493260 )
      0
    2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > Utilisateur anonyme
       
      Et le ppint 2 ... la requête ???
      0
    3. Utilisateur anonyme > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Bon j'ai trouver ce problème la, je tenter de chercher sur ma db " code " alors que c'était recup
      0
    4. Utilisateur anonyme > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Maintenant j'avance petit à petit, je suis bloquer à l'erreur (1)
      0