mot de passe perdu sur espace membre

Par flexi2202, il y a 5 ans


je teste un code trouve sur le web pour la récupération d'un mot de passe, lorsque l'utilisateur a perdu le sien sur son espace membre
donc il ouvre
mot-de-passe-oublie.php
rentre son adresse mail et devrait recevoir un mail avec un lien pour la réinitialisation
Sauf que la il ne le recois pas

merci de l aide

Ce que je fais

le code que j ai trouve

<?php /************************* * Page: mot-de-passe-oublie.php * Page encodée en UTF-8 **************************/ //configuration pour la connexion SQL: $SQL['host']="localhost";//serveur $SQL['user']="root";//nom d'utilisateur $SQL['pass']="";//pass $SQL['base']="nom_de_la_base_de_donnees";//nom de la base de données ?><!DOCTYPE HTML> <html> <head> <title>Script espace membre</title> </head> <body> <h1>Récupération du mot de passe</h1> <a href="./">Retour à l'accueil</a> <?php if(isset($_GET['code'],$_GET['mail'])){ //un lien est cliqué dans un mail, on recherche si le code et le mail correspondent à une ligne dans la table "recup_mdp" $Code=htmlentities($_GET['code'],ENT_QUOTES,"UTF-8"); $Mail=htmlentities($_GET['mail'],ENT_QUOTES,"UTF-8"); $mysqli=mysqli_connect($SQL['host'],$SQL['user'],$SQL['pass'],$SQL['base']); if(!$mysqli) { echo "Erreur connexion BDD"; //Dans ce script, je pars du principe que les erreurs ne sont pas affichées sur le site, vous pouvez donc voir qu'elle erreur est survenue avec mysqli_connect_error(), pour cela décommentez la ligne suivante: //echo "<br>Erreur retournée: ".mysqli_connect_error(); } else { $req=mysqli_query($mysqli,"SELECT * FROM recup_mdp WHERE code='$Code' AND mail='$Mail'"); if(mysqli_num_rows($req)==1){ //on génère un nouveau pass (de 5 caractères) et on lui envoi: $NouveauPass=substr(str_shuffle("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"),0,5); //on modifie son mot de passe pour son compte mysqli_query($mysqli,"UPDATE membres SET mdp='".md5($NouveauPass)."' WHERE mail='$Mail'"); //on ui envoi un mail avec son pass temporaire: mail($Mail,"Votre nouveau mot de passe","Le nouveau mot de passe pour votre compte est: $NouveauPass (Il est vivement conseille de le modifier depuis votre espace membre)"); //on supprime la demande mot de passe qui est dans la table "recup_mdp": mysqli_query($mysqli,"DELETE FROM recup_mdp WHERE code='$Code' AND mail='$Mail'"); echo "Votre nouveau pass temporaire vient d'être envoyé par mail."; } else { echo "Lien incorrect."; } } } else { //si le formulaire est envoyé ("envoyé" signifie que le bouton submit est cliqué) if(isset($_POST['valider'])){ //vérifie si le champ mail est bien rempli: if(empty($_POST['mail'])){ echo "Le champs mail n'est pas renseigné."; } else { //tous les champs sont précisés, on regarde si le membre est inscrit dans la bdd: //d'abord il faut créer une connexion à la base de données dans laquelle on souhaite regarder: $mysqli=mysqli_connect($SQL['host'],$SQL['user'],$SQL['pass'],$SQL['base']); if(!$mysqli) { echo "Erreur connexion BDD"; //Dans ce script, je pars du principe que les erreurs ne sont pas affichées sur le site, vous pouvez donc voir qu'elle erreur est survenue avec mysqli_error(), pour cela décommentez la ligne suivante: //echo "<br>Erreur retournée: ".mysqli_error($mysqli); } else { //on défini nos variables: $Mail=htmlentities($_POST['mail'],ENT_QUOTES,"UTF-8");//htmlentities avec ENT_QUOTES permet de sécuriser la requête pour éviter les injections SQL, UTF-8 pour dire de convertir en ce format $req=mysqli_query($mysqli,"SELECT * FROM membres WHERE mail='$Mail'"); //on regarde si le membre est inscrit dans la bdd: //même si le membre n'existe pas, on affiche qu'un mail à été envoyé, ceci permet d'empécher les robots de voir si un mail existe ou pas dans votre base de données et de vous le dérober if(mysqli_num_rows($req)!=1){ //mail inconnu } else { //mail connu, on lance la procédure d'envoi du mail pour recevoir un nouveau mdp $Code=md5(rand(1,99999999)); mysqli_query($mysqli,"INSERT INTO recup_mdp SET code='$Code', mail='$Mail'"); $Lien=$_SERVER['HTTP_HOST']."/mot-de-passe-oublie.php?code=$Code&mail=$Mail"; mail($Mail,"Recuperation du mot de passe","Pour recevoir un nouveau mot de passe cliquez sur le lien suivant: $Lien"); } echo "<p>Si votre mail est inscrit, vous allez recevoir un mail contenant un lien à cliquer afin de recevoir un nouveau mot de passe.</p>"; $TraitementFini=true;//pour cacher le formulaire } } } if(!isset($TraitementFini)){//quand le membre sera connecté, on définira cette variable afin de cacher le formulaire ?> <br> <p>Remplissez le formulaire ci-dessous pour recevoir un nouveau mot de passe:</p> <form method="post" action="mot-de-passe-oublie.php"> <input type="text" name="mail" placeholder="Votre mail..." required><!-- required permet d'empêcher l'envoi du formulaire si le champ est vide --> <input type="submit" name="valider" value="Recevoir un nouveau mot de passe"> </form> <?php } } ?> </body> </html>

Ce que je veux

je souhaiterais recevoir l email pour le changement de mot de passe

Ce que j'obtiens

tout ce passe bien , lors de l envoi de l adresse mail de l utilisateur ayant perdu son mot de passe
mais le mail avec le lien de reinitialisation n arrive pas ...
pourtant l adresse mail existe

34 réponses

flexi2202, il y a 5 ans

bonjour
merci pour l aide
en fait je travaille en direct sur le site heberge
les infos de la table et base de donnee ont ete change

phenix, il y a 5 ans

Pourquoi tu ne fait pas tes test plutot sur un serveur local ?
C'est beaucoup plus simple.

flexi2202, il y a 5 ans

tout simplement car c est la derniere chose a realiser pour que mon site fonctionne

phenix, il y a 5 ans

D'accord !!!
Pourrais-tu me donner l'adresse du serveur que je jette un coup d'oeil ?

phenix, il y a 5 ans

merci
Ah oui, pour le moment tout est en /essai

flexi2202, il y a 5 ans

moi qui te remercie pour l aide

phenix, il y a 5 ans

Il manque plus que le css sur la partie connexion

flexi2202, il y a 5 ans

c est a dire ???

phenix, il y a 5 ans

Il n'y a pas de css quand je me connecte

flexi2202, il y a 5 ans

ah non juste
amsi cela est bien plus tard quand tout sera fonctionnel

phenix, il y a 5 ans

D'accord

phenix, il y a 5 ans

Bonne journée

flexi2202, il y a 5 ans

oui mais le code ne fonctionne pas

flexi2202, il y a 5 ans

je rentre son adresse mail
il devrait recevoir un mail avec un lien pour la réinitialisation
Sauf que la il ne le recois pas

Carouge10, il y a 5 ans

la fonction mail a besoin du headers maintenant pour fonctionner car beaucoup de serveur mail supprime le mail quand il n'y a pas de headers.
ensuite comme tu peux le voir sur la doc. la fonction mail renvoie true ou false suivant si elle s'est bien exécutée. il serait bien d'avoir ce retour

flexi2202, il y a 5 ans

merci pour l aide
mais dans ce code il n y a pas de headers

phenix, il y a 5 ans

Il faut que tu rajoute un From qui définit l'adresse email qui envoie le mail en quatrième paramètre (de cette façon : mail($adressse de réception, $objet, $contenu, ['From : no-reply@localhost.fr']);

flexi2202, il y a 5 ans

merci pour la reponse
j essaye de comprendre comment je dois rajouter cela ...
apparement c est dans la partie php ...

flexi2202, il y a 5 ans

Merci pour la reponse
j ai beau chercher
mais je ne vois pas du tout ou je dois aller modifier cela
moi et le php c est limite ...
mais je progresse a chaque fois

phenix, il y a 5 ans

T'as besoin d'aide pour faire ton site (la partie php) ???

flexi2202, il y a 5 ans

non tout est fonctionel merci c est gentil
il ne me reste plus que cette recuperation du mot de passe qui ne fonctionne pas

phenix, il y a 5 ans

D'accord, bonne chance. Je ne m'y connais pas beaucoup en envoi de mail.

flexi2202, il y a 5 ans

ah ok merci
je vais attendre de l aide d un autre membre
encore merci

phenix, il y a 5 ans

Bon après-midi.

flexi2202, il y a 5 ans

merci
bon apres midi a toi aussi

Carouge10, il y a 5 ans

qu'elle aide ?
la doc n'est pas assez clair avec ses exemples ?

flexi2202, il y a 5 ans

merci pour la reponse
ah oui tout y est ...
sauf que cela chez moi ca ne fonctionne pas

flexi2202, il y a 5 ans

je recois bien le message comme quoi le mail a ete envoye
**Récupération du mot de passe
Retour à l'accueil

Si votre mail est inscrit, vous allez recevoir un mail contenant un lien à cliquer afin de recevoir un nouveau mot de passe.**

mais rien dans ma boite mail

Carouge10, il y a 5 ans

contrairement à ce que tu penses, je ne suis pas un devin.
donc j'ai besoin de voir le nouveau code

flexi2202, il y a 5 ans

bonsoir
non je suis deja bien content que l on puisse m aider
le code n a pas changer

<?php /************************* * Page: mot-de-passe-oublie.php * Page encodée en UTF-8 **************************/ //configuration pour la connexion SQL: $SQL['host']="localhost";//serveur $SQL['user']="root";//nom d'utilisateur $SQL['pass']="";//pass $SQL['base']="nom_de_la_base_de_donnees";//nom de la base de données ?><!DOCTYPE HTML> <html> <head> <title>Script espace membre</title> </head> <body> <h1>Récupération du mot de passe</h1> <a href="./">Retour à l'accueil</a> <?php if(isset($_GET['code'],$_GET['mail'])){ //un lien est cliqué dans un mail, on recherche si le code et le mail correspondent à une ligne dans la table "recup_mdp" $Code=htmlentities($_GET['code'],ENT_QUOTES,"UTF-8"); $Mail=htmlentities($_GET['mail'],ENT_QUOTES,"UTF-8"); $mysqli=mysqli_connect($SQL['host'],$SQL['user'],$SQL['pass'],$SQL['base']); if(!$mysqli) { echo "Erreur connexion BDD"; //Dans ce script, je pars du principe que les erreurs ne sont pas affichées sur le site, vous pouvez donc voir qu'elle erreur est survenue avec mysqli_connect_error(), pour cela décommentez la ligne suivante: //echo "<br>Erreur retournée: ".mysqli_connect_error(); } else { $req=mysqli_query($mysqli,"SELECT * FROM recup_mdp WHERE code='$Code' AND mail='$Mail'"); if(mysqli_num_rows($req)==1){ //on génère un nouveau pass (de 5 caractères) et on lui envoi: $NouveauPass=substr(str_shuffle("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"),0,5); //on modifie son mot de passe pour son compte mysqli_query($mysqli,"UPDATE membres SET mdp='".md5($NouveauPass)."' WHERE mail='$Mail'"); //on ui envoi un mail avec son pass temporaire: mail($Mail,"Votre nouveau mot de passe","Le nouveau mot de passe pour votre compte est: $NouveauPass (Il est vivement conseille de le modifier depuis votre espace membre)"); //on supprime la demande mot de passe qui est dans la table "recup_mdp": mysqli_query($mysqli,"DELETE FROM recup_mdp WHERE code='$Code' AND mail='$Mail'"); echo "Votre nouveau pass temporaire vient d'être envoyé par mail."; } else { echo "Lien incorrect."; } } } else { //si le formulaire est envoyé ("envoyé" signifie que le bouton submit est cliqué) if(isset($_POST['valider'])){ //vérifie si le champ mail est bien rempli: if(empty($_POST['mail'])){ echo "Le champs mail n'est pas renseigné."; } else { //tous les champs sont précisés, on regarde si le membre est inscrit dans la bdd: //d'abord il faut créer une connexion à la base de données dans laquelle on souhaite regarder: $mysqli=mysqli_connect($SQL['host'],$SQL['user'],$SQL['pass'],$SQL['base']); if(!$mysqli) { echo "Erreur connexion BDD"; //Dans ce script, je pars du principe que les erreurs ne sont pas affichées sur le site, vous pouvez donc voir qu'elle erreur est survenue avec mysqli_error(), pour cela décommentez la ligne suivante: //echo "<br>Erreur retournée: ".mysqli_error($mysqli); } else { //on défini nos variables: $Mail=htmlentities($_POST['mail'],ENT_QUOTES,"UTF-8");//htmlentities avec ENT_QUOTES permet de sécuriser la requête pour éviter les injections SQL, UTF-8 pour dire de convertir en ce format $req=mysqli_query($mysqli,"SELECT * FROM membres WHERE mail='$Mail'"); //on regarde si le membre est inscrit dans la bdd: //même si le membre n'existe pas, on affiche qu'un mail à été envoyé, ceci permet d'empécher les robots de voir si un mail existe ou pas dans votre base de données et de vous le dérober if(mysqli_num_rows($req)!=1){ //mail inconnu } else { //mail connu, on lance la procédure d'envoi du mail pour recevoir un nouveau mdp $Code=md5(rand(1,99999999)); mysqli_query($mysqli,"INSERT INTO recup_mdp SET code='$Code', mail='$Mail'"); $Lien=$_SERVER['HTTP_HOST']."/mot-de-passe-oublie.php?code=$Code&mail=$Mail"; mail($Mail,"Recuperation du mot de passe","Pour recevoir un nouveau mot de passe cliquez sur le lien suivant: $Lien"); } echo "<p>Si votre mail est inscrit, vous allez recevoir un mail contenant un lien à cliquer afin de recevoir un nouveau mot de passe.</p>"; $TraitementFini=true;//pour cacher le formulaire } } } if(!isset($TraitementFini)){//quand le membre sera connecté, on définira cette variable afin de cacher le formulaire ?> <br> <p>Remplissez le formulaire ci-dessous pour recevoir un nouveau mot de passe:</p> <form method="post" action="mot-de-passe-oublie.php"> <input type="text" name="mail" placeholder="Votre mail..." required><!-- required permet d'empêcher l'envoi du formulaire si le champ est vide --> <input type="submit" name="valider" value="Recevoir un nouveau mot de passe"> </form> <?php } } ?> </body> </html>
flexi2202, il y a 5 ans

merci de l aide
je vais aller voir cela