Bonjour tout le monde,

j' essaie tant bien que mal à renvoyer un nouveau mot de passe via une adresse mail (en PHP), de ce fait j' ai crée une nouvelle colonne sur ma base de donnée ('n_mdp') pour que le nouveau mot de passe puisse s' ajouter à ma base de donnée.
Mais j' avoue que cela fait une semaine que je patauge parce qu' en fait rien ne marche.
j' ai donc créer un lien ''Mot de passe oublié", qui lorsque je clique dessus m' ouvre mon formulaire en popup, dont voici le code ci-contre :


Voici mon formulaire( une fenêtre popup qui s' ouvre)
<!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&eacute</title>
    </head>

    <body>
        <div>Mot de passe oubli&eacute</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>

            <button type="submit" name="oublie">Envoyer</button>
        </form>
    </body>
</html>



Jusqu' ici tout va bien, , ensuite jme suis aider d' un bon tuto sur le net afin de créer une page en PHP qui puisse me renvoyer un nouveau mot de passe via une adresse mail, biensûr cette dernière enregistrée dans une BDD.

Voici mon code ci contre

// nécessite une nouvelle colonne nouveau_mdp à la table utilisateurs
<?php
    session_start();

    include('connexion.php');
    include('FormulaireStagiaire.php');

    if (isset($_SESSION['id'])){
        header('Location: indexbis.php');
        exit;
    }

    if(!empty($_POST)){
        extract($_POST);
        $valid = true;

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

            $mail = htmlentities(strtolower(trim($mail))); // On récupère le mail afin d envoyer le mail pour la récupèration du mot de passe 

            
		



		//Si le mail est vide alors on ne traite pas
           

		 if(empty($mail)){
                $valid = false;
                $er_mail = "Il faut mettre un mail";
            }

            if($valid){

                $verification_mail = $DB->query("SELECT nom, prenom, mail, mdp 
                    FROM utilisateurs WHERE mail = ?",
                    array($mail));

                $verification_mail = $verification_mail->fetch();

                if(isset($verification_mail['mail'])){

                    if($verification_mail['n_mdp'] == 0){
                       
			
			 // On génère un mot de passe à l'aide de la fonction RAND de PHP
                        $new_pass = rand();

   

                        // Le mieux serait de générer un nombre aléatoire entre 7 et 10 caractères (Lettres et chiffres)
                        $new_pass_crypt = crypt($new_pass, "VOTRE CLÉ UNIQUE DE CRYPTAGE DU MOT DE PASSE");

                        $objet = 'Nouveau mot de passe';
                        $to = $verification_mail['mail'];



                        //===== Création du header du mail.
                        $header = "From: NOM_DE_LA_PERSONNE <no-reply@test.com> \n";
                        $header .= "Reply-To: ".$to."\n";
                        $header .= "MIME-version: 1.0\n";
                        $header .= "Content-type: text/html; charset=utf-8\n";
                        $header .= "Content-Transfer-Encoding: 8bit";




                        //===== Contenu de votre message
                        $contenu =  "<html>".
                            "<body>".
                            "<p style='text-align: center; font-size: 18px'><b>Bonjour Mr, Mme".$verification_mail['nom']."</b>,</p><br/>".
                            "<p style='text-align: justify'><i><b>Nouveau mot de passe : </b></i>".$new_pass."</p><br/>".
                            "</body>".
                            "</html>";



                        //===== Envoi du mail
                        mail($to, $objet, $contenu, $header);

                        $DB->insert("UPDATE utilisateurs SET mdp = ?, n_mdp = 1 WHERE mail = ?", 
                            array($new_pass_crypt, $verification_mail['mail']));
                    }   
                }       
                header('Location: indexbis.php');
                exit;
            }
        }
    }
?>


Je ne sais pas ce qui cloche ??
KK1 peut il m' aider SVP !!
Modifié par poussmouss (10 Aug 2018 - 11:38)
Déjà, est-ce qu'il a une erreur affichée sur ta page ? Peut-être serait-ce une erreur de variable inutilisée ou introuvable ?
Merci d' avoir répondu.
Il n' y a aucune erreur sur ma console,

$db->insert('blabla');


je ne t' ai pas compris, ce n' est pas la bonne syntaxe ?
Le but c' était de de renvoyer un nouveau mdp via une boite mail, mais rien n' y fait
Modifié par poussmouss (10 Aug 2018 - 11:36)
Il faudrait faire:

$req = $DB->prepare('UPDATE utilisateurs SET mdp = ?, n_mdp = 1 WHERE mail = ?');
$req->execute(array($new_pass_crypt, $verification_mail['mail']));

Modifié par Soldat8889 (10 Aug 2018 - 11:45)
Et aussi pour tes variables $_POST, tu as écrit

$mail;

à la place de:

$_POST['mail'];

Il ne faut pas confondre ces deux variables !!!!
je suis un novice excuse moi encore,
c-à-d pour récuperer le mail =

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


cela nécessite l' envoi ?
Modifié par poussmouss (10 Aug 2018 - 11:50)
Non il falait faire:

$mail = htmlentitites(strtolower(trim($_POST['mail']));

Apprends un peu plus les bases de PHP afin de te sentir plus à l'aise.
Oui je te remercie de tes conseils, c'est évident qu' il me manque beaucoup de choses a apprendre, je suis stagiaire avec 5 mois de formation en développeur logiciel.

Malgré tout ça le code ne marche pas, je pense plus au lien entre les fichiers.

C' est sympa d' avoir pris le temps.
ah oui ?
Pourtant j' ai suivi un tuto.
J' ai appliqué à la lettre ce qu' a fait le type sur la vidéo.

Pas grave j' ai encore de la route lol
Et merci du coup pour ton aide.
Tout dépend de la modélisation de ta base de donnée
Tu peux faire quelques choses de très simple comme rajouter un attribut "forgetPass" dans ta table Users par exemple.
Tu stock dans cette attribut un clé unique ! Et donc tu envoie dans l'email un lien avec par exemple comme url password.php?key=kDk47D41dstD587i&id=45

Qui vérifie si la clé est bien la bonne pour l'id "45" (Par exemple)

C'est la méthode la plus simple, à toi de voir comment améliorer
Modifié par Tony Monast (13 Aug 2018 - 16:29)
salut @samsam93,

merci d' avoir répondu.
qu' est ce que t' entends par clé unique ? tu veux dire que chaque /users/ doit avoir une clé identique et que seulement leur nom par exemple pourrait les différencier lors d' une requête ?
Re tt le monde ,

j' ai tout recommencé avec un code un peu moins compliqué pour moi

en fait mon but est d' envoyer un mot de passe (’mdp’) d' une table 'utilisateurs’ qui appartient à une BDD 'desert’. Dans un premier temps l' envoi de mail avec un message fonctionne à merveille. Mais mon maître de stage m' a demandé de récupérer le 'mdp' d' un utilisateur au cas où ce dernier l' aurait oublié. Donc si quelqu' un pourrait se pencher sur mon cas, ce serait très sympa de sa part.

Voici mon code =

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Mot de passe oubli&eacute</title>
    </head>
    <body>
        <h1>Mot de passe oubli&eacute</h1>
            <form method="post">
            <label>Email</label>
            <input type="email" name="email" required><br>
            <label>Message</label>
            <textarea name="message" required></textarea><br>
            <input type="submit">
        </form>
        



<?php

//connexion;

$userdb="phpmyadmin";
$passdb="*******";
$dbname="******";
$host="localhost";


try
{
    $bdd = new PDO('mysql:host='. $host .';dbname='. $dbname .';charset=utf8', $userdb, $passdb);
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}



//envoi d' un simple mail avec son message
        if(isset($_POST['message'])){
            $position_arobase=strpos($_POST['email'],'@');
            if($position_arobase===false)
                echo '<p>Votre email doit comporter un arobase.</p>';
            else {
                $retour=mail('*******@gmail.com','Envoi depuis *******', $_POST['message'], 'From : '.$_POST['mail']);
                if($retour)
                    echo '<p>Votre message a &eacutet&eacute envoy&eacute.</p>';
                else
                    echo '<p>Erreur.</p>';
            }
        }
        
  



//envoi du mdp par mail (sur quoi je bloque)

if(!empty($_POST['mail']))
$mail = $_POST['mail'];
else
exit("mail vide.");
 

$sql = "SELECT mail FROM utilisateurs WHERE mail = '".$mail."' ";
$req =mysql_query($sql) or die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
 
if(mysql_num_rows($req) != 1)//si le nombre de lignes retourne par la requete != 1
exit("mail inconnu.");
else
{
$row1 = mysql_fetch_assoc($req);
$retour = mysql_query("SELECT mdp FROM utilisateurs WHERE mail = '".$mail."' ");
$row2 = mysql_fetch_assoc($retour);

 
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$objet = 'Récupération de votre mot de passe';
 
if(!mail($row1['mail'], $objet, $row2['mdp'], $headers))
echo 'probleme lors de l\'envoi du mail';
else
echo 'mail envoye';
}


?>
    </body>
</html>

Modifié par poussmouss (21 Aug 2018 - 16:47)