IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

[SGBD] erreur mysql_num_rows();


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut [SGBD] erreur mysql_num_rows();
    J'ai un syteme de connection sur mon site ou je verifie si ma requete retourne bien un resultat, que je test grace a mysql_num_rows();

    Si la personne qui se logue existe pas de probleme mon code fonctionne elle se connecte et tout ca bien

    Maintenant si la personne se trompe ou si pas de compte j'ai une erreur au niveau de l'utilisation de le fonction mysql_num_rows();

    Pourquoi?

    voici mon bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    if(isset($_POST['login'])) 
    { 
    	$username = htmlentities($_POST['username']); 
        $psw = htmlentities($_POST['psw']); 
    	$db_psw = md5($psw); 
     
        $queryconnec = mysql_query("SELECT username,level,id FROM mib_membre WHERE username = '$username' AND psw = '$db_psw'") OR die('Erreur !<br/>' .mysql_error());
        $resultconnec = mysql_num_rows($queryconnec) OR die('ERREUR LIGNE ! <br/>'.mysql_error());
     
    	if($resultconnec != 0)
    	{
    		while($membre = mysql_fetch_array($queryconnec))
    		{
    			$_SESSION['id'] = $membre['id'];
    			$_SESSION['username'] = $membre['username'];
    			$_SESSION['lelve'] = $membre['level'];
    		}
    	}
    	else
    	{
    		$tpl->set_var('MESSAGE_PRIVE','Impossible de vous connecter avec ces informations : (Speudo :'.$username.', MDP :'.$psw.').');
    	}      
    }
    Merci a tous pour votre aide.

  2. #2
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    J"imagine que dans le cas ou mysql ne renvoie pas de ligne (pas de compte ou erreur de login), mysql_query = false.
    Donc quand tu le passes dans mysql_num_rows, tu as le droit à une erreur car mysql_num_rows ne sait pas gérer les false, juste les ressources.

    donc je penses qu'en rajoutant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if($queryconnec == false)
    {
    $tpl->set_var('MESSAGE_PRIVE','Impossible de vous connecter avec ces informations : (Speudo :'.$username.', MDP :'.$psw.').'); 
    }
    Tu devrais pouvoir t'en tirer.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    voila ce que je lis dans la doc php

    Le nombre de lignes dans un jeu de résultats en cas de succès, ou FALSE si une erreur survient.
    Donc false quand il y a une erreur, hors la, ma requete ce passe bien, mais juste pas de resultat.

    Donc je comprend pas trop.

    Maintenant je vais tester ta solution et voir ce que ca donne merci

    EDIT

    Voici les modifications

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    //Si la personne se loggue
    if(isset($_POST['login'])) 
    { 
    	$username = htmlentities($_POST['username']); 
        $psw = htmlentities($_POST['psw']); 
    	$db_psw = md5($psw); 
     
        $queryconnec = mysql_query("SELECT username,level,id FROM mib_membre WHERE username = '$username' AND psw = '$db_psw'") OR die('Erreur !<br/>' .mysql_error());
        //$resultconnec = mysql_num_rows($queryconnec) OR die('ERREUR LIGNE ! <br/>'.mysql_error());
     
    	if($queryconnec != false)
    	{
    		while($membre = mysql_fetch_array($queryconnec))
    		{
    			$_SESSION['id'] = $membre['id'];
    			$_SESSION['username'] = $membre['username'];
    			$_SESSION['lelve'] = $membre['level'];
    		}
    	}
    	else
    	{
    		$tpl->set_var('MESSAGE_PRIVE','Impossible de vous connecter avec ces informations : (Speudo :'.$username.', MDP :'.$psw.').');
    	}      
    }
    Donc comme je le disais y a pas d'erreur pour le SELECT et donc ca passe pas dans le else si le mot de pass ou le nom utiisateur est pas bon.

    Donc non ta modi ne fonctionne pas dsl

  4. #4
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    j'ai confondu avec le comportement mysql_fetch_*...

    Rajoutes un @ devant ton mysql_num_rows

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    non fonctionne toujours pas avec le @

    rrrrrr je rage car me semble j'avais deja eu un probleme du meme style avec un autre site internet que j'avais fait et ca c'etait passé comme par magie

  6. #6
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    hmmm j'ai pourtant testé..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql = "SELECT *
    FROM `test`
    ";
    $query = mysql_query($sql);
     
    echo @mysql_num_rows($query); // 4627
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql = "SELECT *
    FROM `test`
    WHERE id = -1
    ";
    $query = mysql_query($sql);
     
    echo @mysql_num_rows($query); // 0

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Je pense que c'est plus sournois que cela...

    Dans un premier temps, ePoX, mysql_query() ne renvoie false que s'il n'a pas pu exécuter la requête. S'il a pu l'exécuter mais qu'elle ne renvoie pas de résultats, ça s'est bien passé donc pas de raison de renvoyer false.

    D'autre part et pour en revenir à la question du départ, c'est là que ça devient fourbe. Je n'ai pas testé ton code mais j'imagine que le code suivant évalue à false :
    Par conséquent, si mysql_num_rows() renvoie zéro, alors c'est équivalent à false, ce qui veut dire que ceci exécute or die() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultconnec = mysql_num_rows($queryconnec) OR die('ERREUR LIGNE ! <br/>'.mysql_error());

  8. #8
    Membre Expert
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Par défaut
    Dans un premier temps, ePoX, mysql_query() ne renvoie false que s'il n'a pas pu exécuter la requête. S'il a pu l'exécuter mais qu'elle ne renvoie pas de résultats, ça s'est bien passé donc pas de raison de renvoyer false.
    Oui, j'avais été un peu vite et avait confondu mysql_fetch_array qui renvoie false lorsqu'il n'y à plus de ligne et mysql_query qui ne renvoie que l'état d'execution de la commande bonne (true) ou mauvaise (false).

    Ceci dit tu as raison lorsque mysql_num_rows renvoie 0, ce qui est le cas dans le probleme plus haut, il passe dans le or die.

    donc le die n'à pas sa place ici.

    Ce qui nous donnerait quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $queryconnec = mysql_query("SELECT username,level,id FROM mib_membre WHERE username = '$username' AND psw = '$db_psw' LIMIT 0,1") OR die('Erreur !<br/>' .mysql_error()); 
        $resultconnec = @mysql_num_rows($queryconnec);
     
       if($resultconnec > 0) 
       { 
          $_SESSION = mysql_fetch_array($queryconnec , MYSQL_ASSOC)
       }
    J'ai un peu alléger le code au passage.

    bye

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    je suis oki pour le or die c'est fourbe mais la ou ca l'est encore plus c'est que mon code du else si je vire le or die(); ne s'execute pas

    je parle de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    else 
       { 
          $tpl->set_var('MESSAGE_PRIVE','Impossible de vous connecter avec ces informations : (Speudo :'.$username.', MDP :'.$psw.').'); 
       }
    si je vire le or die j'ai plus d'erreur la page ce genere mais le else ne s'execute pas, la variable du TPL ne s'inscrit pas rrrrr

    Et la je bloque totaly, j'ai just efais un progres je sais que faut pas metre un or die(); apres mysql_num_rows(); je sais deja d'ou viens l'erreur.

    Dsl la je pars pour 24H je testerais le code avec affichage de mon mysql_num_rows(); sans le or die(); (j'aurais du y penser avant deja lol)
    donc si vous avez d'autre piste merci de votre aide

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    @ePoX : en effet, tu l'avais dit mais je préférais être limpide ^^

    @zulot : c'est tout à fait normal
    En fait, tu as déjà fait mourir ton script dans le or die() qui suit mysql_query(), ce qui signifie que ton test if($queryconnec != false) est complètement inutile : il sera toujours vrai.

    [Edit] Oops, je t'ai lu un peu rapidement moi aussi.
    Perso, j'ai tendance à adopter une structure de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    mysql_connect()
       or die(); // S'il n'y a pas de connexion, inutile d'aller plus loin
    mysql_select_db()
       or die(); // S'il n'y a pas de BDD, inutile d'aller plus loin
     
    $sql = '...';
    $result = mysql_query($sql)
       or die(); // S'il n'y a pas de requête, inutile d'aller plus loin
     
    if(mysql_num_rows($result) == 0){
       // Gestion d'erreurs
    }
    else{
       // Parcours des résultats : while...
    }

  11. #11
    Membre confirmé
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Avril 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 29
    Par défaut
    Un conseil fait afficher tes query.

    Il me semble que ta query retourne des valeurs non valable

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    Ouais je vais verifier ma query, j'ai pas relu mon code mais crois savoir ou est l'erreur a cause d'un double emploi d'une variable.

    Je vais verifier ca des je serais rentré chez moi et en presence du code.
    Merci pour votre aide on continue a chercher je vous tiens au courant. dans la journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] [SGBD] Erreur sur Mysqli_close
    Par berceker united dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/06/2006, 00h43
  2. Erreur MySQL_num_row
    Par sigap dans le forum Outils
    Réponses: 3
    Dernier message: 03/05/2006, 15h24
  3. erreur mysql_num_rows?????,
    Par ouldfella dans le forum Requêtes
    Réponses: 30
    Dernier message: 27/02/2006, 14h30
  4. [SGBD] erreur mysql_fetch_array
    Par Le Mage Noir dans le forum Requêtes
    Réponses: 18
    Dernier message: 09/02/2006, 13h07
  5. Réponses: 3
    Dernier message: 30/09/2004, 21h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo