Problème avec login et pass

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème avec login et pass

Re: Problème avec login et pass

par sirakawa » 05 mars 2012, 15:45

j'avais commencé à rajouter des contrôles; mais pour être à l'aise, j'avais sorti les $_POST[ ] des if, puis j'ai trouvé plus simple de remplacer le if elseif else par un switch...
$login = isset ($_POST['login']) ? $_POST['login'] : "";
$pass = isset ($_POST['pass']) ? $_POST['pass'] : "";

	if (($login != "") and ($pass!= "") )
	{

                mysql_connect ("localhost", "root","");
                // on teste si une entrée de la base contient ce couple login / pass
		$login_echappe = mysql_escape_string($login);
		$pass_code = md5(mysql_escape_string($pass));
                $sql = "SELECT count(*) FROM membre WHERE `login`='$login_echappe'  AND `pass_md5`='$pass_code'";
                $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
                $data = mysql_fetch_array($req);

                mysql_free_result($req);
                mysql_close();
              
		$nb_comptes = $data[0];
		switch ($nb_comptes)
		{
			case 0:
				$erreur = 'Compte non reconnu.';
			break;
			case 1:
				session_start();
				$_SESSION['login'] = $login; 
				header('Location: logo.php');
				exit();
			break;
			default:
	                        $erreur = 'Problème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
			break;
		}
        }
        else 
	{
                $erreur = 'Au moins un des champs est vide.';
        }
}
?>

Re: Problème avec login et pass

par xTG » 05 mars 2012, 13:58

Voici un code de debug :
<?php
echo '$_POST reçu : ';var_dump($_POST);
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
        echo 'Premier if : OK';
        if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {
                echo 'Second if : OK';
                include("connection.php");

                // on teste si une entrée de la base contient ce couple login / pass
              // on teste si une entrée de la base contient ce couple login / pass
                $sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"';
                $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
                $data = mysql_fetch_array($req);
                echo 'Données requête : '; var_dump($data);
                mysql_free_result($req);
                        mysql_close();
                // si on obtient une réponse, alors l'utilisateur est un membre
                if ($data[0] == 1) {
                        /*session_start();
                        $_SESSION['login'] = $_POST['login'];
                        header('Location: logo.php');
                        exit();*/
                        echo 'Troisième if : OK';
                }
                // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
               
                elseif ($data[0] == 0) {
                        $erreur = 'Compte non reconnu.';echo 'Troisième if : KO1';
                }
                // sinon, alors la, il y a un gros problème <img src="http://forum.phpfrance.com/images/smilies/icon_smile.gif" alt=":)" title="Smile" />
                else {
                        $erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.'; echo 'Troisième if : KO2';
                }
        }
        else {
                $erreur = 'Au moins un des champs est vide.'; echo 'Second if : KO';
        }
}
?>
La partie session et redirection est commentée, car de toute façon les echo de debug vont remplir le buffer de sortie et donc occasionner des erreurs sur l'utilisation de ces fonctions (qui doivent être utilisées avant des affichages).
Restes plus qu'à tester et voir ce qui bloque. ;)

Re: Problème avec login et pass

par msi79 » 05 mars 2012, 12:05

je viens de mettre des print_r mais ça affiche toujours :

array(3) { ["login"]=> string(5) "admin" ["pass"]=> string(5) "admin" ["connexion"]=> string(9) "connexion" }

et je reviens toujours sur la page index.php

. je sais pas si j'ai bien disposé les print_r .

voici le code :
<?php
var_dump($_POST);
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
	if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

		include("connection.php"); 

		// on teste si une entrée de la base contient ce couple login / pass
	      // on teste si une entrée de la base contient ce couple login / pass
                $sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"';
                $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
                $data = mysql_fetch_array($req);
		
                mysql_free_result($req);
	           print_r($req);
		        mysql_close();
		// si on obtient une réponse, alors l'utilisateur est un membre
		if ($data[0] == 1) {
			session_start();
			$_SESSION['login'] = $_POST['login'];
			header('Location: logo.php');
			exit();
			print_r($data[0]);
		}
		// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
		
		elseif ($data[0] == 0) {
			$erreur = 'Compte non reconnu.';
		}
		// sinon, alors la, il y a un gros problème :)
		else {
			$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
		}
	}
	else {
		$erreur = 'Au moins un des champs est vide.';
	}
	echo $req;
}
?>

Re: Problème avec login et pass

par xTG » 05 mars 2012, 10:25

As-tu mis des affichages dans chaque if comme je te l'avais recommandé ?

Re: Problème avec login et pass

par msi79 » 04 mars 2012, 23:23

je viens de mettre :
 <td width="47"><input type="submit" name="connexion" value="connexion"></td>
ça m'affiche :

array(3) { ["login"]=> string(5) "admin" ["pass"]=> string(5) "admin" ["connexion"]=> string(9) "connexion" }

et rien ne se passe toujours je reviens sur la page index.php

Re: Problème avec login et pass

par xTG » 04 mars 2012, 23:09

<td width="47"><input type="submit" name="connexion" value="login"></td>

Re: Problème avec login et pass

par msi79 » 04 mars 2012, 22:54

comment je corrige ça ?

Re: Problème avec login et pass

par xTG » 04 mars 2012, 22:35

["connexion"]=> string(5) "login"
Le voilà le problème, ton code recherche la valeur "connexion" et non "login".

Re: Problème avec login et pass

par msi79 » 04 mars 2012, 21:57

oui c'est bien
header('Location: logo.php');
que j'ai commenté .
j'ai mis : var_dump($_POST)

voici ce qui s'affiche :
array(3) { ["login"]=> string(4) "sool" ["pass"]=> string(10) "cool75sool" ["connexion"]=> string(5) "login" }

Re: Problème avec login et pass

par xTG » 04 mars 2012, 19:52

C'est bien ce header là que tu as commenté ?
header('Location: logo.php');
Cela voudrait dire qu'il ne rentre pas dans la condition de validation du formulaire donc.
Mets un var_dump($_POST) en haut de script pour vérifier ce qu'envoie le formulaire.
Et mets un affichage après chaque if pour tester leur validation.

Re: Problème avec login et pass

par msi79 » 04 mars 2012, 18:02

je viens de commenter le fonction header() et quand je me connecte ça me ramène toujours sur la même page de login .
je remet le code entier .

<?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
	if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

		include("connection.php"); 

		// on teste si une entrée de la base contient ce couple login / pass
	      // on teste si une entrée de la base contient ce couple login / pass
                $sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"';
                $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
                $data = mysql_fetch_array($req);
		
                mysql_free_result($req);
	
		        mysql_close();
		// si on obtient une réponse, alors l'utilisateur est un membre
		if ($data[0] == 1) {
			session_start();
			$_SESSION['login'] = $_POST['login'];
			header('Location: logo.php');
			exit();
		}
		// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
		
		elseif ($data[0] == 0) {
			$erreur = 'Compte non reconnu.';
		}
		// sinon, alors la, il y a un gros problème :)
		else {
			$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
		}
	}
	else {
		$erreur = 'Au moins un des champs est vide.';
	}
	echo $req;
}
?>
<html>
<head>
<title>Accueil</title>
<style type="text/css">
<!--
.Style6 {color: #FFFFFF; font-style: italic; font-weight: bold; }
.Style7 {
	color: #FFFFFF;
	font-style: italic;
}
.Style8 {color: #FF00FF}
-->
</style>
</head>

<body>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br />
</p>
<form action="index.php" method="post">
<br />
<table border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#FF00FF">
  <td height="65" width="80"><table width="536" height="139" border="0" align="center" bgcolor="#0A5B79">
    <tr>
      <td colspan="2"><table width="512" border="0" align="center">
        <tr>
          <td width="395"><h1 align="center" class="Style8">Identifiez-vouz !! </h1></td>
          <td width="101"><img src="images/logo3.jpg" alt="dfghj" width="100" height="70"></td>
        </tr>
      </table>
      </td>
    </tr>
    <tr>
      <td width="109"><span class="Style6">Login : </span></td>
      <td width="417"><input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"></td>
    </tr>
    <tr>
      <td><span class="Style6">Mot de passe : </span></td>
      <td><input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"></td>
    </tr>
    <tr>
      <td colspan="2"><table width="53" border="0" align="center">
          <tr>
            <td width="47"><input type="submit" name="connexion" value="login"></td>
          </tr>
        </table>
          <table width="100" border="0" align="right">
            <tr>
              <td width="94"><a href="inscription.php" class="Style7">Vous inscrire</a></td>
            </tr>
        </table></td>
    </tr>
  </table></td>
</table>
<br />
</form>

<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
</body>
</html>

Re: Problème avec login et pass

par xTG » 04 mars 2012, 17:23

Okay, possibilité de session_start() qui fonctionne pas à cause de caractères parasites donc. (tout du moins mon hypothèse se base sur le fait que le login fonctionne et qu'il te redirige vers logon.php puis à cause de la session inexistante vers index.php)
Commentes la fonction header() pour qu'elle ne s'exécute pas.
Et tentes de te connecter, soit tu tombes sur une page blanche et là faudra aller voir du côté des logs du serveur, soit tu auras l'erreur d'affichée.

Re: Problème avec login et pass

par msi79 » 04 mars 2012, 16:11

je viens de tenter ta deuxième solution mais toujours la même chose :

voici la partie :
	// on teste si une entrée de la base contient ce couple login / pass
		$login_saisi = mysql_escape_string($_POST['login']);
               $pass_saisi = mysql_escape_string(md5($_POST['pass']));
               $sql = "SELECT count(*) FROM membre WHERE `login`='$login_saisi'  AND `pass_md5`='$pass_saisi'";
	       $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
		echo $login_saisi;
		echo $pass_saisi;
		$data = mysql_fetch_array($req);

		mysql_free_result($req);

Re: Problème avec login et pass

par sirakawa » 04 mars 2012, 15:40

j'ai mi
print "<br>$sql<br>"; die();
print "<br>$sql<br>"; die(); mais rien ne s'affiche . ça me ramène toujours sur la même page c'est à dire la page de login
Vérifie que tu passes bien dans le if:
<?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
        if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {
print "<br>On est dans le if"; die();
Si oui;
Modifie mon print en
print "<br> la requête $sql<br>"; die();
et si la requête est vide, teste ma deuxième solution en faisant afficher $login_saisi et $pass_saisi...

Re: Problème avec login et pass

par msi79 » 04 mars 2012, 15:23

voici le code de logo.php
<?php
session_start();
if (!isset($_SESSION['login'])) {
	header ('Location: index.php');
	exit();
}
?>
Bienvenue----<?php echo htmlentities(trim($_SESSION['login'])); ?>!<br />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
<script type="text/JavaScript">
<!--
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
</head>

<body onload="MM_preloadImages('images/logo2.jpg')">

<a href="deconnexion.php">Déconnexion</a>
<p><a href="#" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('logo1','','images/logo2.jpg',1)"></a>
</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<table width="1206" height="146" border="0" align="center">
  <tr>
    <td colspan="8">&nbsp;</td>
  </tr>
  <tr>
    <td width="124"><img src="images/images (3).jpg" alt="41" width="124" height="125" /></td>
    <td width="130"><img src="images/images (2).jpg" alt="4" width="130" height="131" /></td>
    <td width="148"><img src="images/images.jpg" alt="11" width="148" height="147" /></td>
    <td width="164"><img src="images/images (8).jpg" alt="1" width="164" height="146" /></td>
    <td width="158"><img src="images/images (5).jpg" alt="4" width="144" height="161" /></td>
    <td width="150"><img src="images/pc-portable.jpg" alt="401" width="150" height="150" /></td>
    <td width="150"><img src="images/LD0000901222_1.jpg" alt="11" width="150" height="150" /></td>
    <td width="150"><img src="images/moniteurlcd.jpg" alt="11" width="150" height="150" /></td>
  </tr>
  <tr>
    <td colspan="8"><table width="1198" border="0">
      <tr>
        <td bgcolor="#0A5B79">&nbsp;</td>
      </tr>
    </table></td>
  </tr>
</table>
<p>&nbsp;</p>
<table width="200" border="0" align="center" bordercolor="#0F5A7A">
  <tr>
    <td><a href="#" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('logo1','','images/logo2.jpg',1)"><img src="images/logo1.jpg" alt="edfghjk" name="logo1" width="905" height="215" border="0" id="logo1" /></a></td>
  </tr>
</table>
<table width="115" border="0" align="center">
  <tr>
    <td width="109"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="105" height="21" title="ENTRER">
      <param name="movie" value="button104.swf" />
      <param name="quality" value="high" />
      <embed src="button104.swf" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="105" height="21" ></embed>
    </object></td>
  </tr>
</table>
<p>&nbsp;</p>
</body>
</html>