Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème de réinitialisation mot de passe

Sujet résolu
    11 août 2019 à 15:38:47

    bonjour a tous ,je suis un tuto sur la création d'un compte utilisateur ,confirmation par mot de passe ,réinitialisation du mot de passe ,mais lors de la réinitialisation du mot de passe le script ne s’exécute pas ,voici le code:

    forget.php

    <?php
    
       if(!empty($_POST) && !empty($_POST['email']))
          {
         require_once 'db.php';
         require_once 'functions.php';
        
         $req =$bdd->prepare('SELECT * FROM users WHERE email = ? AND confirmed_at IS NOT NULL');
         $req->execute([$_POST['email']]);
         $user = $req-> fetch(); 
          
    
        if($user)
        {    
           
       
            session_start(); 
            $reset_token= str_random(60);
            $bdd->prepare('UPDATE users SET reset_token =?, reset_at = NOW() WHERE id_user=?')-> execute([$reset_token, $user->id_user]);
           
    
            
          $_SESSION['flash']['success']="un mail de rapel de  mot de passe vous a ete envoyer";
             mail($_POST['email'],'Reinitialisation de votre compte',"afin de reinitialiser votre mot de passe cliquer sur ce lien \n\n http://localhost/projet/annuaire%20telephonique/reset.php?id_user={$user->id_user}&token=$reset_token");
           //  header('location:login.php');
          // exit();
         }
         else 
         {
             $_SESSION['flash']['danger']='Aucun compte ne correspond a cet mail';
           
        }
       
      }
       
       
    
    
    ?>
    
    <?php require 'header.php'; ?>
    
    <h1> Se connecter </h1>
    
    
    
    
    <form action="" method="POST">
      <div class="form-row">
    
      <div class="col">
          <input type="email"   class="form-control"   name="email"    placeholder="votre mail"   > <br/>
        </div>
     
      
      
      <button type="submit"  class="btn btn-primary">envoyer</button>
      
      
      
      
    </form>


    ce que je remarque c'est que le mail envoyer ne contient pas id l'utilisateur ,

    exemple:

    http://localhost/projet/annuaire%20telephonique/reset.php?id_user=&token=f0NyvD4jGlKpvx41eianVhILdJ1Y8N0BuhVYKQwIlIStWcTljIIg6hLsR7jU

    id_user="vide".

    reset.php

    <?php
    
    if(!isset($_GET['id_user']) && isset($_GET['token']))
    
    
       {
          require 'db.php';
          require 'functions.php';
          $req=$bdd->prepare('SELECT * FROM  users WHERE id_user =? AND reset_token =? AND reset_at > DATE_SUB(NOW(), INTERVAL 30 MINUTE)');
          $req->execute([$_GET['id_user'],$_GET['token']]);
          $user=$req->fetch();
    
          if($user)
    
            {
              
                 if(!empty($_POST['password']) && $_POST['password'] == $_POST['password_confirm'])  
                 {
                     $password= password_hash($_POST['password'],PASSWORD_BCRYPT).
                     $bdd->prepare('UPDATE users SET password =?, reset_at=NULL,reset_token=NULL ')->execute([$password]);
                     session_start();
                     $_SESSION['flash']['success']="mot de passe bien reintialiser";
                     $_SESSION['auth']=$user;
                     header('location:account.php');
                     exit();
                    
                 }
    			 
    			 else{
                $_SESSION['flash']['danger']="ce tokken n'est pas valide";
                header('location:login.php');
                exit();
    			 
            }
          
    
    
    
         
        }
    
    
    
        }
          
    ?>
    
    <?php require 'header.php'; ?>
    
    <h1> REINITIALISER MOT DE PASSE</h1>
    
    
    
    
    <form action="" method="POST">
      <div class="form-row">
    
      <div class="col">
          <input type="password"   class="form-control"   name="password"    placeholder="nouveau mot de passe"   > <br/>
        </div>
     
        <div class="col">
          <input type="password"  class="form-control"  name="password_confirm"  placeholder="confirmer nouveau mot de passe"   ><br/>
        </div>
      
      <button type="submit"  class="btn btn-primary">REINITIALISER</button>
      
      
      
      
    </form>

    merci bien

    • Partager sur Facebook
    • Partager sur Twitter
      11 août 2019 à 15:44:10

      Salut,

      je passe les fautes d'orthographe qui piquent, il s'agit de la variable $user qui ne renvoie pas l'identifiant => elle n'est pas créée, de plus tu n'as pas activé les erreurs PHP sinon tu aurais eu une belle erreur qui te donne la ligne et le script fautif.

      Ici forget.php, ligne 24 en erreur car $user est vide de la première requête

      • Partager sur Facebook
      • Partager sur Twitter
      "K.I.S.S." Keep It Simple Stupid - Utilisez la Doc - Activer les Exceptions PDO - SQL Formes Normales
        11 août 2019 à 16:23:25

        $user existe du fait de $user = $req-> fetch();

        Et elle ne vaut pas FALSE puisque le code de son if($user) est exécuté.

        var_dump($user); ? Tu as redéfini le mode de fetch par défaut en PDO::FETCH_OBJ ? (vu que ton fetch n'a pas ce mode en paramètre et que tu utilises $user->id_user)

        -
        Edité par julp 11 août 2019 à 16:25:08

        • Partager sur Facebook
        • Partager sur Twitter

        julp.fr ~ Les règles sur OC ~ je ne fais pas d'effort pour ceux qui n'en font pas

          11 août 2019 à 16:26:26

          Ah bien vu le fetch object, je pense qu'il ne l'a pas redéfini, et qu'il bosse à l'aveuglette
          • Partager sur Facebook
          • Partager sur Twitter
          "K.I.S.S." Keep It Simple Stupid - Utilisez la Doc - Activer les Exceptions PDO - SQL Formes Normales
            12 août 2019 à 14:59:48

            merci bien mais l'erreur persiste toujours:

            erreur:

            code :

            <?php
            
               if(!empty($_POST) && !empty($_POST['email']))
                  {
                 require_once 'db.php';
                 require_once 'functions.php';
                
                 $req =$bdd->prepare('SELECT * FROM users WHERE email = ? AND confirmed_at IS NOT NULL');
                 $req->execute([$_POST['email']]);
                 $user = $req-> fetch(PDO::FETCH_OBJ); 
                  
            
                if($user)
                {    
                   
               
                    session_start(); 
                    $reset_token= str_random(60);
                    $bdd->prepare('UPDATE users SET reset_token =?, reset_at = NOW() WHERE id_user=?')-> execute([$reset_token, $user->id_user]);
                    $user = $req-> fetch(PDO::FETCH_OBJ); 
            
                    
                  $_SESSION['flash']['success']="un mail de rapel de  mot de passe vous a ete envoyer";
                  mail($_POST['email'],'Reinitialisation de votre compte',"afin de reinitialiser votre mot de passe cliquer sur ce lien \n\n http://localhost/projet/annuaire%20telephonique/reset.php?id_user={$user->id_user}&token=$reset_token");
                   
                  
                 // header('location:login.php');
                  exit();
                 }
                 else 
                 {
                     $_SESSION['flash']['danger']='Aucun compte ne correspond a cet mail';
                   
                }
               
              }
               
               
            
            
            ?>
            
            <?php require 'header.php'; ?>
            
            <h1> Se connecter </h1>
            
            
            
            
            <form action="" method="POST">
              <div class="form-row">
            
              <div class="col">
                  <input type="email"   class="form-control"   name="email"    placeholder="votre mail"   > <br/>
                </div>
             
              
              
              <button type="submit"  class="btn btn-primary">envoyer</button>
              
              
              
              
            </form>

            merci bien

            • Partager sur Facebook
            • Partager sur Twitter
              12 août 2019 à 16:01:42

              Ligne 10 tu fais déjà le fetch et tu le refais dans le if ? Chaque fois que tu le fais ça avance de 1 ligne dans les résultats...

              Pour le FETCH_OBJ tu avais déjà le même problème dans un ancien message. On peut t'aider mais si tu refais les mêmes erreurs tout le temps on va pas y arriver ;-).

              -
              Edité par Pyrrouh 12 août 2019 à 16:05:02

              • Partager sur Facebook
              • Partager sur Twitter
                12 août 2019 à 16:06:07

                Bonjour,

                Ligne 20, tu espères récupérer quoi avec le nouveau  fetch  ?

                -
                Edité par philodick 12 août 2019 à 16:07:10

                • Partager sur Facebook
                • Partager sur Twitter
                  14 août 2019 à 3:15:46

                  merci le problème est résolu j'ai enlevé le le code de la ligne 20 ça marche
                  • Partager sur Facebook
                  • Partager sur Twitter

                  problème de réinitialisation mot de passe

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  • Editeur
                  • Markdown