|
|
|
|
Bonjour,
Je suis en train d'écrire du code php, et j'ai besoin de mettre une authentification à l'arrivée des utilisateurs sur mon site.
Je vous post le code, le probleme est qu'il ne me trouve jamais l'utilisateur, et donc m'afficher tout le temps Echec d'authentification -> login ou mot de passe incorrect :
<?php
require_once('connexion.php');
session_start();
if (isset($_POST['login']) && isset($_POST['pwd']))
{
// requete sur la table
$statement = "SELECT * FROM tbl_user WHERE (login='" . addslashes($_POST['login']) . "' AND pwd='" . addslashes(md5($_POST['pwd'])) . "');";
$verif = mysql_query($statement) or die(mysql_error());
$utilisateur = mysql_num_rows($verif);
if(mysql_num_rows($verif) != "0")
{
session_register("authentification"); // enregistrement de la session
$_SESSION['pseudo'] = $row_verif['pseudo'];
$_SESSION['login'] = $row_verif['login'];
$_SESSION['pwd'] = $row_verif['pwd'];
header("Location:accueil.php"); // redirection si OK
}
else
{
header("Location:index.php?erreur=login"); // redirection si utilisateur non reconnu
}
}
// Gestion de la déconnexion
if(isset($_GET['erreur']) && $_GET['erreur'] == 'logout')
{
$nom = $_SESSION['pseudo'];
session_unset("authentification");
header("Location:index.php?erreur=delog");
}
?>
<html>
<head>
<title>AUTHENTIFICATION - DBProtect</title>
<link href="styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<?php
echo "<form action=\"\" method=\"post\" name=\"connect\">";
echo "<p align=\"center\" class=\"titre\"><strong>- : : : ESPACE SECURISE PAR DBProtect : : : -</strong></p>";
if(isset($_GET['erreur']) && ($_GET['erreur'] == "login"))
{
echo "<strong>Echec d'authentification -> login ou mot de passe incorrect</strong>";
}
if(isset($_GET['erreur']) && ($_GET['erreur'] == "intru"))
{
echo "<strong>Veuillez vous identifier avant de pouvoir accéder à cette page.</strong>";
}
?>
</p>
<table width="300" border="0" align="center" cellpadding="10" cellspacing="0" bgcolor="#eeeeee" class="tableaux">
<tr>
<td width="50%""><div align="right">Login</div></td>
<td width="50%"><input name="login" type="text" id="login"></td>
</tr>
<tr>
<td width="50%""><div align="right">Mot de passe</div></td>
<td width="50%"><input name="pwd" type="password" id="pwd"></td>
</tr>
<tr>
<td height="34" colspan="2"><div align="center">
<input type="submit" name="Submit" value="Se connecter">
</div>
</td>
</tr>
</table>
</form>
</body>
</html>
Bonjour
|
Salut
<?php
require_once('connexion.php');
session_start(); // on demare la session
if (isset($_POST['login']) && isset($_POST['pwd']))
{
// requete sur la table
$statement = "SELECT * FROM tbl_user WHERE (login='" . addslashes($_POST['login']) . "' AND pwd='" . addslashes(md5($_POST['pwd'])) . "');";
$verif = mysql_query($statement) or die(mysql_error());
$utilisateur = mysql_num_rows($verif);
if($utilisateur == 1){ // on suppose qu'il n'y en a qu'un
$row_verif=mysql_fetch_array($verif); //ton $row_verif venait d'ou ?
// enregistrement de la session
$_SESSION['pseudo'] = $row_verif['pseudo'];
$_SESSION['login'] = $row_verif['login'];
$_SESSION['pwd'] = $row_verif['pwd'];
header("Location:accueil.php"); // redirection si OK
}
else
{
header("Location:index.php?erreur=login"); // redirection si utilisateur non reconnu
}
}
// Gestion de la déconnexion
if(isset($_GET['erreur']) && $_GET['erreur'] == 'logout')
{
$nom = $_SESSION['pseudo'];
session_unset("authentification");
header("Location:index.php?erreur=delog");
}
?>
<html>
<head>
<title>AUTHENTIFICATION - DBProtect</title>
<link href="styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<?php
echo "<form action=\"\" method=\"post\" name=\"connect\">";
echo "<p align=\"center\" class=\"titre\"><strong>- : : : ESPACE SECURISE PAR DBProtect : : : -</strong></p>";
if(isset($_GET['erreur']) && ($_GET['erreur'] == "login"))
{
echo "<strong>Echec d'authentification -> login ou mot de passe incorrect</strong>";
}
if(isset($_GET['erreur']) && ($_GET['erreur'] == "intru"))
{
echo "<strong>Veuillez vous identifier avant de pouvoir accéder à cette page.</strong>";
}
?>
</p>
<table width="300" border="0" align="center" cellpadding="10" cellspacing="0" bgcolor="#eeeeee" class="tableaux">
<tr>
<td width="50%"><div align="right">Login</div></td><!-- la tu avait une erreur un " en trop -->
<td width="50%"><input name="login" type="text" id="login"></td>
</tr>
<tr>
<td width="50%""><div align="right">Mot de passe</div></td>
<td width="50%"><input name="pwd" type="password" id="pwd"></td>
</tr>
<tr>
<td height="34" colspan="2"><div align="center">
<input type="submit" name="Submit" value="Se connecter">
</div>
</td>
</tr>
</table>
</form>
</body>
</html> |
Bon ça marche toujours pas...
INSERT INTO `testphp`.`tbl_user` ( `id` , `pseudo` , `login` , `pwd` ) VALUES ( NULL , 'toto', 'toto', 'aa36dc6e81e2ac7ad03e12fedcb6a2c0' ); aa36dc6e81e2ac7ad03e12fedcb6a2c0 correspond à "mdp" en md5. Ensuite voici le code de connexion à la base de données : <?php
// Paramètres de connexion
$DB_SERVEUR = "localhost";
$SERVER_USER = "root";
$SERVER_PASSWORD = "";
$DB_DATABASE = "testphp";
mysql_connect($DB_SERVEUR, $SERVER_USER, $SERVER_PASSWORD);
mysql_select_db($DB_DATABASE) or die ('impossible de joindre la base de données...');
?>
Et voici finalement le code de la page de login : <?php
require_once('connexion.php');
session_start(); // on demare la session
if (isset($_POST['login']) && isset($_POST['pwd']))
{
// requete sur la table
$statement = "SELECT * FROM tbl_user WHERE (login='" . addslashes($_POST['login']) . "' AND pwd='" . addslashes(md5($_POST['pwd'])) . "');";
$verif = mysql_query($statement) or die(mysql_error());
$utilisateur = mysql_num_rows($verif); //on compte le nombre d'enregistrements trouvés
$row_verif=mysql_fetch_array($verif); // on parcourt les enregistrements trouvés
if($utilisateur != 0)
{
// enregistrement de la session
$_SESSION['pseudo'] = $row_verif['pseudo'];
$_SESSION['login'] = $row_verif['login'];
$_SESSION['pwd'] = $row_verif['pwd'];
header("Location:accueil.php"); // redirection si OK
}
else
{
header("Location:index.php?erreur=login"); // redirection si utilisateur non reconnu
}
}
// Gestion de la déconnexion
if(isset($_GET['erreur']) && $_GET['erreur'] == 'logout')
{
$nom = $_SESSION['pseudo'];
session_unset("authentification");
header("Location:index.php?erreur=delog");
}
?>
<html>
<head>
<title>AUTHENTIFICATION - DBProtect</title>
<link href="styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<?php
echo "<form action=\"./index.php\" method=\"post\" name=\"connect\">";
echo "<p align=\"center\" class=\"titre\"><strong>- : : : ESPACE SECURISE PAR DBProtect : : : -</strong></p>";
if(isset($_GET['erreur']) && ($_GET['erreur'] == "login"))
{
echo "<strong>Echec d'authentification -> login ou mot de passe incorrect</strong>";
}
if(isset($_GET['erreur']) && ($_GET['erreur'] == "intru"))
{
echo "<strong>Veuillez vous identifier avant de pouvoir accéder à cette page.</strong>";
}
?>
</p>
<table width="300" border="0" align="center" cellpadding="10" cellspacing="0" bgcolor="#eeeeee" class="tableaux">
<tr>
<td width="50%"><div align="right">Login</div></td>
<td width="50%"><input name="login" type="text" id="login"></td>
</tr>
<tr>
<td width="50%"><div align="right">Mot de passe</div></td>
<td width="50%"><input name="pwd" type="password" id="pwd"></td>
</tr>
<tr>
<td height="34" colspan="2"><div align="center">
<input type="submit" name="Submit" value="Se connecter">
</div>
</td>
</tr>
</table>
</form>
</body>
</html>
Lorsque j'essaie de me connecter avec le login "toto" et le mot de passe "mdp" il me jette ! |
J'ai fait un test, je commente le test de l'authentification pour aller quoi qu'il arrive sur l'accueil :
if (isset($_POST['login']) && isset($_POST['pwd']))
{
// requete sur la table
$statement = "SELECT * FROM tbl_user WHERE (login='" . addslashes($_POST['login']) . "' AND pwd='" . addslashes(md5($_POST['pwd'])) . "');";
$verif = mysql_query($statement) or die(mysql_error());
$utilisateur = mysql_num_rows($verif); //on compte le nombre d'enregistrements trouvés
$row_verif=mysql_fetch_array($verif); // on parcourt les enregistrements trouvés
// if($utilisateur != 0)
// {
// enregistrement de la session
session_register("authentification");
$_SESSION['pseudo'] = $row_verif['pseudo'];
$_SESSION['login'] = $row_verif['login'];
$_SESSION['pwd'] = $row_verif['pwd'];
header("Location:accueil.php"); // redirection si OK
// }
// else
// {
// header("Location:index.php?erreur=login"); // redirection si utilisateur non reconnu
// }
}
J'arrive donc bien sur ma page d'accueil. Voici la page d'accueil : <?php
require_once('connexion.php');
session_start(); // On relaye la session
if (session_is_registered("authentification"))
{ // vérification sur la session authentification (la session est elle enregistrée ?)
//continue;
}
else
{
header("Location:index.php?erreur=intru"); // redirection en cas d'echec
}
?>
<html>
<head>
<title>ESPACE PRIVE - DBProtect</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<p align="center" class="titre"><strong>- : : : VOTRE ESPACE PRIVE : : : -</strong></p>
<?php
echo "<p>Bienvenue " . $_SESSION['pseudo'] . " votre login est : " . $_SESSION['login'] . " et votre mot de passe est : " . $_SESSION['pwd'] . ".";
?>
<p align="center"><a href="index.php?erreur=logout"><strong>Vous déconnecter</strong></a></p>
</body>
</html>
Et là, problème aussi : il m'affiche : Bienvenue votre login est : et votre mot de passe est : . Donc les valeurs $_SESSION['pseudo'], $_SESSION['login'] et $_SESSION['pwd'] ne sont pas la... Je ne comprend pas du tout ce qu'il se passe ! Si quelqu'un à une idée..
|
Bon j'ai fais un autre test, j'ai vider le chiffrement MD5 :
if (isset($_POST['login']) && isset($_POST['pwd']))
{
// $login = addslashes($_POST['login']);
// $pwd = addslashes(md5($_POST['pwd']));
$login = $_POST['login'];
$pwd = $_POST['pwd'];
// requete sur la table
$statement = "SELECT * FROM tbl_user WHERE (login='" . $login . "' AND pwd='" . $pwd . "');";
$verif = mysql_query($statement) or die(mysql_error());
$utilisateur = mysql_num_rows($verif); //on compte le nombre d'enregistrements trouvés
$row_verif=mysql_fetch_array($verif); // on parcourt les enregistrements trouvés
if($utilisateur != 0)
{
// enregistrement de la session
session_register("authentification");
$_SESSION['pseudo'] = $row_verif['pseudo'];
$_SESSION['login'] = $row_verif['login'];
$_SESSION['pwd'] = $row_verif['pwd'];
header("Location:accueil.php"); // redirection si OK
}
else
{
header("Location:index.php?erreur=login"); // redirection si utilisateur non reconnu
}
}
Et j'ai crée un utilisateur "toto" avec pour mot de passe "toto" dans ma base. Et là ça marche ! J'ai donc des soucis avec le chiffrement en MD5... |
J'ai fais un autre test :
else
{
echo "login lu dans base: " . $login;
echo "<br>";
echo "pwd lu dans base: " . $pwd;
//header("Location:index.php?erreur=login"); // redirection si utilisateur non reconnu
}
Il m'afficher bien les données que j'ai dans ma base.... login lu dans base: toto pwd lu dans base: f71dbe52628a3f83a77ab494817525c6 Et dans ma base j'ai : ID login pseudo pwd 11 toto toto f71dbe52628a3f83a77ab494817525c6 A n'y rien comprendre ! |
Ok ça c'est dans la base
|
J'ai trouvé l'erreur, mais je n'arrive pas à la corriger !
if (isset($_POST['login']))
{
$login = addslashes($_POST['login']);
$pwd = addslashes(md5($_POST['pwd']));
// $login = $_POST['login'];
// $pwd = $_POST['pwd'];
// requete sur la table
$statement = "SELECT * FROM tbl_user WHERE (login='" . $login . "' AND pwd='" . $pwd2 . "');";
echo $statement . "<br>";
$verif = mysql_query($statement) or die(mysql_error());
J'ai affiché la requete pour voir ce qu'il essai de comparer et voici ce que ça donne : SELECT * FROM tbl_user WHERE (login='toto' AND pwd=''); Il ne reçoit donc pas de mot de passe, ça doit être $pwd = addslashes(md5($_POST['pwd'])); qui ne marche pas... Mais pourquoi ? Faut-il lui indiquer quelque chose pour utiliser la fonction md5 ?? |
J'ai honte... Voila l'erreur :
if (isset($_POST['login']))
{
$login = addslashes($_POST['login']);
<code>$pwd = addslashes(md5($_POST['pwd']));
// $login = $_POST['login']; // $pwd = $_POST['pwd']; // requete sur la table $statement = "SELECT * FROM tbl_user WHERE (login='" . $login . "' AND pwd='" . $pwd2 . "');"; echo $statement . "<br>"; $verif = mysql_query($statement) or die(mysql_error());</code> Lorsque j'ai voulu faire un test, j'au changer $pwd en $pwd2... J'ai renommé $pwd2 en $pwd et tout fonctionne... Merci à vous pour votre aide !! |