IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Examen de mon code de gestion des oublis de MDP [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 27
    Par défaut Examen de mon code de gestion des oublis de MDP
    Salut à tous,

    Je viens de me mettre à la programmation PHP, essentiellement par nécessité, mais j'y trouve bcp de plaisir pour l'instant.

    Je dispose d'un script de paiement, qui gère l'accès à une zone membre, le profil des membres etc... Assez complet et efficace.

    J'ai voulu rajouter une fonctionnalité à ce script : permettre à un membre ayant perdu son mot de passe de pouvoir le récupérer. Pour cela, il se rend sur une page contenant un formulaire, entre son email, et ses identifiants lui sont renvoyé sur son adresse mail.

    Après 2 petites heures de programmation, j'ai un truc qui marche a peu près. Par contre je ne sais pas ce qu'il vaut en terme de "codage" et d'optimisation du code J'ai fait un usage excessif des variables je pense, essentiellement parce que je maitrise mal la syntaxe " et ', et que cela me provoquait des parse error à la chaine .

    En fait mon script va piocher les infos dans la BDD de mon script de gestion des paiements et des acces. Il n'y a pas d'interaction entre les 2 scripts. Les identifiants apparaissent en clair dans la BDD, l'accès à la zone membre étant protégé par un htaccess / htpasswd.

    Mon problème et mes questions avant d'afficher mon code :
    J'ai voulu rajouter une fonctionnalité à mon script me permettant d'afficher un message d'erreur si le mail entré ne correspondait à aucun mail existant dans la BDD. J'ai ajouté une condition (if / else).

    Au début j'ai voulu utiliser la fonction is_null que j'ai trouvée dans le manuel de PHP (très bien fait soit dit en passant). Puis j'ai essayé la fonction empty, et enfin j'ai essayé de comparer le email entré dans le formulaire avec le email extrait de la recherche dans la BDD (voir le script). Aucun des 3 ne marche, mais c'est peu être du à une erreur de code autre part.

    Laquelle de ces fonctions dois je employer ? Comment faire ma condition proprement ? Y a t'il des optimisations / erreurs à corriger dans mon code ?

    Voici mon code (modifié pour les besoins de la publication sur un forum :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <?php
    //Vérification de la validation du formulaire + remplissage du champs email
    if (isset($_POST['email']) && !empty($_POST['email'])) 
    {
    //Conditions remplies, connexion à la BDD
    $mail=$_POST['email'];
    mysql_connect("localhost", "XXXXX", "XXXXX"); // Connexion à MySQL
    mysql_select_db("XXXXXXXXX"); // Sélection de la base 
     
    // Requête sur la BDD = table membre
    $requete_membres = "SELECT ID, prenom, nom, email FROM membre WHERE email='$mail'";
    $membres = mysql_query($requete_membres) or exit(mysql_error());
    $membres2 = mysql_fetch_array($membres) or exit(mysql_error());
    $destinataire = $membres2['email'];
     
    if ($mail != $destinataire)
    {
    echo "Désolé, le email que vous avez entré ne figure pas dans notre base de données.";
    mysql_close(); // Déconnexion de MySQL 
    }
    else
    {
    // creation de la variable ID pour faire une recherche inter-table
    $id = $membres2['ID'];
     
    //Requête sur la BDD = table htpasswd
    $requete_htpasswd = "SELECT login, pass FROM htpasswd WHERE clientID=$id";
    $htpasswd = mysql_query($requete_htpasswd) or exit(mysql_error());
    $identifiants = mysql_fetch_array($htpasswd) or exit(mysql_error());
     
    // creation de variables en pagaille
    $prenom = $membres2['prenom'];
    $nom = $membres2['nom'];
    $login = $identifiants['login'];
    $pass = $identifiants['pass'];
    $expediteur = "monmail@monsite.com";
    $reponse = $expediteur;
     
    // Création d'une variable contenant le email en HTML
    $mailhtml="<html><body>"."<p>Bonjour $prenom $nom,</p>"."<p>Conformément à votre demande, nous vous renvoyons vos identifiants"."<br><b>Votre login est :</b> $login<br>"."<b>Votre mot de passe est :</b> $pass</p>"."<p>N'oubliez pas de respecter les majuscules et les minuscules des identifiants !";
     
    // Envoi du email
    mail($destinataire,"Vos identifiants",$mailhtml,"From: $expediteur\r\nReply-To: $reponse\r\nContent-Type: text/html; charset=\"iso-8859-1\"\r\n");
     
    // Message de confirmation de l'envoi du mail
    echo "<p><center>Un mail contenant vos identifiants de connexion à été envoyé à votre adresse email.<br>Vérifiez IMPERATIVEMENT votre dossier SPAM avant de recommencer une demande d'identifiants</center></p>";
     
    mysql_close(); // Déconnexion de MySQL 
    }
    }
    else // si champs email non rempli, echec et message d'erreur
    {
    echo "<p><center>Erreur, vous devez entrer une adresse correcte.<br></p></center>";
    }
    ?>
    Merci au(x) courageux qui prendront le temps de se pencher sur mon cas.

  2. #2
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Salut,

    as-tu essayé mysql_num_rows (renvoie le nombre d'enregistrements résultat d'une requête)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $membres = mysql_query($requete_membres) or die(mysql_error());
    $nb = mysql_num_rows($membres);
    if($nb == 0)
       // le mail n'existe pas
    else
       // le mail existe

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 27
    Par défaut
    Merci Jwhite de ta réponse.

    L'idée d'utiliser mysql_num_rows est intéressante

    Par contre ca ne marche toujours pas.

    Si j'entre un email inscrit dans la BDD : le mail part bien, et le message s'affiche sur la page.
    Si le mail ne figure pas dans la BDD, alors la page qui s'affiche est vierge.

    La condition semble bien posée, et je ne demande qu'a afficher un echo...

    Ca ne me renvoit aucune erreur, ce qui n'aide pas beaucoup à la correction

    J'ai vu qu'il existait des debugger PHP, je vais essayer d'en chopper un.

    Cordialement,
    Philippe

  4. #4
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Il rentre toujours dans le else c'est ça ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 27
    Par défaut
    Re,

    Je ne pense pas qu'il rentre toujours dans le else, puisque si :
    - formulaire pas rempli ou non validé : il affiche le message prévu
    - si email existe, il envoi bien le mail + affiche le message

    Mais des que je rentre un mail fantasiste, par ex hfhjdk@fhshjs.fr, ecran blanc. Ca tend à me faire penser qu'il entre bien dans le IF.

  6. #6
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    En effet, il doit considérer que le mail existe ce qui fait planter la suite puisque c'est faux.

    Peux-tu reposter le code de ton accès BDD jusqu'au test du if ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Mon Module de gestion des états ne marche pas
    Par sebac dans le forum IHM
    Réponses: 9
    Dernier message: 27/11/2009, 10h33
  2. Mon programme de gestion des stocks ...
    Par mouchT8 dans le forum C++
    Réponses: 36
    Dernier message: 04/06/2009, 09h43
  3. Portabilité de mon code en fonction des OS.
    Par WhoIsTiti dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2009, 22h45
  4. Code de gestion des erreurs
    Par Malawi dans le forum Langage
    Réponses: 2
    Dernier message: 11/08/2008, 16h31
  5. Réponses: 5
    Dernier message: 22/01/2007, 14h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo