Page 1 sur 1

Programme de login pour section à accès réservé

Posté : 19 juin 2012, 16:07
par gulit
bonjour à tous,
Ayant pour objectif d'apprendre à maitriser le php et les bases de données Sql, je suis en train d'effectuer un exercice me permettant de m'améliorer.

Le soucis c'est qu'une fois ma base de donnée réalisée (table + données fictives me servant d'exemple) et mon code php écrit, j'ai voulu testé : or cela ne fonctionne pas en effet lorsque je rentre mon login et mon mot de passe (en ayant passé par Wamp : localhost) et celui ci me renvoit à "Le nom de login que vous avez saisi n'existe pas. Essayez encore" ; c'est à dire au message de renvoi en cas de mauvais login alors que le login et MdP est rentré correctement

Quelqu'un peut il m'aider !

<?php
/*Programme : Login.php
* Descripition : Programme de login pour la section à accès réservé. 
* 				1-s'identifier par un couple nom de login/mot de passe
*				Identificateurs et mots de passe sont conservés dans une base de de données MySql
*/
session_start();
	include("chiens.inc");
	switch(@$_POST['do'])
{
	case"login":
		$cxn=mysqli_connect("localhost","root","","memberdirectory")
		or die ("Connexion impossible au serveur dans case login");
		
	$sql = "SELECT LoginName FROM member WHERE LoginName='$_POST [fusername]'";
	$result = mysqli_query($cxn,$sql)or die("Requête en échec 1.");
	$num=mysqli_num_rows($result);
	if ($num>0) // loginname non trouvé
	{
	$sql="SELECT LoginName FROM member WHERE LoginName='$_POST[fusername]'AND password=md5('$_POST[fpassword]')";
	$result2 = mysqli_query($cxn,$sql)or die("Requête en échec 2.");
	$num2=mysqli_num_rows($result2);
	if ($num2>0)  // Mot de passe OK
	
	{
				$_SESSION['auth']="yes";
				$logname=$_POST['fusername'];
				$_SESSION['logname']=$logname;
				$today=date("Y-m-d h:i:s");
				$sql="INSERT INTO Login (loginName, loginTime)
	 				VALUES('$logname','$today')";
				$result=mysqli_query($cxn,$sql)or die("INSERT en échec.");
				header("Location:espace_prive.php");	
			}
			
			else // mot de passe incorrect
			{
		$message="Le nom de Login '$_POST[fusername]' existe, mais le mot de passe ne va pas ! Réessayez.<br>";
		include ("login_form.inc");
			}
	}
	
	elseif ($num==0)  // Nom de login introuvable
	{
		$message="Le nom de login que vous avez saisi n'existe pas. Essayez encore.<br>";
		include("login_form.inc");
	}
	
	break;

	default:
		include("login_form.inc");}
		?>

Re: Programme de login pour section à accès réservé

Posté : 19 juin 2012, 16:09
par xTG
Tu peux utiliser mysqli_error() pour regarder les messages d'erreurs retournés par les requêtes.

Ensuite je pense que le souci vient surtout de ta façon d'insérer des variables dans une String :
$sql = "SELECT LoginName FROM member WHERE LoginName='$_POST [fusername]'"; // pas top et je reste persuadé qu'à cause de l'espace c'est pas détecté comme un index d'array
$sql = "SELECT LoginName FROM member WHERE LoginName='" . $_POST['fusername']. "'"; // un peu mieux
$sql = "SELECT LoginName FROM member WHERE LoginName='" . mysql_real_escape_string($_POST['fusername']) . "'"; // et avec protection anti-injection encore mieux !

Re: Programme de login pour section à accès réservé

Posté : 19 juin 2012, 16:50
par Gulit
Merci xTG,
Maintenant et comme je le signalais au début je débute pourrais tu m''aiguiller" sur la ligne de code pour vérification MdP.
$sql="SELECT LoginName FROM member WHERE LoginName='$_POST[fusername]'AND password=md5('$_POST[fpassword]')";

Re: Programme de login pour section à accès réservé

Posté : 19 juin 2012, 16:57
par AB
Suis les conseils de xTG et protège tes variables avec mysql_real_escape_string.

Tu as un pb de logique dans ton code : à la place de "if ($num>0) // loginname non trouvé" cela devrait être "if ($num==0) // loginname non trouvé"

Pour les débutants rien ne vaut un bon tuto

Re: Programme de login pour section à accès réservé

Posté : 20 juin 2012, 09:45
par Gulit
Salut,
Bon voila mon code, il marche en partie càd :
Il reconnait le login donc : la connexion à la BDD se fait en revanche le MdP je n'arrive pas à l'associé à tel ou tel login ! #-o #-o #-o
<?php

session_start();
	include("chiens.inc");
	switch(@$_POST['do'])
{
	case"login":
		$cxn=mysqli_connect("localhost","root","","memberdirectory")
		or die ("Connexion impossible au serveur dans case login");
		
		
	$sql = "SELECT LoginName FROM member WHERE LoginName='" . mysql_real_escape_string($_POST['fusername']) . "'";
	$result = mysqli_query($cxn,$sql)
				or die("Requête en échec 1.");
	$num=mysqli_num_rows($result);
	if ($num>0) // loginname trouvé
	{
	$sql= "SELECT LoginName FROM member WHERE LoginName='" . mysql_real_escape_string($_POST['fpassword']) . "'";
	$result2 = mysqli_query($cxn,$sql)
				or die("Requête en échec 2.");
	$num2=mysqli_num_rows($result2);
	if ($num2>0)  // Mot de passe OK
	
	{
				$_SESSION['auth']="yes";
				$logname=$_POST['fusername'];
				$_SESSION['logname']=$logname;
				$today=date("Y-m-d h:i:s");
				$sql="INSERT INTO Login (loginName, loginTime)
	 				VALUES('$logname','$today')";
				$result=mysqli_query($cxn,$sql)or die("INSERT en échec.");
				header("Location:espace_prive.php");	
			}

			else // mot de passe incorrect
			{
		$message="Le nom de Login '$_POST[fusername]' existe, mais le mot de passe ne va pas ! Réessayez.<br>";
		include ("login_form.inc");
			}
	}
	
	elseif ($num==0)  // Nom de login introuvable
	{
		$message="Le nom de login que vous avez saisi n'existe pas. Essayez encore.<br>";
		include("login_form.inc");
	}

	break;

	default:
		include("login_form.inc");}
		?>

Re: Programme de login pour section à accès réservé

Posté : 20 juin 2012, 09:49
par xTG

Code : Tout sélectionner

LoginName='" . mysql_real_escape_string($_POST['fpassword'])
:roll:

De plus faire deux requêtes n'est pas tiptop niveau performance, tu peux avec la première récupérer le mot de passe et ensuite faire la comparaison en PHP.

Re: Programme de login pour section à accès réservé

Posté : 20 juin 2012, 10:15
par Gulit
Merci xTG, pour tes réponses et ta réactivité !


De plus faire deux requêtes n'est pas tiptop niveau performance, tu peux avec la première récupérer le mot de passe et ensuite faire la comparaison en PHP.
Je veux bien mais comment ? je te le disais et après avoir lu et vu divers tuto, je ne maitrise pas tout; c'est mon premier projet Php ! :oops:

Re: Programme de login pour section à accès réservé

Posté : 20 juin 2012, 15:00
par xTG
Tu rajoutes le champ dans les paramètres du SELECT.
Puis pour récupérer ce champ il faut itérer sur la ressource.
Comme tu n'es censé n'avoir qu'un seul enregistrement concerné (plusieurs utilisateurs avec le même pseudo c'est pas top on en convient) tu peux utiliser mysql_result().
http://fr.php.net/mysql_result