PHP ouverture session + identification

Résolu
DAG -  
 DAG -
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 ??

15 réponses

  1. DAG
     
    Oui voila, tu l'avais repéré aussi ! Rah des fois...

    Merci !
    3
  2. DAG
     
    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 !
    2
  3. DAG
     
    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..
    2
    1. Alain_42 Messages postés 5413 Statut Membre 904
       
      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
      ...................... 
      
      -1
  4. DAG
     
    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...
    2
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. DAG
     
    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 !
    1
  7. DAG
     
    Il ne passe pas dans le if($utilisateur > 0)... Je ne vois pas le echo...
    1
  8. DAG
     
    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 !
    1
  9. Mimiste Messages postés 1159 Statut Membre 206
     
    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)
    1
  10. DAG
     
    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 ??
    1
  11. DAG
     
    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...
    1
  12. DAG
     
    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 !!
    1
  13. Mimiste Messages postés 1159 Statut Membre 206
     
    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)
    0
  14. Alain_42 Messages postés 5413 Statut Membre 904
     
    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>
    0
  15. DAG
     
    Merci Alain_42, mais ça ne marche pas non plus... Je comprend vraiment pas là...
    0
  16. Mimiste Messages postés 1159 Statut Membre 206
     
    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)
    0