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. 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, 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. Merci Alain_42, mais ça ne marche pas non plus... Je comprend vraiment pas là...
            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. 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. 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. 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)
                            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 !!