Un souci avec mon code

Fermé
janyduchemin Messages postés 36 Date d'inscription mercredi 13 mars 2019 Statut Membre Dernière intervention 6 septembre 2023 - 22 oct. 2020 à 22:07
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 24 oct. 2020 à 14:45
Bsr la commaunté
soit la pages suivante:

<?php require 'includes/includes.php' ?>
<?php require 'includes/header2.php'; ?>

<!-- message de session -->
<?php if (isset($_SESSION['message'])): ?>
  <div class="message"> <?php echo $_SESSION['message']; ?></div>
  <?php unset($_SESSION['message']) ?>
<?php endif ?>
<?php if (isset($_SESSION['erreur'])): ?>
  <div class="errorMessage"> <?php echo $_SESSION['erreur']; ?></div>
  <?php unset($_SESSION['erreur']) ?>
<?php endif ?>

	<?php
	

	if(isset($Get['section'])){
		$section = htmlspecialchars($Get['section']);
	}else{
		$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,nom FROM users WHERE email = ?'); 
	         $mailexist->execute(array($recup_mail));
	         $mailexist_count = $mailexist->rowCount();
	         if($mailexist_count == 1) {
	            $nom = $mailexist->fetch();
	            $nom = $nom['nom'];
	            
	            $_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 recuperation WHERE email = ?');
	            $mail_recup_exist->execute(array($recup_mail));
	            $mail_recup_exist = $mail_recup_exist->rowCount();
	            if($mail_recup_exist == 1) {
	               $recup_insert = $bdd->prepare('UPDATE recuperation SET code = ? WHERE email = ?');
	               $recup_insert->execute(array($recup_code,$recup_mail));
	            } else {
	               $recup_insert = $bdd->prepare('INSERT INTO recuperation(email,code) VALUES (?, ?)');
	               $recup_insert->execute(array($recup_mail,$recup_code));
	            }
	            $header="MIME-Version: 1.0\r\n";
	         $header.='From:"[VOUS]"<votremail@mail.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 - Votresite</title>
	           <meta charset="utf-8" />
	         </head>
	         <body>
	           <font color="#303030";>
	             <div align="center">
	               <table width="600px">
	                 <tr> 
	                   <td>
	                     
	                     <div align="center">Bonjour <b>'.$nom.'</b>,</div>
	                     Voici votre code de récupération: <b>'.$recup_code.'</b>
	                     A bientôt sur <a href="http://www.ndameyong.com">Ndameyong.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 - Votresite", $message, $header);
	            header("Location:http://127.0.0.1/ndameyong/recuperation.php?section=code");
	         } else {
	            $error = "Cette adresse mail n'est pas enregistrée";
	         }
	      } else {
	         $error = "Adresse mail invalide";
	      }
	   } else {
	      $error = "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 recuperation WHERE email = ? 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 recuperation SET confirme = 1 WHERE email = ?');
	         $up_req->execute(array($_SESSION['recup_mail']));
	         header('Location:http://127.0.0.1/ndameyong /recuperation.php?section=changemdp');
	      } else {
	         $error = "Code invalide";
	      }
	   } else {
	      $error = "Veuillez entrer votre code de confirmation";
	   }
	}
	if(isset($_POST['change_submit'])) {
	   if(isset($_POST['change_password'],$_POST['change_passwordc'])) {
	      $verif_confirme = $bdd->prepare('SELECT confirme FROM recuperation WHERE email = ?');
	      $verif_confirme->execute(array($_SESSION['recup_mail']));
	      $verif_confirme = $verif_confirme->fetch();
	      $verif_confirme = $verif_confirme['confirme'];
	      if($verif_confirme == 1) {
	          $password = htmlspecialchars($_POST['change_password']);
	         $passwordc = htmlspecialchars($_POST['change_passwordc']);
	          if(!empty($password) AND !empty($passwordc)) {
	            if($password == $passwordc) {
	               $password = sha1($password);
	               $ins_password = $bdd->prepare('UPDATE users SET password = ? WHERE email = ?');
	               $ins_password->execute(array($password,$_SESSION['recup_mail']));
	              $del_req = $bdd->prepare('DELETE FROM recuperation WHERE email = ?');
	              $del_req->execute(array($_SESSION['recup_mail']));
	               header('Location:http://127.0.0.1/ndameyong/login/');
	            } 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";
	   }
	}
	?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Mot de passe oublié</title>
    </head>
    <body>



	<h4 class="title-element">Récupération de mot de passe</h4>
	<?php if($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"/>
	</form>

	<?php } elseif($section == "changepassword") { ?>
	Nouveau mot de passe pour <?= $_SESSION['recup_mail'] ?>
	<form method="post">
	   <input type="password" placeholder="Nouveau mot de passe" name="change_password"/><br/>
	   <input type="password" placeholder="Confirmation du mot de passe" name="change_passwordc"/><br/>
	   <input type="submit" value="Valider" name="change_submit"/>
	</form>
	<?php } else { ?>
	<form method="post">
	   <input type="email" placeholder="Votre adresse mail" name="recup_mail"/><br/>
	   <input type="submit" value="Valider" name="recup_submit"/>
	</form>
	<?php } ?>
	<?php if(isset($error)) { echo '<span style="color:red">'.$error.'</span>'; } else { echo ""; } ?>

	</body>
</html>


Mon problème
j'essaye de faire fonctionner ce code (mot de passe oublie) tout est clair quand je lance le site (je suis en local). Mais j'ai trois erreurs php
1) Notice: Undefined variable: bdd in C:\wamp\www\ndameyong\recuperation.php on line 27
2) Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\wamp\www\ndameyong\recuperation.php on line 27
3) Error: Call to a member function prepare() on null in C:\wamp\www\ndameyong\recuperation.php on line 27

j'ai beau regardé je ne vois ma bdd fonctionne bien
comment corriger ces erreurs. Merci d'avance
A voir également:

3 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
22 oct. 2020 à 22:33
Bonjour,

Les trois messages sont liés...

Visiblement, tu n'as pas inclus le code de connexion à ta bdd....

Je t'invite à activer l'affichage des erreurs PHP ( et de suivre les conseils donnés ici : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code )

Et, au passage, d'appliquer également ce qui est marqué là :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

Reviens nous voir avec ton code modifié si tes soucis persistent.




0
Bonjour monsieur Jordan,
merci pour ce que vous faites pour les débutants que nous sommes
suite à votre apport d'hier j'ai résolu une partie de mon problème lié à la variable de attribué à la base de donné ($DB et non $BDD comme j'avais écris). le problème perdure au même niveau ligne 27 (recuperation.php) ma connection se trouve dans le fichier (include.php) qui contient les fichiers suuivants:
<?php 
require 'config.php'; 
require_once 'Classes/Db.php';
require_once 'Classes/auth.php';
$DB = new Db();

// cacher les erreurs pour la production
ini_set('error_reporting',E_ALL);
// afficher les érreurs lors du developpement 
//ini_set('error_reporting', E_ALL);
 ?>

je vous envoi le code de la bdd (Db.php) et celui de (recuperation.php) entre temps je continu la lecture sur les cours que j'ai reçu hier de vous.

page Db.php
<?php 

/**


* Gestion de la base de données*/
class Db{  
private $host=HOST; private $name=DBNAME; private $user=USER; private $pass=PWD; private $connexion; 
function __construct($host=null,$name=null,$user=null,$pass=null){   
 if($host != null){   
$this->host = $host;   $this->name = $name;   $this->user = $user;   $this->pass = $pass;
  }  
try{   
$this->connexion = new PDO('mysql:host='.$this->host.';dbname='.$this->name,    $this->user,$this->pass,array(     1002 =>'SET NAMES UTF8',     PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING     ));   
$this->connexion->exec('SET NAMES utf8');
//PDO::MYSQL_ATTR_INIT_COMMAND 
  }catch (PDOException $e){  
 //echo 'Erreur : Impossible de se connecter  à la BD !';
die();   echo $e->getMessage(); 
 } 
} 
/* requete */ 
public function query($sql , $data=array()){  
$req = $this->connexion->prepare($sql); 
 $req->execute($data);  
return $req->fetchAll(PDO::FETCH_OBJ);  
}

 public function tquery(
$sql , $data=array()){  
$req = $this->connexion->prepare($sql);  
$req->execute($data);  
return $req->fetchAll(PDO::FETCH_ASSOC);  
}
 public function insert($sql , $data=array()){  
$req = $this->connexion->prepare($sql);  
$nb=$req->execute($data);  return $nb; 
} 

public function uniqueEmail($email){ 
 $req = $this->connexion->prepare('SELECT count(*) as nbre from users WHERE email=:email limit 1'); 
 $req->execute(array('email'=>$email));  $reponse = $req->fetchAll(PDO::FETCH_ASSOC);  return $reponse[0]['nbre']; 
}

}


(recuperation.php)


 <?php require 'includes/includes.php' ?>
<?php require 'includes/header2.php'; ?>

<!-- message de session -->
<?php if (isset($_SESSION['message'])): ?>
  <div class="message"> <?php echo $_SESSION['message']; ?></div>
  <?php unset($_SESSION['message']) ?>
<?php endif ?>
<?php if (isset($_SESSION['erreur'])): ?>
  <div class="errorMessage"> <?php echo $_SESSION['erreur']; ?></div>
  <?php unset($_SESSION['erreur']) ?>
<?php endif ?>

 <?php
 

 if(isset($Get['section'])){
  $section = htmlspecialchars($Get['section']);
 }else{
  $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 = $DB->prepare('SELECT id,nom FROM users WHERE email = ?'); 
          $mailexist->execute(array($recup_mail));
          $mailexist_count = $mailexist->rowCount();
          if($mailexist_count == 1) {
             $nom = $mailexist->fetch();
             $nom = $nom['nom'];
             
             $_SESSION['recup_mail'] = $recup_mail;
             $recup_code = "";
             for($i=0; $i < 8; $i++) { 
                $recup_code .= mt_rand(0,9);
             }
             $mail_recup_exist = $DB->prepare('SELECT id FROM recuperation WHERE email = ?');
             $mail_recup_exist->execute(array($recup_mail));
             $mail_recup_exist = $mail_recup_exist->rowCount();
             if($mail_recup_exist == 1) {
                $recup_insert = $DB->prepare('UPDATE recuperation SET code = ? WHERE email = ?');
                $recup_insert->execute(array($recup_code,$recup_mail));
             } else {
                $recup_insert = $DB->prepare('INSERT INTO recuperation(email,code) VALUES (?, ?)');
                $recup_insert->execute(array($recup_mail,$recup_code));
             }
             $header="MIME-Version: 1.0\r\n";
          $header.='From:"[VOUS]"<***@***>'."\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 - Votresite</title>
            <meta charset="utf-8" />
          </head>
          <body>
            <font color="#303030";>
              <div align="center">
                <table width="600px">
                  <tr> 
                    <td>
                      
                      <div align="center">Bonjour <b>'.$nom.'</b>,</div>
                      Voici votre code de récupération: <b>'.$recup_code.'</b>
                      A bientôt sur <a href="http://www.ndameyong.com">Ndameyong.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 - Votresite", $message, $header);
             header("Location:http://127.0.0.1/ndameyong/recuperation.php?section=code%26%2334%3B%29
          } else {
             $error = "Cette adresse mail n'est pas enregistrée";
          }
       } else {
          $error = "Adresse mail invalide";
       }
    } else {
       $error = "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 = $DB->prepare('SELECT id FROM recuperation WHERE email = ? AND code = ?');
       $verif_req->execute(array($_SESSION['recup_mail'],$verif_code));
       $verif_req = $verif_req->rowCount();
       if($verif_req == 1) {
          $up_req = $DB->prepare('UPDATE recuperation SET confirme = 1 WHERE email = ?');
          $up_req->execute(array($_SESSION['recup_mail']));
          header('Location:http://127.0.0.1/ndameyong /recuperation.php?section=changemdp');
       } else {
          $error = "Code invalide";
       }
    } else {
       $error = "Veuillez entrer votre code de confirmation";
    }
 }
 if(isset($_POST['change_submit'])) {
    if(isset($_POST['change_password'],$_POST['change_passwordc'])) {
       $verif_confirme = $DB->prepare('SELECT confirme FROM recuperation WHERE email = ?');
       $verif_confirme->execute(array($_SESSION['recup_mail']));
       $verif_confirme = $verif_confirme->fetch();
       $verif_confirme = $verif_confirme['confirme'];
       if($verif_confirme == 1) {
           $password = htmlspecialchars($_POST['change_password']);
          $passwordc = htmlspecialchars($_POST['change_passwordc']);
           if(!empty($password) AND !empty($passwordc)) {
             if($password == $passwordc) {
                $password = sha1($password);
                $ins_password = $DB->prepare('UPDATE users SET password = ? WHERE email = ?');
                $ins_password->execute(array($password,$_SESSION['recup_mail']));
               $del_req = $DB->prepare('DELETE FROM recuperation WHERE email = ?');
               $del_req->execute(array($_SESSION['recup_mail']));
                header('Location:http://127.0.0.1/ndameyong/login/')
             } 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";
    }
 }
 ?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Mot de passe oublié</title>
    </head>
    <body>



 <h4 class="title-element">Récupération de mot de passe</h4>
 <?php if($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"/>
 </form>

 <?php } elseif($section == "changepassword") { ?>
 Nouveau mot de passe pour <?= $_SESSION['recup_mail'] ?>
 <form method="post">
    <input type="password" placeholder="Nouveau mot de passe" name="change_password"/><br/>
    <input type="password" placeholder="Confirmation du mot de passe" name="change_passwordc"/><br/>
    <input type="submit" value="Valider" name="change_submit"/>
 </form>
 <?php } else { ?>
 <form method="post">
    <input type="email" placeholder="Votre adresse mail" name="recup_mail"/><br/>
    <input type="submit" value="Valider" name="recup_submit"/>
 </form>
 <?php } ?>
 <?php if(isset($error)) { echo '<span style="color:red">'.$error.'</span>'; } else { echo ""; } ?>

 </body>
</html>


je voudrai ajouter la section mot de passe oublié à mon site qui fonctionne très bien en local
merci encore
*

EDIT : Correction des balises de code
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
23 oct. 2020 à 14:21
$DB est une instance de ta class ..
elle ne contient pas de méthode prépare ou exec ...

Pour exécuter tes requêtes, tu dois utiliser les methodes de ta class db

par exemple, au lieu d'écrire
$mailexist = $DB->prepare('SELECT id,nom FROM users WHERE email = ?'); 
$mailexist->execute(array($recup_mail));
$mailexist_count = $mailexist->rowCount();

il faut écrire
$sql = 'SELECT id,nom FROM users WHERE email = ?';
$datas = array($recup_mail);
$mailexist = $DB->tquery($sql,$datas); 
 $mailexist_count = count($mailexist);


Au passage, pour les fonctions de ta class db, je t'invite à regarder cet exemple.
Il gère les différents types de requêtes
https://github.com/jordane45/pdo-mysql
0
Janyduchemin > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
Modifié le 23 oct. 2020 à 22:55
Bsr monsieur jordan,
J'ai suivi vos instructions et ça marche mais je comprend pas pourquoi j'ai toujour un
Fatal error....Call to a member fonction fetch on array in c...recuperation.php line 32

Le corde source de (recuperation.php) reste le meme sí non j'ai fait les changements que vous avez apporté...

Recuperation.php (modifie)

<?php require 'includes/includes.php' ?>
<?php require 'includes/header2.php'; ?>

<!-- message de session -->
<?php if (isset($_SESSION['message'])): ?>
  <div class="message"> <?php echo $_SESSION['message']; ?></div>
  <?php unset($_SESSION['message']) ?>
<?php endif ?>
<?php if (isset($_SESSION['erreur'])): ?>
  <div class="errorMessage"> <?php echo $_SESSION['erreur']; ?></div>
  <?php unset($_SESSION['erreur']) ?>
<?php endif ?>

 <?php
 

 if(isset($Get['section'])){
  $section = htmlspecialchars($Get['section']);
 }else{
  $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)) {
   $sql = 'SELECT id,nom FROM users WHERE email = ?';
   $datas = array($recup_mail);
   $mailexist = $DB->tquery($sql,$datas); 
   $mailexist_count = count($mailexist);
          if($mailexist_count == 1) {           
             $nom = $mailexist->fetch();
             $nom = $nom['nom'];
             $_SESSION['recup_mail'] = $recup_mail;
             $recup_code = "";
             for($i=0; $i < 8; $i++) { 
                $recup_code .= mt_rand(0,9);
             }
             $mail_recup_exist = $DB->prepare('SELECT id FROM recuperation WHERE email = ?');
             $mail_recup_exist->execute(array($recup_mail));
             $mail_recup_exist = $mail_recup_exist->rowCount();
             if($mail_recup_exist == 1) {
                $recup_insert = $DB->prepare('UPDATE recuperation SET code = ? WHERE email = ?');
                $recup_insert->execute(array($recup_code,$recup_mail));
             } else {
                $recup_insert = $DB->prepare('INSERT INTO recuperation(email,code) VALUES (?, ?)');
                $recup_insert->execute(array($recup_mail,$recup_code));
             }
             $header="MIME-Version: 1.0\r\n";
          $header.='From:"[VOUS]"<***@***>'."\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 - Votresite</title>
            <meta charset="utf-8" />
          </head>
          <body>
            <font color="#303030";>
              <div align="center">
                <table width="600px">
                  <tr> 
                    <td>
                      
                      <div align="center">Bonjour <b>'.$nom.'</b>,</div>
                      Voici votre code de récupération: <b>'.$recup_code.'</b>
                      A bientôt sur <a href="http://www.ndameyong.com">Ndameyong.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 - Votresite", $message, $header);
             header("Location:http://127.0.0.1/ndameyong/recuperation.php?section=code%26%2334%3B%29
          } else {
             $error = "Cette adresse mail n'est pas enregistrée";
          }
       } else {
          $error = "Adresse mail invalide";
       }
    } else {
       $error = "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 = $DB->prepare('SELECT id FROM recuperation WHERE email = ? AND code = ?');
       $verif_req->execute(array($_SESSION['recup_mail'],$verif_code));
       $verif_req = $verif_req->rowCount();
       if($verif_req == 1) {
          $up_req = $DB->prepare('UPDATE recuperation SET confirme = 1 WHERE email = ?');
          $up_req->execute(array($_SESSION['recup_mail']));
          header('Location:http://127.0.0.1/ndameyong /recuperation.php?section=changepassword');
       } else {
          $error = "Code invalide";
       }
    } else {
       $error = "Veuillez entrer votre code de confirmation";
    }
 }
 if(isset($_POST['change_submit'])) {
    if(isset($_POST['change_password'],$_POST['change_passwordc'])) {
       $verif_confirme = $DB->prepare('SELECT confirme FROM recuperation WHERE email = ?');
       $verif_confirme->execute(array($_SESSION['recup_mail']));
       $verif_confirme = $verif_confirme->fetch();
       $verif_confirme = $verif_confirme['confirme'];
       if($verif_confirme == 1) {
           $password = htmlspecialchars($_POST['change_password']);
          $passwordc = htmlspecialchars($_POST['change_passwordc']);
           if(!empty($password) AND !empty($passwordc)) {
             if($password == $passwordc) {
                $password = sha1($password);
                $ins_password = $DB->prepare('UPDATE users SET password = ? WHERE email = ?');
                $ins_password->execute(array($password,$_SESSION['recup_mail']));
               $del_req = $DB->prepare('DELETE FROM recuperation WHERE email = ?');
               $del_req->execute(array($_SESSION['recup_mail']));
                header('Location:http://127.0.0.1/ndameyong/login/')
             } 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";
    }
 }
 ?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Mot de passe oublié</title>
    </head>
    <body>



 <h4 class="title-element">Récupération de mot de passe</h4>
 <?php if($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"/>
 </form>

 <?php } elseif($section == "changepassword") { ?>
 Nouveau mot de passe pour <?= $_SESSION['recup_mail'] ?>
 <form method="post">
    <input type="password" placeholder="Nouveau mot de passe" name="change_password"/><br/>
    <input type="password" placeholder="Confirmation du mot de passe" name="change_passwordc"/><br/>
    <input type="submit" value="Valider" name="change_submit"/>
 </form>
 <?php } else { ?>
 <form method="post">
    <input type="email" placeholder="Votre adresse mail" name="recup_mail"/><br/>
    <input type="submit" value="Valider" name="recup_submit"/>
 </form>
 <?php } ?>
 <?php if(isset($error)) { echo '<span style="color:red">'.$error.'</span>'; } else { echo ""; } ?>

 </body>
</html>

EDIT : Correction des balises de code ( ENCORE !!!! )

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > Janyduchemin
23 oct. 2020 à 22:59
Déjà, as tu remarqué que j'ai édité tes messages ? J'y ai corrigé les balises de code pour y spécifier le langage.....
Merci de lire ceci avant de poster tes prochains messages :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code


Ensuite, si tu regardes ce que retourne la fonction tquery de ta class, tu verras qu'elle fais déjà un fetch (elle retourne donc un array )
return $req->fetchAll(PDO::FETCH_ASSOC); 

Donc, dans la suite de ton code, tu ne dois pas refaire de fetch...

Il faut modifier ton code actuel
7
 $nom = $mailexist->fetch();
 $nom = $nom['nom'];

par
 $user = $mailexist[0];
  $nom = $user['nom'];
0
Bonjour monsieur jordan,
Une fois de plus je reviens vers vous car après avoir rectifié le code de recuperation.php comme vous l'avez suggeré, le problems s'étend sur toutes les lignes où l'on devra se connecte dans la bdd pour des operations...j'avoue j'ai suivi une formation accelerée qui m'a permi de monter mon site...un ami m'a donc donner le code de recuperation.php afin d'ajouter la section mot de passe oublié dans mon site...du coup faire ce changement brusque d'écriture n'est pas mon fort je suis novice en PHP et jne Peux tout maitriser d'un seul coup....je demande une fois de plus votre aide (à partir de la ligne 35)

Le code de recuperation.php après votre dernière intervention

<?php require 'includes/includes.php' ?>
<?php require 'includes/header2.php'; ?>

<!-- message de session -->
<?php if (isset($_SESSION['message'])): ?>
  <div class="message"> <?php echo $_SESSION['message']; ?></div>
  <?php unset($_SESSION['message']) ?>
<?php endif ?>
<?php if (isset($_SESSION['erreur'])): ?>
  <div class="errorMessage"> <?php echo $_SESSION['erreur']; ?></div>
  <?php unset($_SESSION['erreur']) ?>
<?php endif ?>

 <?php
 

 if(isset($Get['section'])){
  $section = htmlspecialchars($Get['section']);
 }else{
  $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)) {
   
   $sql = 'SELECT id,nom FROM users WHERE email = ?';
   $datas = array($recup_mail);
   $mailexist = $DB->tquery($sql,$datas); 
   $mailexist_count = count($mailexist);
         
          if($mailexist_count == 1) {

             $user = $mailexist->fetch[0];
             $nom = $user['nom'];

             $_SESSION['recup_mail'] = $recup_mail;
             $recup_code = "";
             for($i=0; $i < 8; $i++) { 
                $recup_code .= mt_rand(0,9);
             }
             $sql = 'SELECT id FROM recuperation WHERE email = ?';
             $mail_recup_exist->execute(array($recup_mail));
             $mail_recup_exist = $mail_recup_exist->rowCount();
             if($mail_recup_exist == 1) {
                $recup_insert = $DB->prepare('UPDATE recuperation SET code = ? WHERE email = ?');
                $recup_insert->execute(array($recup_code,$recup_mail));
             } else {
                $recup_insert = $DB->prepare('INSERT INTO recuperation(email,code) VALUES (?, ?)');
                $recup_insert->execute(array($recup_mail,$recup_code));
             }
             $header="MIME-Version: 1.0\r\n";
          $header.='From:"[VOUS]"<***@***>'."\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 - Votresite</title>
            <meta charset="utf-8" />
          </head>
          <body>
            <font color="#303030";>
              <div align="center">
                <table width="600px">
                  <tr> 
                    <td>
                      
                      <div align="center">Bonjour <b>'.$nom.'</b>,</div>
                      Voici votre code de récupération: <b>'.$recup_code.'</b>
                      A bientôt sur <a href="http://www.ndameyong.com">Ndameyong.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 - Votresite", $message, $header);
             header("Location:http://127.0.0.1/ndameyong/recuperation.php?section=code%26%2334%3B%29
          } else {
             $error = "Cette adresse mail n'est pas enregistrée";
          }
       } else {
          $error = "Adresse mail invalide";
       }
    } else {
       $error = "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 = $DB->prepare('SELECT id FROM recuperation WHERE email = ? AND code = ?');
       $verif_req->execute(array($_SESSION['recup_mail'],$verif_code));
       $verif_req = $verif_req->rowCount();
       if($verif_req == 1) {
          $up_req = $DB->prepare('UPDATE recuperation SET confirme = 1 WHERE email = ?');
          $up_req->execute(array($_SESSION['recup_mail']));
          header('Location:http://127.0.0.1/ndameyong /recuperation.php?section=changepassword');
       } else {
          $error = "Code invalide";
       }
    } else {
       $error = "Veuillez entrer votre code de confirmation";
    }
 }
 if(isset($_POST['change_submit'])) {
    if(isset($_POST['change_password'],$_POST['change_passwordc'])) {
       $verif_confirme = $DB->prepare('SELECT confirme FROM recuperation WHERE email = ?');
       $verif_confirme->execute(array($_SESSION['recup_mail']));
       $verif_confirme = $verif_confirme->fetch();
       $verif_confirme = $verif_confirme['confirme'];
       if($verif_confirme == 1) {
           $password = htmlspecialchars($_POST['change_password']);
          $passwordc = htmlspecialchars($_POST['change_passwordc']);
           if(!empty($password) AND !empty($passwordc)) {
             if($password == $passwordc) {
                $password = sha1($password);
                $ins_password = $DB->prepare('UPDATE users SET password = ? WHERE email = ?');
                $ins_password->execute(array($password,$_SESSION['recup_mail']));
               $del_req = $DB->prepare('DELETE FROM recuperation WHERE email = ?');
               $del_req->execute(array($_SESSION['recup_mail']));
                header('Location:http://127.0.0.1/ndameyong/login/')
             } 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";
    }
 }
 ?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Mot de passe oublié</title>
    </head>
    <body>



 <h4 class="title-element">Récupération de mot de passe</h4>
 <?php if($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"/>
 </form>

 <?php } elseif($section == "changepassword") { ?>
 Nouveau mot de passe pour <?= $_SESSION['recup_mail'] ?>
 <form method="post">
    <input type="password" placeholder="Nouveau mot de passe" name="change_password"/><br/>
    <input type="password" placeholder="Confirmation du mot de passe" name="change_passwordc"/><br/>
    <input type="submit" value="Valider" name="change_submit"/>
 </form>
 <?php } else { ?>
 <form method="post">
    <input type="email" placeholder="Votre adresse mail" name="recup_mail"/><br/>
    <input type="submit" value="Valider" name="recup_submit"/>
 </form>
 <?php } ?>
 <?php if(isset($error)) { echo '<span style="color:red">'.$error.'</span>'; } else { echo ""; } ?>

 </body>
</html>

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
24 oct. 2020 à 14:45

ce changement brusque d'écriture n'est pas mon fort j

Il n'y a aucun changement de ma part .. je ne fais qu'utiliser le code que tu nous as fourni ...

pour ce qui est de la ligne 35 ... je t'ai déjà donné la réponse dans mon message précédent...

Pour tes lignes 44,45,46,47 .. il te suffit de faire la même chose que la correction que je t'ai donné pour tes lignes 29 à 32
0