[RESOLU] Pb mysql_num_rows lors d'une authentification

Eléphant du PHP | 65 Messages

31 août 2012, 18:42

Bonjour,
Voilà j'ai un souci sur ma page lors d'un test pour une authentification.
Voici mon code:
<?php
	if(isset($_POST['login']) && isset($_POST['password']))
	{
		$login=$_POST['login'];
		$password=$_POST['password'];
		if(verification($password, $login) === true)
		{
			echo 'ok';
			$_SESSION['login']= $nom_sql;
			header ('location:./accueil.php');
		}
		else
		{
			$message="Mauvais mot de passe";
		}
	}
////////////////////////////////////////////////////////////////////////
function verification($password, $login)
{
  include ("admin/connectbase.php");
  //echo "$login $password";
  $nom_sql=$login;
  $passe_sql=md5($password);
  echo "$nom_sql $passe_sql";
  $query = "select * from users where login='$nom_sql' AND mdp='$passe_sql'"; 
  $result = mysql_query($query) or mysql_error();
	if(mysql_num_rows($result)>0)
	{
        return true;		
	}
    else
	{
        return false;
	}
}
?>
L'erreur que j'ai est:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\...\Desktop\intra_CTDR\admin\veriflog.php on line 27

Pourriez vous m'aider s'il vous plait ?
Merci d'avance!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

31 août 2012, 23:48

salut,

$result est un bool, soit requete foireuse, plutôt le résultat du ou logique entre mysql_query et mysql_error :mrgreen:


Corrige ton code ainsi ça devrait aller mieux :)
<?php
function verification($password, $login)
{
  include ("admin/connectbase.php");
  //echo "$login $password";
  $nom_sql=$login;
  $passe_sql=md5($password);
  echo "$nom_sql $passe_sql";
  $query = "select * from users where login='$nom_sql' AND mdp='$passe_sql'";
  $result = mysql_query($query);
if ($result === false)
    echo 'Erreur sql '.mysql_error();
else 
        if(mysql_num_rows($result)>0)
        {
        return true;           
        }
    else
        {
        return false;
     }
?>
@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 65 Messages

01 sept. 2012, 08:29

Bonjour,
Merci pour ta réponse. Ca a avancé un peu cependant ma variable $result me renvoie un truc bizarre :
Resource id #6
Celle ci ne devrait pas me renvoyer le nombre de ligne trouver avec ce login et ce mot de passe normalement ?
Merci d'avance. Bonne journée.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 sept. 2012, 11:11

non


$result est bie une ressource mysql, le résultat de mysql_num_rows($result) donne le nombre de tuples retourné ;)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 65 Messages

01 sept. 2012, 17:46

$result me renvoie Resource id #6 donc je ne rentre pas dans la boucle if ci dessous car $result ne me renvoie pas false ou true !!
if($result === false)
	{
        echo 'Erreur sql '.mysql_error();		
	}
    else
	{
		//echo $result;
        if(mysql_num_rows($result)>0)
		{
			return true;
		}
		else
		{
			return false;
		}
Mon code ne s'exécute pas entièrement mais je n'ai pas de message d'erreur!!
Merci d'avance

Eléphant du PHP | 65 Messages

02 sept. 2012, 20:59

Voilà pb résolu merci beaucoup à toi Moogli! Le souci que j'avais en fait est tout con c est que lorsque j'enregistre un mdp il se fait en md5 et ce champ du mdp je l'avais mis en varchar 30 carac alors qu'il en faisait 33 lorsqu'il le transformait avec le md5 donc lorsque j’essayais de me connecter bien ça marcher pas évidement vu qu les 2 mdp étaient différents du coup lol

ViPHP
AB
ViPHP | 5818 Messages

02 sept. 2012, 22:37

Ton code n'est pas protégé des injections sql. Tu dois utiliser mysq_real_escape_string pour protéger tes variables dans les requêtes.
Et pendant que tu y es, tu ne devrais plus utiliser l'extension mysql qui est en cours de dépréciation mais plutôt mysqli en mode procédural si veux avoir une syntaxe presque identique à celle de mysql (donc cela demande très peu de travail pour passer de mysql à mysqli) ou sinon PDO.

Eléphant du PHP | 65 Messages

03 sept. 2012, 07:05

Je t'avoue que tu m'as un peu perdu AB lol! J'ai fait du php il y a plus de 5 ans et là je reprend un peu. Pourrais tu m'expliquer le mysqli stp?! Je suis censé marquer mysqli à chaque fois à la place de mysql maintenant? Et pour en revenir à mysq_real_escape_string pourrais tu m'expliquer également en quoi ça consiste exactement stp? E me donner un exemple concret dans mon code afin de bien cerner son utilisation?
Merci beaucoup pour ces renseignements
Bonne journée.

ViPHP
AB
ViPHP | 5818 Messages

03 sept. 2012, 09:44

mysqli c'est presque pareil que mysql, excepté qu'il y a plus de fonctionnalités (possibilité de requêtes préparées par exemple) et qu'il faut passer l'identifiant de connexion plus souvent dans les fonctions, comme par exemple mysqli_real_escape_string. Regardes dans les liens que je t'ai donnés, c'est bien expliqué. Mais à part l'identifiant de connexion qui est obligatoire plus souvent, le reste est identique. Comme tu peux le lire mysql est déconseillé pour les nouveaux projets.