Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1447 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Affichage message erreur mot de passe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Affichage message erreur mot de passe

n°2303839
abdoulayec​oumba
Posté le 25-07-2017 à 22:38:34  profilanswer
 


Bonjour, j’ai construit une table  qui ne contient qu’un seul enregistrement, comportant les colonnes « Date » et « mot de passe »
Ensuite j’ai créé un formulaire comportant un champ « mot de passe », devant permettre à un employé unique d’accéder à un menu.  
Le code marche très bien lorsque l’employé saisi dans le formulaire le mot de passe correct.
Par contre lorsqu’il introduit un mot de passe incorrect le code ne lui affiche pas le message d’erreur prévu a cet effet c’est-à-dire « Mot de passe incorrect » et une page blanche vide s’affiche
Quelqu’un peut-il m’aider  
Voici mon code
le formulaire

Code :
  1. <head>
  2.         <meta charset="utf-8" />
  3.        
  4.     </head>
  5.     <body>
  6. // formulaire de saisie du mot de passe
  7. <form action="menu.php" method="post">
  8.    Veuillez saisir votre mot de passe :
  9.    <input type="varchar" name="sesame" />
  10.    <br><br/>
  11.              <input type="submit" value="Valider" />
  12.              </p>
  13.          </form>
  14.     </body>
  15. </html>


 
la page de verification menu.php
 

Code :
  1. <html>
  2.     <head>
  3.         <meta charset="utf-8" />
  4.        
  5.     </head>
  6.     <body>
  7. <?php
  8. if (isset($_POST['sesame']))
  9.     {
  10.           $sesame = $_POST['sesame'];
  11.       // connection a la table mpentree
  12.           try
  13.           {
  14.                $bdd = new PDO('mysql:host=localhost;dbname=mprojets','root','',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
  15.           }
  16.      
  17.           catch(Exception $e)
  18.        {
  19.         die('Erreur : '.$e->getMessage());
  20.        }
  21.    // On récupère tout le contenu de la table mpentree
  22.              $req = $bdd->prepare('SELECT * FROM mpentree WHERE mp = :clef');
  23.       $req-> execute(array(
  24.             'clef' => $sesame,
  25.   ));
  26.             while ($donnees = $req->fetch())
  27.                 {
  28.           //On test la validité du mot de passe   
  29.                    if ($sesame == $donnees['mp'] )
  30.                      {
  31.                           echo 'Menu general';
  32.                      }
  33.                      else
  34.                      {
  35.                          echo 'Mot de passe incorrect';
  36.                      }
  37.                     $req->closeCursor(); // Termine le traitement de la requête     
  38.                  }           
  39.         }
  40. ?>
  41. </body>
  42. </html>

mood
Publicité
Posté le 25-07-2017 à 22:38:34  profilanswer
 

n°2303842
rufo
Pas me confondre avec Lycos!
Posté le 25-07-2017 à 23:11:39  profilanswer
 

C'est normal : quand le mdp est faux, ta requête SQL ne retourne aucun résultat : tu ne rentres donc pas dans le while (et encore moins dans le if) :o


Message édité par rufo le 25-07-2017 à 23:11:54

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2303843
pluj
Posté le 25-07-2017 à 23:37:35  profilanswer
 

J'ajouterais même qu'un while quand on sait n'attendre qu'au plus une ligne (colonne en primary key ou unique), ce n'est pas vraiment utile et un closeCursor dans la boucle, ça n'a pas de sens.
 
De plus

Code :
  1. if ($sesame == $donnees['mp'] )

fait doublon avec ta clause WHERE et ça peut donner un résultat incohérent si côté SGBD tu ignores la casse (via un interclassement suffixé de _ci associée à la colonne côté MySQL par exemple) mais pas côté PHP (l'opérateur == étant une comparaison binaire/telle quelle).
 

Code :
  1. if ($donnees = $req->fetch()) {
  2.    echo 'Menu general';
  3. } else {
  4.   echo 'Mot de passe incorrect';
  5. }


Devrait suffire (ça remplacerait ton while complet).
 
Voire même, si tu ne fais rien ensuite de $donnees, préférer un SELECT COUNT :

Code :
  1. $req = $bdd->prepare('SELECT COUNT(*) FROM mpentree WHERE mp = :clef');
  2. $req-> execute(array(
  3.     'clef' => $sesame,
  4. ));
  5. if ($req->fetchColumn()/* > 0*/) {
  6.    echo 'Menu general';
  7. } else {
  8.   echo 'Mot de passe incorrect';
  9. }


 
Et s'il est vraiment question de mots de passe, hache les avec password_hash, on ne les garde pas en clair comme ça !


Message édité par pluj le 25-07-2017 à 23:42:33

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Affichage message erreur mot de passe

 

Sujets relatifs
login/mot de passe dans script ftp dans dosAffichage resultat
[VB] Erreur si utilisation d'un ContextMenuStripProblème MFC en VBA (erreur -2147417848 (80010108) )
Comment eviter message avertissementPowershell - unrestricted mais erreur de droits d'execution
[Java] Erreur java.net.SocketException : socket closed (EOS)Demander le login et le mot de passe
Création de boucle pour un affichage de deux tableserreur avec le group_by depuis la maj de Wamp
Plus de sujets relatifs à : Affichage message erreur mot de passe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR