Verification base de données pour acces protégé à une page

Eléphanteau du PHP | 25 Messages

05 mars 2009, 20:50

Bonjour,

je cherche à protéger l'accés à une page de mon site uniquement aux personnes faisant partie de l'association. J'ai créer un formulaire avec login et mot de passe. Je voudrais vérifier la concordance du login , du mot de passe ainsi que vérifier que la personne fait bien partie du bureau.
Dans ma base de donnée, la colonne "bureau" ne contient que des O ou des N.

Voici le code de ma page avec le formulaire d'identification:

Code : Tout sélectionner

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <link rel="shortcut icon" href="images/page.ico"/> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Accès Compte rendus de réunions</title> <link href="style1.css" rel="stylesheet" type="text/css"> </head> <body> <center> <div id="fond"> <?php include 'entete.php'; include 'gauche.php'; include 'droite.php'; ?> <div style="width:550px;height:600px;margin-top:10px;margin-left:7px;float:left"> <div class="intitule" style="width:4450px;height:25px;background:url(images/identification.png) left no-repeat; padding-left:50px"> IDENTIFICATION REQUISE </br></br> <center>Cette section est réservée aux membres du bureau de l'association</center> </div></br></br> <?php // connection à MySql mysql_connect('localhost','alban','alban') or die (mysql_error()); mysql_select_db('alban') or die ('Sélection de la base impossible'); $retour = mysql_query('SELECT * FROM newsletter ORDER BY id DESC'); while ($donnees = mysql_fetch_array($retour)) { if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])) { if($_POST['login'] == $donnees['nom'] && $_POST['password'] == $donnees['password'] && $donnees['bureau'] = 'checked') { ?> </br>Bienvenue :: <?php echo $_POST['login'] ; ?> ::</br> <?php } else { echo'Vous n\'êtes pas autorisé à voir cette page'; } } else { echo'Vous devez remplir les champs'; } } ?> <!--Formulaire--> <?php echo '<form method="POST" action="reunions.php">'; echo 'Login : '; echo '<input type="text" name="login">'; echo '<br/>';echo '<br/>'; echo 'Mot de passe : '; echo '<input type="password" name="password">'; echo '<br/>';echo '<br/>'; echo '<input type="submit" value="OK">'; echo '</form>'; ?> <!--Fin formulaire--> </div> <?php include 'bas.php'; ?> </div> </center> </body> </html>
Merci de votre aide

ViPHP
AB
ViPHP | 5818 Messages

05 mars 2009, 20:54


Eléphanteau du PHP | 25 Messages

05 mars 2009, 21:03

Merci pour ta réponse mais ce n'est pas exactement ce que je recherche, la verification doit se faire sur le nom, le mot de passe ainsi que la condition concernant l'appartenance au bureau.

Je ne sais pas si je suis super clair.

Thx

ViPHP
ViPHP | 1996 Messages

05 mars 2009, 22:02

Non je ne comprends pas trop : ton code permet (même si il ya une faute) de le faire. Alors que veux tu ?

L'erreur $donnees['bureau'] = 'checked') au lieu de $donnees['bureau'] == 'checked')

Dans ma base de donnée, la colonne "bureau" ne contient que des O ou des N.
alors pourquoi checked ? et non O ou N ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 25 Messages

05 mars 2009, 23:07

malgré la correction, quelque soit le nom et le mot de passe (meme si il n'existe pas dans ma base de donnée) que je rentre, j'accede a ma page.

J'ai essayé sans tenir compte de la participation au bureau mais idem.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 mars 2009, 13:31

Hum... histoire de bien parler de la même chose, ta page est toujours accessible quelque soit l'identifiant et le mot de passe spécifié. Ce qui va changer, c'est que si l'utilisateur existe en base, alors il verra un "Bienvenue :: Toto" au lieu d'un "Vous n'êtes pas autorisé..."

A noter que ton script actuel va lire et ramener tous les enregistrements de ta table, puis à cause du while, les essayer un par un pour voir si les identifiants et mots de passe correspondent à ceux spécifiés. Résultat, si tu as 30 inscrits, tu vas afficher 29 "Vous n'êtes pas autorisés" et un "Bienvenue" :(

Il serait plus judicieux de spécifier directement dans la requête les informations que tu recherches pour ne ramener que l'enregistrement dont tu as besoin :
// on ne cherche que l'enregistrement correspondant au login spécifié
$sql = "SELECT nom, password, bureau FROM newsletter WHERE nom = '".mysql_real_escape_string($_POST['login'])."'";
$retour = mysql_query($sql); 
if ($donnees = mysql_fetch_array($retour)) // s'il y a des résultats ...
{ 
... 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 25 Messages

09 mars 2009, 18:19

Malgré la sélection et la fonction mysql_real_escape_string j'ai toujours le me résultat, il suffit de rentrer n'importe quoi en login et en mot de passe pour accèder à la page, je sèche....

je ne comprends pas pourquoi.

Eléphanteau du PHP | 25 Messages

11 mars 2009, 17:08

Merci de votre aide, je viens de trouver la solution, en refléchissant un peu : dans l'action de mon formulaire, je lui demandais tout simplement d'ouvrir la page reunions.php alors qu'il fallait que se soit la page d'identification.
<!--Formulaire--> 
<?php 
   echo '<form method="POST" action="reunions.php">';  //MON ERREUR : ICI IL AURAIT FALLU QUE JE RENTRE LOGREUNION.PHP
   echo 'Login : '; 
   echo '<input type="text" name="login">'; 
   echo '<br/>';echo '<br/>'; 
   echo 'Mot de passe : '; 
   echo '<input type="password" name="password">'; 
   echo '<br/>';echo '<br/>'; 
   echo '<input type="submit" value="OK">'; 
   echo '</form>'; 
?> 
<!--Fin formulaire--> 

   </div> 

Eléphanteau du PHP | 25 Messages

16 mars 2009, 19:11

Re, je ré-ouvre ce post car je deviens chèvre.

en effet, ma vérification fonctionne avec les utilisateurs qui était déja enregistrés dans ma BD mais dès que j'en crée un nouveau, n'importe quel mot de passe permet d'accèder à ma page. Je ne pige plus rien sur ce coup là.

Quelqu'un aurait-il une idée ?

Merci de votre aide... :?

ViPHP
ViPHP | 1996 Messages

17 mars 2009, 11:32

Tu les créé comment tes nouveaux utilisateurs ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Invité
Invité n'ayant pas de compte PHPfrance

17 mars 2009, 13:39

Pour la création de mes utilisateurs, j'ai une page avec un formulaire qui me permet d'alimenter automatiquement ma BD. Ensuite, dans la partie administration, je demande la création automatique d'un mot de passe qui vient compléter la fiche de l'utilisateur dans ma BD.

Toute la base est rempli via des formulaire, rien en manuel, il faudrait que je test pour voir si le probleme persiste ou pas de cette manière.


:cry: