Problème dans mon header

Fermé
janyduchemin - 31 août 2021 à 22:25
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 - 8 sept. 2021 à 01:24
Bsr la communauté,
j'ai un fichier pour où l'on insert son e-mail pour recuperer son mot de passe. Cependant, j'ai une erreur qui s'affiche dans mon header, je ne sais pas si c'est dû au fait d'être en local ou alors c'est autre chose. Je vous laisse le code du fichier concerné
password_reset.php

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

<?php 
$titrepage="Mot de passe oublié || Ndameyong - L'Ecole des Langues Camerounaises" ;
require 'includes/header.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_prenom FROM users WHERE email = ?';
			$datas = array($recup_mail);
			$mailexist = $DB->tquery($sql,$datas); 
			$mailexist_count = count($mailexist);
	         if($mailexist_count == 1) {
	           	$user = $mailexist[0];
	            $nom_prenom = $user['nom_prenom'];
	            $_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 = ?';
	            $datas = array($recup_mail);
	            $datas = count($mailexist);	 
	            if($datas == 1) 
	            {
	               $sql = 'UPDATE recuperation SET code = ? WHERE email = ?';
	               $datas = 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 - www.ndameyong.com</title>
	           <meta charset="utf-8" />
	         </head>
	         <body>
	           <font color="#303030";>
	             <div align="center">
	               <table width="600px">
	                 <tr>
	                   <td>
	                     
	                     <div align="center">Bonjour <b>'.$nom_prenom.'</b>,</div>
	                     Voici votre code de récupération: <b>'.$recup_code.'</b>
	                     A bientôt sur <a href="#">www.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 - https://www.ndameyong.com", $message, $header);
	            header("Location:https://www.ndameyong.com/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 = $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:https://www.ndameyong.com/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:https://www.ndameyong.com/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";
	   }
	}
	?>

<div id="main">

	<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/>
<div id="moi">
	<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_password"/><br/>
	   <input type="submit" value="Valider" name="change_submit"/>
	</form>
	<?php } else { ?>
	<form method="post">

		
		   <input type="email" placeholder="Votre adresse mail" class="input-text" 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 ""; } ?>

</div>


</div>
	
<?php require 'includes/footer2.php'; 
?>

Merci!

7 réponses

jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
31 août 2021 à 22:36
Bonjour
Et c'est quoi le message d'erreur (accessoirement ça pourrait nous servir....)
0
janyduchemin
31 août 2021 à 22:46
Bsr,
voilà le message: Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\ndameyong\includes\header.php:9) in C:\wamp\www\ndameyong\password_reset.php on line 88
0
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
1 sept. 2021 à 07:48
Je m'en doutais..
Tu affiches du contenu dans la page lignes 8, 10, 14 ... Avant ton instruction header ..et ça ce n'est pas autorisé...
0
Bjr,
l'erreur a disparu mais étant en local j'espérais voir un code s’insérer dans ma bdd mais rien ne se passe.
voilà mon code
password_reset.php
<?php require 'includes/includes.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_prenom FROM users WHERE email = ?';
			$datas = array($recup_mail);
			$mailexist = $DB->tquery($sql,$datas); 
			$mailexist_count = count($mailexist);
	         if($mailexist_count == 1) {
	           	$user = $mailexist[0];
	            $nom_prenom = $user['nom_prenom'];
	            $_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 = ?';
	            $datas = array($recup_mail);
	            $datas = count($mailexist);	 
	            if($datas == 1) 
	            {
	               $sql = 'UPDATE recuperation SET code = ? WHERE email = ?';
	               $datas = 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 - Ndameyong.com</title>
	           <meta charset="utf-8" />
	         </head>
	         <body>
	           <font color="#303030";>
	             <div align="center">
	               <table width="600px">
	                 <tr>
	                   <td>
	                     
	                     <div align="center">Bonjour <b>'.$nom_prenom.'</b>,</div>
	                     Voici votre code de récupération: <b>'.$recup_code.'</b>
	                     A bientôt sur <a href="#">www.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 - https://www.ndameyong.com", $message, $header);
	            header("Location:http://localhost/ndameyong/password_reset.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 = $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://localhost/ndameyong/password_reset.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://localhost/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";
	   }
	}
	?>

<?php 
$titrepage="Mot de passe oublié || Ndameyong - L'Ecole des Langues Camerounaises" ;
require 'includes/header.php'; 
?>

<div id="main">
	<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/>
<div id="moi">
	<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_password"/><br/>
	   <input type="submit" value="Valider" name="change_submit"/>
	</form>
	<?php } else { ?>
	<form method="post">

		   <input type="email" placeholder="Votre adresse mail" class="input-text" 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 ""; } ?>

</div>

</div>
	
<?php require 'includes/footer.php'; ?>


Merci!
0
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
1 sept. 2021 à 13:58
Pour pouvoir voir les éventuelles erreurs, il faut désactiver les redirections (en les mettant en commentaire par exemple, le temps que tu finisses de corriger ton code)
0
Salut,
je viens de les désactiver les redirections, rien ne passe je passe que c'est parce que je suis en local, aucune erreur ne s'affiche, et quand j'insère une fausse adresse e-mail, je reçois une une alert donc je pense que ça devrait fonctionner en mettant le site en ligne.
Merci!
0
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
1 sept. 2021 à 17:12
Si on parle de ce bout de code
 if($datas == 1) 
	            {
	               $sql = 'UPDATE recuperation SET code = ? WHERE email = ?';
	               $datas = array($recup_code,$recup_mail);
	            } else {

Comment penses tu que ça fasse quoi que ce soit en bdd ... vu que tu n'exécutes pas la requête ?
0

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

Posez votre question
Bsr,
le code est conçu tel qu 'un utilisateur reçoive d'abord un code (des chiffres) qu'il va insérer dans un formulaire. si l'utilisateur rafraichit le lien qu'il recevra le code devra changer dans la bdd, voilç pourquoi il update. Après avoir insérer ce code dans un formulaire, il recevra un nouveau où il lui sera demander de changer son mot de passe
0
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
2 sept. 2021 à 08:06
Je ne te demande pas à quoi il sert... Je te dis qu'il manque des instructions php pour que ça marche...
0
janyduchemin > jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024
2 sept. 2021 à 22:45
Bsr,
j'ai crée une class
public function updateUser($nom_prenom,$email){
$data = array(
'nom_prenom'=>$nom_prenom,
'email'=>$email,
);
}
vu que je travaille avec des classes mais ça ne change rien du coup je vois pas de qu'elle requête vous faites allusion.
0
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649 > janyduchemin
2 sept. 2021 à 22:49
Pour executer une requête. en pdo ... tu sais.. les deux lignes ... prepare et execute...
Pour rappel :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
0
Salut,
le code de ma bdd (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);
      // Activation des erreurs PDO
      $this->connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
      $this->connexion->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } catch (PDOException $e) {
      die('Erreur : ' . $e->getMessage());
    }
  }

  private function dbQuery($sql,$data=NULL){
    try {
      $prep = $this->connexion->prepare($sql);
      $prep->execute($data);
       return $prep;
    } catch (Exception $e) {
      echo 'Erreur : ' . $e->getMessage();
      echo '<br> Dans la requête :' . $sql;
      echo '<br> Avec les DATAS :';
      var_dump($data);
      exit;
    }
  }
  /* 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->dbQuery($sql,$data); 
    return $req->fetchAll(PDO::FETCH_ASSOC);
  }

  public function insert($sql, $data = array()) {
    return $this->dbQuery($sql,$data); 
  }

  public function exec($sql, $data = array()) {
    try {
      $req = $this->dbQuery($sql,$data); 
      return $req->rowCount(); // Retourne le nombre de lignes impactées par la reuqête
    } catch (Exception $e) {
      echo 'Erreur : ' . $e->getMessage(); // en cas d'erreur dans la requête !
    }
  }

  public function deleteuser($id) {
    $sql = 'DELETE FROM users WHERE id=:id';
    $data = [':id' => $id];
    return $this->exec($sql, $data);
  }

  public function uniqueEmail($email) {
    $sql = 'SELECT count(*) as nbre from users WHERE email=:email limit 1';
    $data = array(':email' => $email);
    $req = $this->dbQuery($sql,$data); 
    $reponse = $req->fetch(PDO::FETCH_ASSOC);
    return !empty($reponse['nbre']) ? $reponse['nbre'] : 0;
  }

public function updateUser($nom_prenom,$email){
    $data = array(
            'nom_prenom'=>$nom_prenom,
            'email'=>$email,                       
        );
    $sql ='UPDATE recuperation SET confirme = 1 WHERE email = ?';
     return $this->dbQuery($sql,$data);         
  }
}

Je pense avoir activé les messages d'erreurs sauf si je me suis trompé
0
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
3 sept. 2021 à 06:46
Ol ca me semble bon.
Et donc a quoi ressemble le code de ta page maintenant que tu utilises cette class ?
0
Bsr,
Me revoilà après quelques jours de maladie...
Je beau regarder mais je comprends pas pourquoi je tourne en rond sur ce bout de code {
 if($datas == 1) 
	            {
	               $sql = 'UPDATE recuperation SET code = ? WHERE email = ?';
	               $datas = array($recup_code,$recup_mail);
	            } else {
)
j'ai essaye une J'ai même essayer une autre qui m'envoyait des erreurs..
0
jordane45 Messages postés 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
8 sept. 2021 à 01:24
Vois tu, dans les lignes de code que tu nous montres, l'instruction PDO qui permet d'exécuter la requête ???
(la réponse est non bien entendu... )
Tu en fais quoi de tes deux variables
$sql et $datas ??
0