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