Posez votre question Signaler

PHP ouverture session + identification [Résolu]

DAG - Dernière réponse le 26 sept. 2008 à 12:09
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>

Voila, je ne vois trop ou est l'erreur...
Si quelqu'un voit ??
Lire la suite 

PHP ouverture session + identification »

16 réponses
Réponse
+2
moins plus
Oui voila, tu l'avais repéré aussi ! Rah des fois...

Merci !
Ajouter un commentaire
Réponse
+1
moins plus
Merci, j'ai corriger le problème, mais ça ne fonctionne toujours pas...

J'ai pourtant bien insérer dans ma base un "toto" avec pour mot de passe "mdp" (md5 = aa36dc6e81e2ac7ad03e12fedcb6a2c0 )

Et lorsque j'essais de me connecter avec ce user, ça ne marche pas !
Ajouter un commentaire
Réponse
+1
moins plus
Bon ça marche toujours pas...
Voila ce que j'ai fais :
Dans ma base j'ai insérer :
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 !
Ajouter un commentaire
Réponse
+1
moins plus
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&eacute;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..
Alain_42- 26 sept. 2008 à 11:40
Essaye de mettre un echo en bloquant ensuite le header pour voir:

............
$utilisateur = mysql_num_rows($verif);	//on compte le nombre d'enregistrements trouvés
	
	
	if($utilisateur > 0)
	{
           $row_verif=mysql_fetch_array($verif);	// on parcourt les enregistrements trouvés seulement si il y en a !!
	    // enregistrement de la session
echo "Pseudo lu dans base: ".$row_verif['pseudo'];
		$_SESSION['pseudo'] = $row_verif['pseudo'];
		$_SESSION['login'] = $row_verif['login'];
		$_SESSION['pwd'] = $row_verif['pwd'];
		
		// header("Location:accueil.php"); // redirection si OK  //   en commentaire provisoirement
	}
	else
...................... 
Ajouter un commentaire
Réponse
+1
moins plus
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...
Ajouter un commentaire
Réponse
+1
moins plus
Il ne passe pas dans le if($utilisateur > 0)... Je ne vois pas le echo...
Ajouter un commentaire
Réponse
+1
moins plus
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 !
Ajouter un commentaire
Réponse
+1
moins plus
Ok ça c'est dans la base

Mais du coup si tu fait ça

$login = addslashes($_POST['login']);
$pwd = addslashes(md5($_POST['pwd']));

echo $login;
echo $pwd;

T'a bien les même valeur que ta base ? (surtout pour le $pwd)
Ajouter un commentaire
Réponse
+1
moins plus
J'ai trouvé l'erreur, mais je n'arrive pas à la corriger !
Voici le code :
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 ??
Ajouter un commentaire
Réponse
+1
moins plus
Oui voila Mimiste, j'avais pas eu le temps de voir ta réponse, ça revient à la même chose...
Donc je ne sais pas trop comment faire...
Ajouter un commentaire
Réponse
+1
moins plus
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 !!
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour

Je sais pas si l'erreur d'authentification est la mais en tout cas commence par corriger ceci :

if(mysql_num_rows($verif) != "0")

il faut enlever les guillemets, c'est un numerique qui est retourné et non pas une chaine

if(mysql_num_rows($verif) != 0)
Ajouter un commentaire
Réponse
+0
moins plus
salut

essayes comme ça:

<?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>
Ajouter un commentaire
Réponse
+0
moins plus
Merci Alain_42, mais ça ne marche pas non plus... Je comprend vraiment pas là...
Ajouter un commentaire
Réponse
+0
moins plus
essai d'enlever le addslashes, de toute manière il ne sert a rien la ou il est vu que t'a passé ta variable en MD5

(et met $pwd et pas $pwd2)
Ajouter un commentaire
Ce document intitulé « PHP ouverture session + identification » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?