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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 40
    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
    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 ?

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