Page 1 sur 2

Problème avec login et pass

Posté : 04 mars 2012, 11:53
par zana
salut j'ai eu un code sur le net que j'essaie de l'adapter mais j'arrive pas .
il s'agit de permettre aux utilisateurs de s'identifier avant de se connecter .
le code n'affiche aucune erreur mais ne me dirige pas vers la page souhaitée . en plus je veux qu'à chaque fois qu'on revient sur la page pour s'identifier les champs soient vides .
merci de bien vouloir m'aider
voici la table que j'ai crée :

-- Structure de la table `membre`
--

CREATE TABLE IF NOT EXISTS `membre` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`login` text COLLATE utf8_unicode_ci NOT NULL,
`pass_md5` text COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;

--
-- Contenu de la table `membre`
--

INSERT INTO `membre` (`id`, `login`, `pass_md5`) VALUES
(1, 'admin', '21232f297a57a5a743894a0e4a801fc3'),
(2, 'sool', '624fbbcb1b3567572e39d302f3e018fc'),
(3, 'zana', '9734c1859c07d4ca1a7034659db2594c');

voici mon code :
<?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
		$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.';
	}
}
?>
<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="connexion"></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

Posté : 04 mars 2012, 12:14
par xTG
Le code m'a l'air très bien. Hormis le fait qu'utiliser empty et isset en même temps n'a pas beaucoup d'intérêt.
Pour supprimer les valeurs dans le formulaire il te suffit de supprimer le code référençant l'attribut value.
Peux-tu vérifier le code source renvoyé par le navigateur pour vérifier qu'il n'y a vraiment aucune erreur ? (bien que tu n'as pas l'air d'avoir de CSS permettant de cacher une quelconque information à l'écran)

Re: Problème avec login et pass

Posté : 04 mars 2012, 12:32
par sirakawa
// 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())
pourrait devenir:
               $sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"';
print "<br>$sql<br>"; die();
                $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error())
histoire de voir ce que la requête a dans le ventre.
Moi je n'aime pas mêler tout et j'écrirais plus volontiers:
$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'";
qui permet de vérifier séparément les éléments et rend la requête plus lisible

Re: Problème avec login et pass

Posté : 04 mars 2012, 14:46
par msi79
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

Re: Problème avec login et pass

Posté : 04 mars 2012, 15:13
par xTG
Quel est le code de la page logo.php ? Le problème pourrait venir de là...

Re: Problème avec login et pass

Posté : 04 mars 2012, 15:23
par msi79
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>

Re: Problème avec login et pass

Posté : 04 mars 2012, 15:40
par sirakawa
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

Posté : 04 mars 2012, 16:11
par msi79
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

Posté : 04 mars 2012, 17:23
par xTG
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

Posté : 04 mars 2012, 18:02
par msi79
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

Posté : 04 mars 2012, 19:52
par xTG
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

Posté : 04 mars 2012, 21:57
par msi79
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

Posté : 04 mars 2012, 22:35
par xTG
["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

Posté : 04 mars 2012, 22:54
par msi79
comment je corrige ça ?

Re: Problème avec login et pass

Posté : 04 mars 2012, 23:09
par xTG
<td width="47"><input type="submit" name="connexion" value="login"></td>