Probleme function query()

Eléphant du PHP | 108 Messages

18 mars 2006, 13:19

Je ne comprend pas l'erreur que me donne ma page:
Fatal error: Call to a member function query() on a non-object in F:\www\wamp\www\exoPourLesNuls\Chap12\account.class on line 38
voila le code
<?php
class account
{
	private $userID= NULL;
	private $cnx;
	private $table_name;
	private $message;
...
function selectaccount($userID)
    {
        $userID=trim($userID);
        $sql="SELECT user_name FROM $this->table_name WHERE user_name='$userID'";
        if (!$result =$this->cnx->query($sql))//ligne 38
        {
            throw new Exception("Execution de la requete impossible: ".$this->cnx->error());
            return FALSE;
        }
        if ($result->num_rows < 1)
        {
            $this->message="Compte $userID inexistant!";
            return FALSE;
        }
        else
        {
            $this->userID =$userID;
            return TRUE;
        }
    }
...
?>

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

18 mars 2006, 13:53

Est ce que au moment où tu appelles selectaccount(), l'attribut cnx de ton objet account est bien renseigné par un objet ?

un petit print_r($this->cnx); te permettra de voir ce qu'il contient et devrait t'aider à comprendre le message d'erreur :)

Eléphant du PHP | 108 Messages

18 mars 2006, 14:49

je ne vois pas ou je peux pemettre "print_r($this->cnx);"
car c'est un ensemble de fichiers :
4 fichiers class(passwordpromter.class, database.class, account.class, webpage.class)
et 1 fichier .php qui fait appel a eux!

desole je debute mais j'aimerai bien comprendre

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

18 mars 2006, 16:22

Tu peux par exemple le mettre ici :
function selectaccount($userID)  { 
        $userID=trim($userID); 
        $sql="SELECT user_name FROM $this->table_name WHERE user_name='$userID'"; 

        echo '<pre>';
        print_r($this->cnx);
        echo '</pre>';

        if (!$result =$this->cnx->query($sql))//ligne 38 
 
Le but est juste d'afficher le contenu de l'objet cnx. Si celui ci n'est pas correctement initialiser tu le verras ainsi tout de suite, et tu pourras aller essayer de trouver dans le reste de ton code pourquoi il ne l'a pas été correctement :)

Eléphant du PHP | 108 Messages

18 mars 2006, 16:45

function selectaccount($userID)  { 
        $userID=trim($userID); 
        $sql="SELECT user_name FROM $this->table_name WHERE user_name='$userID'"; 

        echo '<pre>';
        print_r($this->cnx);
        echo '</pre>';

        if (!$result =$this->cnx->query($sql))//ligne 38 
 
J'ai le meme message d'erreur :?

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

18 mars 2006, 16:56

Oui ça c'est normal, on a rien fait pour le corriger, on a juste ajouter 3 lignes pour essayer de voir d'où venait le problème. Tu dois donc avoir avant ton message d'erreur ce que contient ton cnx, s'il n'affiche rien c'est qu'il n'est pas instancié, et du coup tu ne peux pas appeler sa méthode query puisqu'il n'en a pas :)

essaye avec print_r($this); sans le ->cnx, ca sera peut être plus parlant pour toi. Cela doit t'afficher à l'écran un truc du genre :

Object account (
userID => xxx,
cnx => Object connexion (
?? => ??,
...
),
table_name => xxx,
message => xxx
)

Tu regarde la valeur de cnx, et si comme je le pense elle est vide, il ne te reste plus qu'à trouver pourquoi elle n'est pas renseignée :)

Eléphant du PHP | 108 Messages

18 mars 2006, 17:13

ah ben voila les choses avance, j'ai eu le droit a un tres joli message

account Object
(
[userID:private] =>
[cnx:private] =>
[table_name:private] =>
[message:private] =>
)

bon je vais essaye de regarde ca
en tout cas merci :D il me reste plus qu'a eplucher les 5 fichiers :cry: