protection par mot de passe

Eléphanteau du PHP | 40 Messages

09 févr. 2011, 19:02

bjr
jusqu'ici ,je protégeai mes petits secrets par une simple contrôle
if ($_POST['admin'] !=='XXX' or $_POST['motpasse'] !=='XXX')
		{header("location: index.php");}
pour le 1er fichier
puis
if ($_SESSION['admin'] !=='XXX' or $_SESSION['motpasse'] !=='XXX')
		{header("location: index.php");}
pour les autres
je voulais ,maintenant que je suis grand (si, si), faire la même chose via ma BDD
<?php
	session_start();
	//Initialisation erreur


$db = mysql_connect('xxx', 'xxxx', 'xxx')  or die('Erreur de connexion '.mysql_error());
// sélection de la base  

mysql_select_db('xxx',$db)  or die('Erreur de selection '.mysql_error());

$sql="Select * from acces where admin='$_POST[admin]' and motdepasse='$_POST[motpasse]'";
$resultat=mysql_query($sql) or die("Erreur SQL : $sql<br/>".mysql_error());
$acces = mysql_fetch_array ($resultat)	;
$admin=$acces['admin'];
$motpasse=$acces['motdepasse'];


if ($_POST['admin'] !==$admin or $_POST['motpasse'] !==$motpasse)
		{header("location: index.php");}
		
losque je fais un echo, tout fonctionne,
le post, la session, la bdd, lorsque j'ecrase la session elle n'existe plus etcetc
pourtant mon fichier n'est pas protégé si je tape l'adresse dans le navigateur.
Je ne comprends où est l'erreur
merci de votre aide

?>

ViPHP
xTG
ViPHP | 7331 Messages

09 févr. 2011, 19:39

Tu devrais avoir des warnings avec ce code.
Car si tu as accès à la page sans passer par le formulaire le tableau $_POST est vide et tu tentes donc d'accéder à des clés non existantes.
if( !empty($_POST['admin']) ) // on vérifie les données
{

}
else
{
  // pas de valeur, donc non renseignée dans le formulaire ou bien on ne vient pas du formulaire
}
Sinon avec une telle requête il serait plus intéressant d'utiliser mysql_num_rows() pour savoir si les identifiants sont corrects. Là tu fais deux fois le travail. ;)

Eléphanteau du PHP | 40 Messages

09 févr. 2011, 20:08

merci pour ce conseil
j'ai donc fait des recherches et fait ça
$db = mysql_connect('XXX', 'XXX', 'XXX')  or die('Erreur de connexion '.mysql_error());
// sélection de la base  

mysql_select_db('XXX',$db)  or die('Erreur de selection '.mysql_error());

$sql="Select * from acces where admin='$_POST[admin]' and motdepasse='$_POST[motpasse]'";
$resultat=mysql_query($sql) or die("Erreur SQL : $sql<br/>".mysql_error());

$num_rows = mysql_num_rows($resultat);

echo "$num_rows Rows\n";
// ce echo est juste ici pour vérifier


if ($num_rows=0)
		{header("location: index.php");}
		
pas mieux!!!
le fichier est toujours accessible!!!
ps : l'echo donne bien la bonne réponse (1 row en cas d'accès par formulaire et mot de passe ok et 0 row si accès par navigateur ou via formulaire avec mot de passe erronné)

ViPHP
AB
ViPHP | 5818 Messages

09 févr. 2011, 20:52

C'est tout détaillé (avec code fonctionnel) sur ce lien

Eléphanteau du PHP | 40 Messages

09 févr. 2011, 21:43

j'essaye ça demain
merci

ViPHP
xTG
ViPHP | 7331 Messages

09 févr. 2011, 22:43

La correction de ton code suite à une erreur bête :
if ($num_rows==0)
{
  header("location: index.php");
  exit();
}
C'est un double égal pour tester une valeur.
Et le exit() pour être sûr d'arrêter le script après la commande header().

Eléphanteau du PHP | 40 Messages

10 févr. 2011, 18:32

:oops: :oops: :oops:
mais c'est bien sur!!!
tout fonctionne!!
merci à tous