PHP

Pas de mail avec le mot de passe oublie

Résolu

Bonjour !


Très bon tuto pour l'espace membre et donc à tous un très grand merci.

J'ai juste un souci en faisant des tests avec Wampserver, le nouveau mot de passe n'est pas envoyé sur mon adresse mail.

Est-ce normal car je suis en local?


Merci de votre aide !

1182 vues
20 février 2021 à 13:10 (Édité)
Cette pub permet au site de vivre ...

26 commentaires

Re flexi2202 :


Envoie moi ton fichier connexionBD.php stp

re Flomir


me revoici déjà


Merci encore une fois 

On avance doucement 


Enfin j'aperçois la fenêtre de connexion 

Ouf encore une étape 

Je rentre les identifiant


Et voilà une nouvelle erreur , on va finir par y arriver , ne serais ce pas du au fait que ma table se nome utilisateur


Fatal error: Uncaught Error: Call to undefined method connexionDB::prepare() in /storage/ssd4/760/16000760/public_html/espace-membre-site-0/connexion.php:37 Stack trace: #0 {main} thrown in /storage/ssd4/760/16000760/public_html/espace-membre-site-0/connexion.php on line 37


Je reposte mon code 😀


<?php
    session_start();


    include('bd/connexionDB.php'); // Fichier PHP contenant la connexion à votre BDD


  // S'il y a une session alors on ne retourne plus sur cette page  
    if (isset($_SESSION['id'])){
        header('Location: index.php');
        exit;
    }


    // Si la variable "$_Post" contient des informations alors on les traitres
    if(!empty($_POST)){
        extract($_POST);
        $valid = true;


        if (isset($_POST['connexion'])){


          


            if(empty($_POST['mail'])){ // Vérification qu'il y est bien un mail de renseigné
			
			
                $valid = false;
                $er_mail = "Il faut mettre un mail";
            }


            if(empty($_POST['mdp'])){ // Vérification qu'il y est bien un mot de passe de renseigné
                $valid = false;
                $er_mdp = "Il faut mettre un mot de passe";
            }


            // On fait une requête pour savoir si le couple mail / mot de passe existe bien car le mail est unique !
          
					
			
			$req=$DB->prepare('SELECT*FROM users WHERE mail = ?');
$req->execute($_POST['mail']);
$user = $req->fetch();
			
			


                header('Location:  index.php');
                exit;
            }   
        }
    
?>


<!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>Connexion</title>
    </head>


    <body>      
        <div>Se connecter</div>
        <form method="post">


            <?php
                if (isset($er_mail)){
            ?>
                <div><?= $er_mail ?></div>
            <?php   
                }
            ?>


            <input type="email" placeholder="Adresse mail" name="mail" value="<?php if(isset($mail)){ echo $mail; }?>" required>


            <?php
                if (isset($er_mdp)){
            ?>
                <div><?= $er_mdp ?></div>
            <?php   
                }
            ?>


            <input type="password" placeholder="Mot de passe" name="mdp" value="<?php if(isset($mdp)){ echo $mdp; }?>" required>


            <button type="submit" name="connexion">Se connecter</button>


        </form>
    </body>
</html>

Re @flexi2202 :


Non 😂

Faut pas faire ça 😂

Supprime les lignes :

$_POST['mail']


Il faut remplacer ta condition:

empty($mail))


Par:

empty($_POST['mail'])


Relis ma dernière réponse 👍

@Flomir








C'est super chouette de m'aider de cette façon enfin je vais avoir un espace membre opérationnel


J'ai surement dû faire une erreur quelque part 

En ajoutant ceci


// à utiliser dans tes conditions :)
$_POST['mail']
$_POST['mdp']



Voici le morceau de code ou j'ai effectué le changement 


 if (isset($_POST['connexion'])){

      $_POST['mail']
$_POST['mdp']

      if(empty($mail)){ // Vérification qu'il y est bien un mail de renseigné
        $valid = false;
        $er_mail = "Il faut mettre un mail";
      }

      if(empty($mdp)){ // Vérification qu'il y est bien un mot de passe de renseigné
        $valid = false;
        $er_mdp = "Il faut mettre un mot de passe";
      }

      // On fait une requête pour savoir si le couple mail / mot de passe existe bien car le mail est unique !
     
$req = $DB->prepare('SELECT * FROM users WHERE mail = ?');
$req->execute($_POST['mail']);
$user = $req->fetch();

        header('Location: index.php');
        exit;
      }


Re @flexi2202 !


C'est bon, j'ai terminé mon roman !


Bonne lecture 📖

@Flomir

Re @flexi2202 !


Je réédite constamment ma réponse, il y a quelques explications à clarifier ^^

Re @flexi2202 :


Change ça:

$req = $DB->query("SELECT * FROM utilisateur WHERE mail = ? AND mdp = ?",
        array($mail, crypt($mdp, "$6$rounds=5000$macleapersonnaliseretagardersecret$")));
$req = $req->fetch();

par ça:

$req = $DB->prepare('SELECT * FROM users WHERE mail = ?');
$req->execute($_POST['mail']);
$user = $req->fetch();


Et donc tu remplaceras ça:

// Si on a pas de résultat alors c'est qu'il n'y a pas d'utilisateur correspondant au couple mail / mot de passe
      if (!isset($req['id'])){
        $valid = false;
        $er_mail = "Le mail ou le mot de passe est incorrecte";
       
      }elseif($req['token'] <> NULL){ // Si le token est != de null alors le compte n'est pas validé
        $valid = false;
        $er_mail = "Veuillez confirmer votre compte";
      }

// && plus bas de ta page 
// Remplace tout les $req[''] par $user['']
 
$_SESSION['id'] = $req['id']; // id de l'utilisateur unique pour les requêtes futures
$_SESSION['nom'] = $req['nom'];
$_SESSION['prenom'] = $req['prenom'];
$_SESSION['mail'] = $req['mail'];

par ça:

// Si on a pas de résultat alors c'est qu'il n'y a pas d'utilisateur correspondant au couple mail / mot de passe
      if (!isset($user['id'])){
        $valid = false;
        $er_mail = "Le mail ou le mot de passe est incorrecte";
       
      }elseif($user['token'] <> NULL){ // Si le token est != de null alors le compte n'est pas validé
        $valid = false;
        $er_mail = "Veuillez confirmer votre compte";
      }

// && plus bas dans ton code 
// Remplace tout les $req[''] par $user['']

$_SESSION['id'] = $user['id']; // id de l'utilisateur unique pour les requêtes futures
$_SESSION['nom'] = $user['nom'];
$_SESSION['prenom'] = $user['prenom'];
$_SESSION['mail'] = $user['mail'];


Pour vérifier si le mot de passe est bon tu utiliseras cette condition:

if(password_verify($_POST['mdp'], $user->mdp)){
// Mot de passe bon
} elseif{
$valid = false;
$er_mail = "Le mot de passe est incorrecte";
// Mot de passe incorrect
}


Comme tout à l'heure tu supprimeras les trim et les htmlentities:

$mail = htmlentities(strtolower(trim($mail)));
$mdp = trim($mdp);

et tu les utiliseras dans les conditions:

// à utiliser dans tes conditions :)
$_POST['mail']
$_POST['mdp']


Bon courage,

@Flomir 😀

waouhhh

Super voilà l'inscription est ok , un grand merci

Une bonne chose ...

Honnêtement je ne comprends pas les mauvais commentaires reçus dans les vidéos de YouTube je trouve cela triste 


À présent l'inscription


Tu me disais de vérifier le mot de passe de cette façon 


password_verify($_POST['mdp'], *******)// ******* =>


Je dois l'indiquer ou dans le code 


Tant qu'à faire je présente le code de connexion aussi


<?php
    session_start();


    include('bd/connexionDB.php'); // Fichier PHP contenant la connexion à votre BDD


  // S'il y a une session alors on ne retourne plus sur cette page  
    if (isset($_SESSION['id'])){
        header('Location: index.php');
        exit;
    }


    // Si la variable "$_Post" contient des informations alors on les traitres
    if(!empty($_POST)){
        extract($_POST);
        $valid = true;


        if (isset($_POST['connexion'])){


            $mail = htmlentities(strtolower(trim($mail)));
            $mdp = trim($mdp);


            if(empty($mail)){ // Vérification qu'il y est bien un mail de renseigné
                $valid = false;
                $er_mail = "Il faut mettre un mail";
            }


            if(empty($mdp)){ // Vérification qu'il y est bien un mot de passe de renseigné
                $valid = false;
                $er_mdp = "Il faut mettre un mot de passe";
            }


            // On fait une requête pour savoir si le couple mail / mot de passe existe bien car le mail est unique !
            $req = $DB->query("SELECT * 
                FROM utilisateur 
                WHERE mail = ? AND mdp = ?",
                array($mail, crypt($mdp, "$6$rounds=5000$macleapersonnaliseretagardersecret$")));


            $req = $req->fetch();


            // Si on a pas de résultat alors c'est qu'il n'y a pas d'utilisateur correspondant au couple mail / mot de passe
            if (!isset($req['id'])){
                $valid = false;
                $er_mail = "Le mail ou le mot de passe est incorrecte";
            
            }elseif($req['token'] <> NULL){ // Si le token est != de null alors le compte n'est pas validé
                $valid = false;
                $er_mail = "Veuillez confirmer votre compte";
            }


            // S'il y a un résultat alors on va charger la SESSION de l'utilisateur en utilisateur les variables $_SESSION
            if ($valid){


                $_SESSION['id'] = $req['id']; // id de l'utilisateur unique pour les requêtes futures
                $_SESSION['nom'] = $req['nom'];
                $_SESSION['prenom'] = $req['prenom'];
                $_SESSION['mail'] = $req['mail'];


                header('Location:  index.php');
                exit;
            }   
        }
    }
?>


<!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>Connexion</title>
    </head>


    <body>      
        <div>Se connecter</div>
        <form method="post">


            <?php
                if (isset($er_mail)){
            ?>
                <div><?= $er_mail ?></div>
            <?php   
                }
            ?>


            <input type="email" placeholder="Adresse mail" name="mail" value="<?php if(isset($mail)){ echo $mail; }?>" required>


            <?php
                if (isset($er_mdp)){
            ?>
                <div><?= $er_mdp ?></div>
            <?php   
                }
            ?>


            <input type="password" placeholder="Mot de passe" name="mdp" value="<?php if(isset($mdp)){ echo $mdp; }?>" required>


            <button type="submit" name="connexion">Se connecter</button>


        </form>
    </body>
</html>

Re @flexi2202 !


Merci c'est gentil 😍


Ton code te dis qu'il y a une erreur dans cette ligne:

if(empty($_POST['mail']){

Et l'erreur en question est donc un oubli de parenthèse :

if(empty($_POST['mail'])){


Voilà 😆


re Flomir


Un tout grand merci 

Le site et les tutos sont super bien explique 

Et l'assistance est top

J'ai effectué les modifications

Mais j'ai encore une erreur d accolade

Parse error: syntax error, unexpected '{' in /storage/ssd4/760/16000760/public_html/espace-membre-site-0/inscription.php on line 35

Dans cette partie

je ne sais pas si j'ai bien fait le changement 


 // Vérification du mail
      if(empty($_POST['mail']){
        $valid = false;
        $er_mail = "Le mail ne peut pas être vide";

Cette pub permet au site de vivre ...
1
2
3