Undefined index: recup_mail

JxSDev

JxSDev Le 29 avril 2016 à 10:57 (Édité le 25 janvier 2019 à 17:51)

Morning People  :)/ 
J'ai suivi le tuto de mot de passe oublié de PRIMFX et j'ai rencontré cette erreur là :
( ! ) Notice: Undefined index: recup_mail in C:\wamp\www\TOUPACKGROUP\forget.php on line 153
Tout allez bien quand j'ai fixé l'erreur de "Undefined variable $section" 
puis je ne sais pas ce qui s'est passé mais recup_mail n'est pas prise en compte et quand je fais entrer le code de vérification une autre erreur s'affiche avec : Notice: Undefined variable: _SESSION in C:\wamp\www\TOUPACKGROUP\forget.php on line 99
Que quelqu'un m'explique ce qui se passe s'il vous plait 😕 
voici le code : 
<?php
require 'inc/bootstrap.php';
    $bdd = new PDO('mysql:dbname=toupackgbd;host=localhost', 'root', '');
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
 if(isset($_GET['section']))
     {
        $section = $_GET['section'];
     }
if(isset($_POST['recup_submit'], $_POST['recup_mail']))
{
   if(!empty($_POST['recup_mail']))
   {
      $recup_mail = htmlspecialchars($_POST['recup_mail']);
      if(filter_var($recup_mail,FILTER_VALIDATE_EMAIL))
      {
         $mailexist = $bdd->prepare('SELECT id_customer,company_name FROM customer WHERE email = ?');
         $mailexist->execute(array($recup_mail));
         $mailexist_count = $mailexist->rowCount();
         if($mailexist_count == 1)
         {
            $pseudo = $mailexist->fetch();
            $pseudo = $pseudo->company_name;
            
            $_SESSION['recup_mail'] = $recup_mail;
            $recup_code = "";
            for($i=0; $i < 8; $i++)
            { 
               $recup_code .= mt_rand(0,9);
            }
            $mail_recup_exist = $bdd->prepare('SELECT id FROM reset WHERE mail = ?');
            $mail_recup_exist->execute(array($recup_mail));
            $mail_recup_exist = $mail_recup_exist->rowCount();
            if($mail_recup_exist == 1) 
            {
               $recup_insert = $bdd->prepare('UPDATE reset SET code = ? WHERE mail = ?');
               $recup_insert->execute(array($recup_code,$recup_mail));
            } else {
               $recup_insert = $bdd->prepare('INSERT INTO reset (mail,code) VALUES (?, ?)');
               $recup_insert->execute(array($recup_mail,$recup_code));
            }
         $header="MIME-Version: 1.0\r\n";
         $header.='From:"Toupackgroup.com"<support@Toupackgroup.com>'."\n";
         $header.='Content-Type:text/html; charset="utf-8"'."\n";
         $header.='Content-Transfer-Encoding: 8bit';
         $message = '
         <html>
         <head>
           <title>Récupération de mot de passe - Toupackgroup.com</title>
           <meta charset="utf-8" />
         </head>
         <body>
           <font color="#303030";>
             <div align="center">
               <table width="600px">
                 <tr>
                   <td>
                     
                     <div align="center">Bonjour <b>'.$pseudo.'</b>,</div>
                     Voici votre code de récupération: <b>'.$recup_code.'</b>
                     A bientôt sur <a href="http://Toupackgroup.com/">Toupackgroup.com</a> !
                     
                   </td>
                 </tr>
                 <tr>
                   <td align="center">
                     <font size="2">
                       Ceci est un email automatique, merci de ne pas y répondre
                     </font>
                   </td>
                 </tr>
               </table>
             </div>
           </font>
         </body>
         </html>
         ';
         mail($recup_mail, "Récupération de mot de passe - Toupackgroup.com", $message, $header);
            header("Location:http://127.0.0.1/TOUPACKGROUP/forget.php?section=code");
         } else {
           Session::getInstance()->setFlash('danger',"Cette adresse mail n'est pas enregistrée");
         }
      } else {
         Session::getInstance()->setFlash('danger',"Adresse mail invalide");
      }
   } else {
      Session::getInstance()->setFlash('danger',"Veuillez entrer votre adresse mail");
   }
}
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 reset WHERE mail = ? AND code = ?');
      $verif_req->execute(array($_SESSION['recup_mail'],$verif_code));
      $verif_req = $verif_req->rowCount();
      if($verif_req == 1)
      {
         $up_req = $bdd->prepare('UPDATE reset SET confirme = 1 WHERE mail = ?');
         $up_req->execute(array($_SESSION['recup_mail']));
         header('Location:http://localhost/TOUPACKGROUP/forget.php?section=changemdp');
      }else{
         Session::getInstance()->setFlash('danger',"Code invalide");
      }
   } else {
      Session::getInstance()->setFlash('danger',"Veuillez entrer votre code de confirmation");
   }
}
if(isset($_POST['change_submit']))
{
   if(isset($_POST['change_mdp'],$_POST['change_mdpc']))
   {
      $verif_confirme = $bdd->prepare('SELECT confirme FROM reset WHERE mail = ?');
      $verif_confirme->execute(array($_SESSION['recup_mail']));
      $verif_confirme = $verif_confirme->fetch();
      $verif_confirme = $verif_confirme->confirme;
      if($verif_confirme == 1) 
      {
         $mdp = htmlspecialchars($_POST['change_mdp']);
         $mdpc = htmlspecialchars($_POST['change_mdpc']);
         if(!empty($mdp) AND !empty($mdpc)) 
         {
            if($mdp == $mdpc){
               $mdp = password_hash($mdp, PASSWORD_BCRYPT);
               $ins_mdp = $bdd->prepare('UPDATE customer SET passwd = ?, reset_at = NOW() WHERE email = ?');
               $ins_mdp->execute(array($mdp, $_SESSION['recup_mail']));
              $del_req = $bdd->prepare('DELETE FROM reset WHERE mail = ?');
              $del_req->execute(array($_SESSION['recup_mail']));
               header('Location:http://localhost/TOUPACKGROUP/login.php');
            } else {
               Session::getInstance()->setFlash('danger',"Vos mots de passes ne correspondent pas");
            }
         } else {
            Session::getInstance()->setFlash('danger',"Veuillez remplir tous les champs");
         }
      } else {
        Session::getInstance()->setFlash('danger',"Veuillez valider votre mail grâce au code de vérification qui vous a été envoyé par mail");
      }
   } else {
      Session::getInstance()->setFlash('danger',"Veuillez remplir tous les champs");
   }
}
?>
<?php require 'inc/header2.php';
  ?>
      <div class="form-group" align="center">
      <h4 class="title-element">Récupération de mot de passe</h4>
    <?php if(isset($_GET['section']) == 'code') { ; ?>
    Un code de vérification vous a été envoyé par mail: <?= $_SESSION['recup_mail'] ?> 
      <br/>
    <form method="post">
       <input type="text" placeholder="Code de vérification" name="verif_code"/><br/>
       <input type="submit" value="Valider" name="verif_submit" class="btn btn-primary"/>
    </form> </div>
    <?php } elseif(isset($_GET['section']) == "changemdp") { ?>
     <div class="form-group" align="center">
     Nouveau mot de passe pour <?= $_SESSION['recup_mail'] ?>
    <form method="post">
       <input type="password" placeholder="Nouveau mot de passe" name="change_mdp"/><br/>
       <input type="password" placeholder="Confirmation du mot de passe" name="change_mdpc"/><br/>
       <input type="submit" value="Valider" name="change_submit" class="btn btn-primary"/>
    </form> </div>
    <?php } else { ?>
      <div class="form-group" align="center">
    <form method="post">
       <input type="email" placeholder="Votre adresse mail" id="recup_mail" name="recup_mail"/><br/>
       <input type="submit" value="Valider" name="recup_submit" class="btn btn-primary"/>
    </form></div>
<?php } ?>
<?php require 'inc/footer.php'; ?>
Clouder

Clouder Le 29 avril 2016 à 16:46

As-tu mis un session_start(); quelque part ? 
JxSDev

JxSDev Le 29 avril 2016 à 18:04

le session_start() se trouve dans ma classe Session , et la j'ai juste appelé la function setFlash qui se trouve dans la même classe que session_start , est ce qu'elle sera appelé automatiquement avec la fonction setFlash ? 
voici le code de la classe pour plus d'infos!
<?php
/* Created by PhpStorm. User: Gee Date: 22/03/2016 Time: 21:04 */
    class Session{
        static $instance; //pour sauvegarder l'instance de la session qui est déjà chargée
        static function getInstance(){
            if(!self:: $instance){
                self:: $instance = new Session();
            }
        return self:: $instance;
    }
        public function  __construct()
        {
            session_start();
        }
        public function setFlash($key, $Msg){
            $_SESSION['flash'][$key] = $Msg;
        }
        public function hasFlashes(){
            return isset($_SESSION['flash']);
        }
        public function getFlashes(){
            $flash = $_SESSION['flash'];
            unset($_SESSION['flash']);
            return $flash;
        }
        
        public function write($key, $value){
            $_SESSION[$key] = $value;
        }
        
        public function read($key){
            return isset($_SESSION[$key]) ? $_SESSION[$key] : null;
        }
        public function delete($key){
            unset($_SESSION[$key]);
        }
    }
Clouder

Clouder Le 29 avril 2016 à 18:57

De base oui elle sera appelé !  :) 
Mais après je sais pas ce que cela donne vraiment en vrai
JxSDev

JxSDev Le 29 avril 2016 à 19:13

bon, je vais essayer d l enlever pour voir ce que ça va donner et je reviendrai vers vous 😀 
JxSDev

JxSDev Le 29 avril 2016 à 20:41

Non, c'est pas a cause de ça >< j'ai carrément supprimer tout ce qui a un rapport avec la classe Session et toujours la meme chose
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte