Page 1 sur 1

Pb de lecture dans ma bdd

Posté : 25 août 2010, 18:06
par Phil21
Bonjour à tous,
Ce script me permet la redirection sur une page après validation d’un mot de passe en base de données.

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 beaucoup pour votre aide.

Ma table :
-- phpMyAdmin SQL Dump
-- version 2.6.4-pl3
-- http://www.phpmyadmin.net
-- 
-- Serveur: localhost
-- Généré le : Mercredi 25 Août 2010 à 17:52
-- 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 :
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=password',  'root',  '1234');
}
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>

Re: Pb de lecture dans ma bdd

Posté : 25 août 2010, 19:04
par xTG
C'est tout à fait normal car tu écrases le contenu de $passe à chaque itération.
Mets ton test à l'intérieur de la boucle while.

Re: Pb de lecture dans ma bdd

Posté : 25 août 2010, 22:40
par Phil21
Merci xTG pour cette réponse, mais je suis novice dans ce domaine et je ne saisi pas tout quand tu me dis de mettre mon test à l’intérieur de la boucle while.
Pourrais-tu me donner des détails ou me corriger le script ? (que je comprenne mieux mon erreur)

Merci pour ton aide !

Re: Pb de lecture dans ma bdd

Posté : 26 août 2010, 10:50
par xTG
J'ai rien dit en fait... J'avais mal parcouru le code.
Bon voilà une solution, tu créés un array avec les mots de passe récupérés et quand tu les as tous tu vérifies que le mot de passe est dans l'array.
$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");
   }
 }

Re: Pb de lecture dans ma bdd

Posté : 26 août 2010, 17:16
par Phil21
Merci beaucoup xTG pour ta réponse qui ma permis de comprendre mon problème et bien sur d’avancé dans mon apprentissage…

Bonne fin de journée ! :wink: