PHP ouverture session + identification

Résolu
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. Oui voila, tu l'avais repéré aussi ! Rah des fois...

    Merci !
    1. 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 !
      1. 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..
        1. 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
          ...................... 
          
      2. 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...
        1. 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. Il ne passe pas dans le if($utilisateur > 0)... Je ne vois pas le echo...
            1. 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. 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. 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. 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. 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. 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)
                        1. 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>
                          1. Merci Alain_42, mais ça ne marche pas non plus... Je comprend vraiment pas là...
                            1. 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)