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 ,
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
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)
<?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>
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 ;-).
merci le problème est résolu j'ai enlevé le le code de la ligne 20 ça marche
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é.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
N'oubliez pas d'activer les erreurs PDO.