Connexion et message d'erreur. [ PHP ]

Fermé
G... - 3 janv. 2013 à 01:03
tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 - 3 janv. 2013 à 10:33
Bonjour à tous, je fait un formulaire d'inscription qui me pause problème, je suis partie d'un tutoriel que j'ai modifié à ma convenance, mais les vérifications du login et mot de passe via la BDD me pose problème..

Si le login et le mot de passe est OK, j'arrive à me connecter.
Si le formulaire est vide j'ai mon message d'erreur correct.
Si le compte n'est pas reconnu j'ai mon message d'erreur.

Mon problème est que si le login existe mais que le mot de passe est faux, j'ai toujours mon même message de " compte pas reconnu... "

Ce que j'aimerais c'est que :

Je fait les vérifications dans la BDD de si login existe et si le mot de passe est bien associé à un login.
Si le login et le mot de passe est OK dans la BDD, on peut se connecter.
Sinon si le visiteur se trompe de login ou mot de passe ( toujours en interrogeant la BDD )ça affiche " Mauvais login ou mot de passe "
Si le login n'existe pas " Compte non reconnu, veuillez vous inscrire.. "
Sinon " Le formulaire n'est pas valide ! "
Si formulaire est KO, je veut afficher le message d'erreur et le formulaire de connexion.

Je travail depuis plusieurs jours à trouver l'erreur qui fait que mon script ne fonctionne pas comme je le souhaite c'est pourquoi je viens vous demander quelques conseils pour comprendre mes erreurs et pouvoir les corriger, car la je commence malgré plusieurs tentatives, de tout casser et de tout refaire, à ne plus trop comprendre ce qui va pas... A mon avis mon soucis est dans ma structure ( IF... ELSE ) mais je vois pas du tout comment l'optimiser...

Merci pour les explications que vous pourrez me fournir qui me feront grandement avancer
Voici mon code :

<?php
session_start();
// 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 ('test_login.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['login'] = $_POST['login'];
				$erreur = 'Bonjour '.htmlentities(trim($_SESSION['login'])).', <a href="pause1.php">Se déconnecter</a><br />';
			}
		// sinon si on ne trouve aucune réponse, le compte n'existe pas
		elseif ($data[0] == 0){ $erreur = 'Compte non reconnu.'; }
		// sinon le login ou mot de passe est KO
		elseif($_POST['pass'] != $pass_md5){ $erreur = 'Mauvais login ou mot de passe !'; }
		}
	//sinon...
	else{ $erreur = 'Au moins un des champs est vide.'; }
	}
else
//sinon on affiche le formulaire
{
$erreur = '<fieldset>
			<legend> Connexion : </legend>
			<form action="pause1.php" method="post">
				Login : <input type="text" name="login" value="'.htmlentities(trim($_POST['login'])).'">&nbsp;&nbsp;
				Mot de passe : <input type="password" name="pass" value="'.htmlentities(trim($_POST['pass'])).'">&nbsp;&nbsp;
				<input type="submit" name="connexion" value="Connexion">
			</form>
			</fieldset><br />';
}
echo $result;
echo $erreur;
?>
A voir également:

1 réponse

tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 219
3 janv. 2013 à 10:33
Salut,

D'ou sort la variable "$pass_md5"?

Dans tout les cas, votre requête renvoie la valeur 1 ou 0 et rien d'autre ce qui veut dire que vous ne pouvez pas comparer le login ou mot de passe indépendamment juste avec cette requête.
1