Page 1 sur 1

Probleme function query()

Posté : 18 mars 2006, 13:19
par sasg
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;
        }
    }
...
?>

Posté : 18 mars 2006, 13:53
par Ryle
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 :)

Posté : 18 mars 2006, 14:49
par sasg
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

Posté : 18 mars 2006, 16:22
par Ryle
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 :)

Posté : 18 mars 2006, 16:45
par sasg
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 :?

Posté : 18 mars 2006, 16:56
par Ryle
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 :)

Posté : 18 mars 2006, 17:13
par sasg
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: