Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pb de lecture dans ma bdd

Sujet résolu
    26 août 2010 à 7:21:40

    Bonjour à tous,
    Ce script me permet la redirection sur une page après validation d’un mot de passe en base de données. Je débute en bdd et j’ai adapter un cour officiel du site…

    Lorsque je demande une « lecture dans ma bdd » comprenant plusieurs enregistrements de mot de passe, seul le dernier enregistrement et reconnu et fonctionne correctement !

    Si quelqu’un à une idée pour résoudre ce problème…
    Merci pour votre aide.

    Ma table:</gras>

    -- phpMyAdmin SQL Dump
    -- version 2.6.4-pl3
    -- http://www.phpmyadmin.net
    --
    -- Serveur: localhost
    -- Généré le : Jeudi 26 Août 2010 à 07:04
    -- Version du serveur: 5.0.81
    -- Version de PHP: 5.2.6-1+lenny9
    --
    --
    -- Base de données: `password `
    -- --------------------------------------------------------
    -- Structure de la table `password `
    --
    CREATE TABLE `password ` (
    `id` int(11) NOT NULL auto_increment,
    `mot_de_passe` varchar(10) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
    --
    -- Contenu de la table `password `
    --
    INSERT INTO `password ` VALUES (2, '9543');
    INSERT INTO `password ` VALUES (3, '4857');
    INSERT INTO `password ` VALUES (3, '2681');

    Mon script:<gras>


    <?php
    try
    {
    $bdd = new PDO('mysql:host=localhost;dbname=password',  'root',  '');
    }
    catch (Exception $e)
    {
     die('Erreur : ' . $e->getMessage());
    }
    $reponse = $bdd->query('SELECT * FROM password');
    while ($donnees = $reponse->fetch())
    {
     $passe = $donnees['mot_de_passe']; 
    }
    $reponse->closeCursor(); 
    if(isset($_POST['mdp']))
    {
     if(($_POST['mdp'])===$passe)
     {
      header ("location: ma_page_login.php");
      }
       else
       {
       header ("location: ma_page_erreur.php");
       }
       }
    ?>
    
    </table>
    </font> 
    </div>
    <table width="200" border="0" align="center">
    <tr>
     <td align="center" valign="middle"><img src="../../images/header.png" width="856" height="153" /></td>
     </tr>
    <tr>
     <td align="center" valign="middle" class="mess3"><p class="mess7">&nbsp;</p>
     <p class="mess7">Accueil</p>
    <p><img src="images/ordi_live.png" width="126" height="110" /></p>
     <p class="mess9">&nbsp;</p>
     <p class="mess9">Veuillez entrer votre mot de passe et valider</p></td>
    <tr>
     <td align="center" valign="middle"><form action="ma_page.php" method="post">
     <p>
     <input name="mdp" type="password" style="text-align:center; " class="texte_noir" size="30" maxlength="30" />
     <br />
     <input type="submit" class="button_dark" value="Valider" />
     </p>
    </form>
    </td>
    <tr>
     <td colspan="7" align="center">&nbsp;</td>
    </tr>
    <tr>
     <td colspan="7" align="center">&nbsp;</td>
    </tr>
    <tr>
     <td colspan="7" align="center"><a href="retour.php" class="mess4">Quitter</a></td>
    </tr>
    </table>
    </body>
    
    • Partager sur Facebook
    • Partager sur Twitter
      26 août 2010 à 9:14:44

      C'est un problème d'algorithmique de base là, tu changes $passe à chaque tour de boucle, donc au final il vaut forcément la dernière valeur récupérée dans la base !
      • Partager sur Facebook
      • Partager sur Twitter
      Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
        26 août 2010 à 9:24:25

        En effet.
        Deux solutions simples s'offrent à toi :
        - Tu mets ta condition dans la boucle.
        - Tu remplace $passe par $passe[], et tu testes ta condition avec in_array($passe). Tous les mots de passes seront stockés dans un tableau, et tu vérifies si la valeur postées est dans le tableau.

        Sinon autre remarque sans rapport direct : tu fais la requête pour récupérer les mots de passe à chaque affichage de page, il vaudrait mieux le faire seulement lorsque tu envoies le formulaire non ? Je te laisse chercher, tu as juste une ligne de code à déplacer :)
        • Partager sur Facebook
        • Partager sur Twitter
          26 août 2010 à 17:06:02

          Merci à vous deux pour vos réponses, ça marche parfaitement ! :)
          Voici donc la correction :

          <?php
          try
          {
          $bdd = new PDO('mysql:host=localhost;dbname=password',  'root',  '');
          }
          catch (Exception $e)
          {
           die('Erreur : ' . $e->getMessage());
          }
          $reponse = $bdd->query('SELECT mot_de_passe FROM password');
          while ($donnees = $reponse->fetch())
          {
           $passe[] = $donnees['mot_de_passe'];
          }
          $reponse->closeCursor();
            if(isset($_POST['mdp']))
            {
             if(in_array($_POST['mdp'],$passe))
             {
              header ("location: ma_page_login.php");
             }
             else
             {
             header ("location: ma_page_erreur.php");
             }
           }
          ?>
          

          • Partager sur Facebook
          • Partager sur Twitter

          Pb de lecture dans ma bdd

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown