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

Langage PHP Discussion :

Call to a member function on a non object..


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2011
    Messages : 70
    Par défaut Call to a member function on a non object..
    Bonjour

    Je revient à la charge, toujours dans l'apprentissage du POO. décidémment..
    Je reçoit cette erreur en essayant de regrouper 2 fonctions touchant mysql dans une classe.

    J'ai donc index.php, avec
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php include("functions.php"); ?>

    functions.php dont les premières lignes sont:
    Code php : 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
     
    class bdd {
    	private $host="xxx";
    	private $user="xxx";
    	private $base="xxx";
    	private $pwd="xxx";
     
    	public function connect() {
    		if(!empty($this->host) && !empty($this->user) && !empty($this->base) && !empty($this->pwd)) {
    			$db=@mysql_connect($this->host, $this->user, $this->pwd) or die("<span class='error'>Erreur de connexion à la base</span>");
    			@mysql_select_db($this->base,$db) or die("<span class='error'>Erreur de sélection de base</span>");
    			mysql_set_charset('utf8');
    		}	
    	}
     
    	public function execute($req) {
    		$sql = @mysql_query($req) or die("<span class='error'>Erreur d'éxécution !</span><br>[".$req."]<br><u>Réponse:</u>".mysql_error()); 
    		return $sql;	
    	}	
    }
     
    $bdd = new bdd();
    $bdd->connect();

    Et j'obtiens l'erreur
    Fatal error: Call to a member function execute() on a non-object in /public_html/configs/functions.php on line 172
    Voici la fonction en cause dans functions.php ligne 172:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function isHeAdmin($pse) {
    	$checkRankSql = "SELECT * FROM comptes WHERE login_user='".$pse."'";
    	$checkRank = $bdd->execute($checkRankSql);
    	$cr=mysql_fetch_assoc($checkRank);
    	if($cr['rank_user']==1) {
    		return true;
    	}
    	else { return false; }
    }

    Pourtant, l'objet est bien déclarée au début de ce même fichier, à la suite de la classe, et la fonction membre execute() est bien public.. Désolé de vous embeter encore :/

    Et si au passage, vous trouvez quelque chose à redire sur tout ça n'hésitez pas mon but est d'apprendre.

    Merci

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Pourtant, l'objet est bien déclarée au début de ce même fichier, à la suite de la classe, et la fonction membre execute() est bien public.
    Oui, mais $bdd est inconnu dans la fonction isHeAdmin
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2011
    Messages : 70
    Par défaut
    Ok J'ai donc contourné ce problème en rajoutant global $bdd; dans la fonction isHeAdmin. Mais est-ce vraiment la bonne solution?

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Il vaudrait mieux passer la connexion en paramètre à la fonction, ou mettre cette fonction comme méthode de ta classe bdd et utiliser l'objet courant comme connexion.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    vire les @ et fait des exceptions

  6. #6
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2011
    Messages : 70
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    vire les @ et fait des exceptions
    Je veux bien mais pour quelle raison?

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonsoir,

    Pour la simple et bonne raison que l'arobase empêche le déclenchement des erreurs/avertissements. Bref ton code se déroule silencieusement mais il t'est impossible de savoir s'il y a eu des erreurs. Aucune utilité, puisque tu sera incapable de savoir si une routine a bien fait ce pour quoi elle a été prévue.
    Donc ne jamais utiliser l'arobase, sauf si tu as prévu un autre moyen te permettant d'attraper un déroulement erroné d'une routine.
    Un peu de lecture ici

  8. #8
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2011
    Messages : 70
    Par défaut
    Bonsoir

    J'ai deja lu le manuel php. Donc vous dites que les erreurs ne devraient pas s'afficher ? Parce que j'ai déjà essayé et si la fonction ne s'éxécute pas je reçoit correctement ce que contient le die. C'est pas normal ?

  9. #9
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Citation Envoyé par flozza Voir le message
    Bonsoir

    J'ai deja lu le manuel php. Donc vous dites que les erreurs ne devraient pas s'afficher ? Parce que j'ai déjà essayé et si la fonction ne s'éxécute pas je reçoit correctement ce que contient le die. C'est pas normal ?
    Si c'est normal, avec le @ il ne t'affiche pas l'erreur généré par la fonction mais le contenu du die, pas pratique pour les débugs

  10. #10
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2011
    Messages : 70
    Par défaut
    C'est bien ce qu'il me semblait! J'ai fait exprès de mettre ces @ avec die, parce que je ne veux pas que les utilisateurs voient l'erreur brute et précise, c'est pas pas propre pour eux je trouve.

  11. #11
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Citation Envoyé par flozza Voir le message
    C'est bien ce qu'il me semblait! J'ai fait exprès de mettre ces @ avec die, parce que je ne veux pas que les utilisateurs voient l'erreur brute et précise, c'est pas pas propre pour eux je trouve.
    D'où la deuxième partie du message de stealth35 : "fait des exceptions"

  12. #12
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2011
    Messages : 70
    Par défaut
    Citation Envoyé par Celira Voir le message
    Il vaudrait mieux passer la connexion en paramètre à la fonction, ou mettre cette fonction comme méthode de ta classe bdd et utiliser l'objet courant comme connexion.
    Bonsoir

    Est-ce vous pouvez m'éclaircir sur cette idée ? Intégrer la fonction isHeAdmin dans l'objet bdd c'est ça ?

  13. #13
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2011
    Messages : 70
    Par défaut
    Citation Envoyé par amoiraud Voir le message
    D'où la deuxième partie du message de stealth35 : "fait des exceptions"
    Si je fait des exceptions, le but c'est d'afficher l'erreur de la fonction. Mais moi je ne veux pas qu'elle s'affiche. Dans ce cas le @ die est mieux non?

  14. #14
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Citation Envoyé par flozza Voir le message
    Si je fait des exceptions, le but c'est d'afficher l'erreur de la fonction. Mais moi je ne veux pas qu'elle s'affiche. Dans ce cas le @ die est mieux non?
    Non tu peut faire une exception qui va à la fois t'envoyer un mail avec le détail précis de l'erreur et afficher un message à l'utilisateur du style "Un problème est survenue, nos administrateurs ont été prévenus, désolé pour la gène, etc..."

  15. #15
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2011
    Messages : 70
    Par défaut
    Alors effectivement c'est encore mieux. Merci pour cette précision, je vais me faire quelques exceptions du coup ^^

  16. #16
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    N'hésite pas à créer tes propres classes d'exceptions pour simplifier encore plus les choses

  17. #17
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2011
    Messages : 70
    Par défaut
    Une petite question au passage. Y a t il une différence entre SELF::.. et $this->.. ?

  18. #18
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par flozza Voir le message
    Une petite question au passage. Y a t il une différence entre SELF::.. et $this->.. ?
    self : static
    $this-> instance

  19. #19
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2011
    Messages : 70
    Par défaut
    D'accord!

    Bon j'ai regardé pour les exceptions.C'est intéressant comme technique. mais finalement je suis perplexe.. Ca alourdit le code, et en réduit donc les performances, non?

  20. #20
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par flozza Voir le message
    D'accord!

    Bon j'ai regardé pour les exceptions.C'est intéressant comme technique. mais finalement je suis perplexe.. Ca alourdit le code, et en réduit donc les performances, non?
    non
    le but c'est pas de faire le moins de ligne possible et un code illisible, si tu veux des performances fait autre chose que du PHP, le but est plutot de faire quelque chose de maintenable, lisible et simple

Discussions similaires

  1. [Joomla!] Erreur Call to a member function on a non-object
    Par tchaw dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 27/01/2010, 21h53
  2. [PHP 5.2] Problème : Call to a member function on a non-object
    Par Docteur_Hareng dans le forum Langage
    Réponses: 4
    Dernier message: 10/07/2009, 10h50
  3. Fatal error: Call to a member function on a non-object
    Par alemat13 dans le forum Langage
    Réponses: 6
    Dernier message: 31/12/2007, 17h22
  4. [POO] Call to a member function on a non-object
    Par Roromix dans le forum Langage
    Réponses: 3
    Dernier message: 25/04/2007, 14h40
  5. [phpToPDF] "Call to a member function on a non-object"
    Par pikatshu dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 16/04/2007, 18h47

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