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

Administration MySQL Discussion :

mysql_fetch_objet => erreur


Sujet :

Administration MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut mysql_fetch_objet => erreur
    Bonjour,

    Je suis en train de developper (enfin, "essayer de développer") une petite application pour le boulot.
    Je débute en PHP et je suis déjà bloqué au contrôle du Login.

    Lorsque j'exécute le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $request=mysql_query("SELECT login, pass FROM users WHERE login LIKE '$login' AND pass LIKE '$pass';");
      $result=mysql_fetch_object($request);
      if ($pass==$result->pass)
      {
        echo ("Connexion autorisée");
        //header("location: ");
      }
    Je reçois l'erreur :
    Notice: Trying to get property of non-object in c:\program files\easyphp1-8\www\planningchargement\connexion.php on line 19
    Cette ligne 19 correspond à mon "if".

    Je ne comprends pas où se situe le problème.

    Pour info, je travaille avec EasyPHP 1.8 sur lequel j'ai appliqué PHP5.

    Merci d'avance pour votre aide

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Que vaut $pass ?

    EDIT: en fait c'est juste par curiosité, ca ne va pas résoudre forcément ton pb

  3. #3
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Il faudrait vérifier que ta requète renvoie un résultat.

    Tu peux ajouter un test supplémentaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $request=mysql_query("SELECT login, pass FROM users WHERE login LIKE '$login' AND pass LIKE '$pass';");
    if ( mysql_num_rows($request)>0){
    while($result=mysql_fetch_object($request)){
    if ($pass==$result->pass){
    echo ("Connexion autorisée");
    //header("location: ");
    }
    }
    }
    Avec ceci tu vérifies que la requet a renvoyé des lignes.
    Ensuite la boucle while te permet de parcourir toutes les lignes renvoyées ( on ne sait jamais

    Sinon, pour tester qu'une personne a donné les bons identifiants évite les like. Remplace les par des =.
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    ...et attention aux injections SQL avec ce code

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    Le "While" ne change rien, j'ai toujours le même problème.
    J'ai essayé de remplacer les "LIKE" par "=" et c'est toujours pareil.

    Une autre idée ?

    ...et attention aux injections SQL avec ce code
    Qu'est-ce que tu entends par là ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut injections SQL
    C'est la fameuse faille hyper connue que le peut injecter avec ' OR 1='1'

    est-ce que tu as fait un mysql_select_db pour pouvoir utiliser mysql_query au lieu de mysql-db_query?
    Business, Stratégie, Leadership
    Toujours à l'écoute du marché : Surtout en Suisse ! ;-)

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    En fait , j'ai une fonction de connexion
    function connexion()
    {
    $connexion=mysql_pconnect('localhost','root',NULL);
    mysql_select_db('planning', $connexion);
    }
    qui est appelée avant juste avant le mysql_query.

    Comment puis-je être certain que cette connexion a belle et bien fonctionné ?

  8. #8
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut ajoute or die
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function connexion(){
        $connexion=mysql_pconnect('localhost','root','') or die("erreur connexion: ". mysql_error());
        mysql_select_db('planning', $connexion);
    }
    J'ai remplacé le NULL par '' pour éviter sur le warning que soit affiché USING_PASSWORD=NO.
    Business, Stratégie, Leadership
    Toujours à l'écoute du marché : Surtout en Suisse ! ;-)

  9. #9
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Citation Envoyé par Zolex
    Comment puis-je être certain que cette connexion a belle et bien fonctionné ?
    En lisant la doc, on voit :
    Valeur de retour
    Retourne un identifiant de lien persistant MySQL en cas de succès, ou FALSE si une erreur survient.
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par zyongh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function connexion(){
        $connexion=mysql_pconnect('localhost','root','') or die("erreur connexion: ". mysql_error());
        mysql_select_db('planning', $connexion);
    }
    J'ai remplacé le NULL par '' pour éviter sur le warning que soit affiché USING_PASSWORD=NO.
    Merci pour ton aide, mais ça ne change rien, il semble que la connexion passe sans souci étant donné que je n'ai pas le résultat du "die".

    Je ne comprends vraiment pas où se situe le problème.

  11. #11
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Tu peux egalement rajouter un or die sur le mysql_query pour vérifier la bonne execution de la requete.

    Moi je me demande si le problème ne provient pas du fait que tu te connecte au mysql via une fonction
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  12. #12
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Qu'est ce que ça donne ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $request=mysql_query("SELECT login, pass FROM users WHERE login LIKE '$login' AND pass LIKE '$pass';") or die(mysql_error());
    var_dump('<pre>', $request, mysql_fetch_object($request), '</pre>');

  13. #13
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    Voici ce que donne ton exemple :
    string(5) "

    "
    resource(3) of type (mysql result)
    bool(false)
    string(6) "

    "
    Notice: Trying to get property of non-object in c:\program files\easyphp1-8\www\planningchargement\connexion.php on line 18
    Connexion autorisée
    J'ai essayé de ne plus passer par une fonction de connexion et ça ne change rien.

  14. #14
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    mysql_fetch_object retourne un objet avec les propriétés qui correspondent à la ligne récupérée, ou FALSE s'il n'y a plus de lignes. (CF doc)

  15. #15
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut je reprends un détail
    En fait quand j'ai repris ton code pour modifier le null. Je voulais surtout transformer le mysql_pconnect en mysql_connect. Cela ne résoudra pas ton problème et c'est une bonne habitude à prendre de ne pas utiliser mysql_pconnect sauf dans des cas très précis auxquels je n'ai encore jamais eu à faire face.
    Business, Stratégie, Leadership
    Toujours à l'écoute du marché : Surtout en Suisse ! ;-)

  16. #16
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    Je suis d'accord avec toi, mais pourquoi celà ne fonctionne-t-il pas ?

    Petite précision : ce problème n'apparaît que lorsque que j'introduis un mauvais login et/ou mot de passe, dans le cas contraire, ça fonctionne.
    Ceci prouve bien que la connexion à la DB se passe sans problème.

  17. #17
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par zyongh
    En fait quand j'ai repris ton code pour modifier le null. Je voulais surtout transformer le mysql_pconnect en mysql_connect. Cela ne résoudra pas ton problème et c'est une bonne habitude à prendre de ne pas utiliser mysql_pconnect sauf dans des cas très précis auxquels je n'ai encore jamais eu à faire face.
    Il y a 2 écoles qui s'opposent à ce sujet.
    Lors de ma (courte) formation PHP, l'utilisation du mysql_pconnect était conseillée. D'un autre côté, pas mal de personne recommande plutôt le mysql_connect.

    Peux-tu expliquer ton point de vue ?

  18. #18
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Pour ma part, je n'utilise pas de connexion persistante car dans mes applications mes pages sont généralement indépendantes les unes des autres.

    Même entre l'affichage d'infos et une eventuelle nouvelle requete, il peut s'écouler un laps de temps non négligeable pendant laquelle la connexion reste ouverte si celle-ci a été ouverte en mode persistant.

    D'ailleurs dans la doc, ils avertissent bien que l'tulilistaion de connexions persistantes requiert un paramétrage fin d'apache et de mysql pour éviter la saturation.
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  19. #19
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    Merci pour cette précision.

    En ce qui concerne mon problème, je progresse un peu.
    Avec le code complet suivant :
    <?php

    // Fonction de connexion à la DB
    function connexion()
    {
    $connexion=mysql_connect('localhost','root','')or die("erreur connexion: ". mysql_error());
    mysql_select_db('planning', $connexion);
    }

    // Contrôle du login et du pass
    if (isset($_POST["login"]) && isset($_POST["pass"]))
    {
    $login=strtolower($_POST["login"]);
    $pass=$_POST["pass"];
    connexion();
    $request=mysql_query("SELECT login, pass FROM users WHERE login LIKE '$login' AND pass LIKE '$pass';") or die(mysql_error());
    $result=mysql_fetch_object($request);
    if (($login==$result->login) && ($pass==$result->pass))
    {
    echo ("Connexion autorisée");
    //header("location: ");
    }
    else
    {
    echo ("Login ou Password invalide");
    }
    }
    ?>
    Tout fonctionne correctement excepté le fait que, lors d'un login et/ou mot de passe incorrects, j'ai le message suivant :
    Notice: Trying to get property of non-object in c:\program files\easyphp1-8\www\planningchargement\connexion.php on line 18
    Login ou Password invalide
    Donc, c'est un simple "warning", mais j'aimerais bien le faire disparaitre.

    Une idée ???

    Merci d'avance.

  20. #20
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Oui car tu n'utilise pas la méthode que je t'ai donné à savoir toujours testé le nombre de lignes retournées par une requete de type select

    Car si aucune ligne n'est renvoyée, alors le mysql_object renvoie rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (mysql_num_row($req) > 0) //alors traitement
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 22h20
  2. Check Url pour savoir si erreur 404 ou si le site existe
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 13h49
  3. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  4. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 15h05
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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