Bonsoir amis codeurs :)

Voilà, je suis entrain de faire un système de réinitialisation de mot de passe lors de l'oublie de celui-ci.

Tout se passe bien sauf l'envoie par mail. Quand j'écris l'adresse en dur, ça m'envoie bien le mail, mais quand je le récupère dans une variable ça ne m'envoie rien :/

Ca fait bien une heure et demi que je suis dessus et je ne vois rien, soit c'est mes yeux qui fatigue, soit j'en sais rien ^^ Donc si vous pouviez m'aider svp, je me doute que ça ne doit pas être difficile mais bon, là je sèche ... Merci d'avance :)

Voivi le code:

<?php
include('connect.php');
require('session.class.php');
$Session = new Session();
$bdd = bdd();
if(isset($_POST'bt_reinitialise'])){

    if(!empty($_POST'email'])){

        $nb_caract = 12;
        $caract = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#&";
        for($i = 1; $i < $nb_caract; $i++){
            $nb = strlen($caract);
            $nb = mt_rand(0, ($nb - 1));
        }

        $mail = $_POST'mail'];

        $select = $bdd->prepare('SELECT * FROM membre WHERE mail = :mail');
        $select->bindValue(':mail', $mail, PDO::PARAM_STR);
        $select->execute();
        $member = $select->fetch();

        $upd = $bdd->prepare("UPDATE membre SET password = :password WHERE mail = :mail");
        $upd->bindValue(':password', md5($caract$nb]), PDO::PARAM_STR);
        $upd->bindValue(':mail', $mail, PDO::PARAM_STR);
        if($upd->execute()){

        $destinataire = $member'mail'];
        $sujet = "Réinitialisation de votre mot de passe Potternetwork";
        $entete = "From: support@potternetwork.net"; 
        $message = "Test";

        mail($destinataire, $sujet, $message, $entete);
        $Session->setFlash('Le e-boux vient de prendre son envol. Il sera bientôt dans votre boîte.', 'success');

        }
        else
            $Session->setFlash('L\'eMail renseigné n\'existe pas. Veuillez le ré-éditer.', 'info');
    }
    else
        $Session->setFlash('Vous n\'avez pas renseigné votre eMail de connexion.', 'info');
}
?>
<!DOCTYPE html>
<html>
    <head>
    <title>Réinitialisation | PotterNetwork</title>
    <meta charset="utf-8" />
    <link rel="stylesheet" media="screen" type="text/css" title="Design" href="../style.css" />
        <link rel="stylesheet" media="screen" type="text/css" title="Design" href="../theme/960_grid/960.css"/>
        <link rel="shortcut icon" href="../theme/favicon.ico" type="image/x-icon" />
        <script type="text/javascript" src="../js/jquery.js"></script>
        <script type="text/javascript" src="../js/notification.js"></script>
    </head>
    <body>
        <?php include('header.php'); ?>
        <?php $Session->flash(); ?>
    <center>              
            <div class="container_12" id="container">
                <div class="grid_6">
                    <div class="chaine1_left"></div>
                    <div class="chaine2_left"></div>
                    <div class="chaine1_right"></div>
                    <div class="chaine2_right"></div>                     

                    <div id="index_left">
                        <h1>Procédure de réinitialisation</h1>
                        <p>Vous vous apprétez à réinitialiser votre mot de passe. Pour cela, veuillez renseigner votre eMail de connexion, un mot de passe sera automatiquement généré et vous sera envoyé par eMail à l'adresse que vous aurez renseignée.<br />
                        <br />
                        L'équipe du Potternetwork.</p>
                    </div>
                </div>
                <div class="grid_6">
                    <div id="index_right">
                        <form id="connect" method="post" action="">
                            <label for="email">Votre eMail de connexion: </label><br />
                            <input type="email" id="email" name="email" /><br />
                            <br />
                            <input type="submit" id="bt_reinitialise" name="bt_reinitialise" value="Réinitialiser"/>
                        </form>
                    </div>
                </div>
            </div>
    <?php include('footer.php'); ?>
        </center>
    </body>
</html>

8 réponses


Dejà, première remarque tu fais deux foix le même traitement, tu récupère les infos de ton membre pour ton email puis tu sauvegarde alors que ton email tu l'as déjà et si tu arrive à le sauvegarder c'est que l'email existe. Donc en gros les lignes ne sont pas vraiment utiles à mon sens.

En suite dans le message tu ne lui donne pas le nouveau mot de passe.

Donc pour l'envoie d'email du destinataire utilise seulement $mail. et pense bien à faire le md5 du mot de passe dans le message.

iMacode
Auteur

Merci de m'avoir répondu. Pour le moment tout ceci est à l'étape de test. Quand mon mail arrivera à être envoyé, je styliserai le tout :)

Mon select avec le mail va me servir à récupérer des infos sur le membre pour mettre après dans le message, d'où le deuxième select :)

Ensuite, je ne comprend pas pourquoi quand je met $destinataire = $mail; ça ne m'envoie pas le mail alors que quand je fais $destinataire = 'mail@mail.fr'; ça fonctionne :/

Voivi mon problème...

Tu as surement la réponse dans ton commentaire:

Met ça à la place de $mail : "'".$mail."'".

Il me semple qu'il ai besoin de simples quotes. Essaye ça.

iMacode
Auteur

Toujours rien :/

Voici le code:

$to = "'".$mail."'";
        $sujet = "Réinitialisation de votre mot de passe Potternetwork";
        $entete = "MIME-Version: 1.0\r\n";
        $entete = "Content-type: text/html; charset=UTF-8\r\n";
        $entete = 'From: Potternetwork ::' ."\r\n". 'Reply-To: support@potternetwork.net' ."\r\n". 'X-Mailer:PHP/'.phpversion();
        $message = '<html>
                        <head>
                            <title>Réinitialisation de votre mot de passe Potternetwork</title>
                            <link rel="stylesheet" media="screen" type="text/css" title="Design" href="http://www.potternetwork.net/style.css" />
                            <meta charset="utf-8" />
                        </head>
                        <body>
                            <div id="header" class="header"></div>
                            <div class="container_12" id="container"> 
                                Ceci est un test.
                            </div>
                        </body>
                    </html>';

        if(mail($to, $sujet, $message, $entete)){
            $Session->setFlash('Le e-boux vient de prendre son envol. Il sera bientôt dans votre boîte.', 'success');
        }
        else
            $Session->setFlash('Le e-boux n\'est pas partie. Veuillez réessayer ultérieurement.', 'info');

Hummm Effectivement c'est louche cette histoire... Je vois pas où est le problème :/

iMacode
Auteur

Bah moi non plus...

Si jamais tu trouves, je suis preneur, ça fait deux jours que je suis dessus ^^

Sinon une autre question. Je génère donc un nouveau mot de passe dans mon for(). Quand je fais echo $mdp; die(); il me donne bien le mot de passe généré. Dans mon $upd, il met bien le nouveau mot de passe à la place de l'ancien. Hors dans le mail (que j'envoie en dur pour tester), il ne m'affiche qu'un seul caractère au lieu des 12 :/

$nb_caract = 12;
        $caract = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#&";
        for($i = 1; $i < $nb_caract; $i++){
            $nb = strlen($caract);
            $nb = mt_rand(0, ($nb - 1));
            $mdp = print($caract$nb]);
        }

        $mail = $_POST'mail'];

        $select = $bdd->prepare('SELECT * FROM membre WHERE mail = :mail');
        $select->bindValue(':mail', $mail, PDO::PARAM_STR);
        $select->execute();

        $upd = $bdd->prepare("UPDATE membre SET password = :password WHERE mail = :mail");
        $upd->bindValue(':password', md5($mdp), PDO::PARAM_STR);
        $upd->bindValue(':mail', $mail, PDO::PARAM_STR);
        if($upd->execute()){

        $to = 'peltier804@laposte.net';
        $sujet = "Réinitialisation de votre mot de passe Potternetwork";
        $entete = "MIME-Version: 1.0\r\n";
        $entete = "Content-type: text/html; charset=UTF-8\r\n";
        $entete = 'From: Potternetwork ::' ."\r\n". 'Reply-To: support@potternetwork.net' ."\r\n". 'X-Mailer:PHP/'.phpversion();
        $message = 'Votre nouveau mot de passe est :'.$mdp;

        if(mail($to, $sujet, $message, $entete)){
            $Session->setFlash('Le e-boux vient de prendre son envol. Il sera bientôt dans votre boîte.', 'success');
        }
        else
            $Session->setFlash('Le e-boux n\'est pas partie. Veuillez réessayer ultérieurement.', 'info');

Pour le mot de passe tu met dans ton message $mdp alors que dans la base tu y met md5($mdp).

iMacode
Auteur

Oui mais c'est normal ça. Car quand un membre se connecte, je converti en md5 la valeur du mot de passe entré pour la comparer au mot de apsse dans la bdd.