Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/01/2012, 14h07   #1
Membre du Club
 
Homme Florian siles
Webmaster
Inscription : juin 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Florian siles
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Webmaster
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : juin 2011
Messages : 59
Points : 47
Points : 47
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 :
1
2
 
<?php include("functions.php"); ?>

functions.php dont les premières lignes sont:
Code php :
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
Citation:
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 :
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
flozza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 14h13   #2
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 808
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 808
Points : 35 789
Points : 35 789
Citation:
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 !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/01/2012, 14h22   #3
Membre du Club
 
Homme Florian siles
Webmaster
Inscription : juin 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Florian siles
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Webmaster
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : juin 2011
Messages : 59
Points : 47
Points : 47
Ok J'ai donc contourné ce problème en rajoutant global $bdd; dans la fonction isHeAdmin. Mais est-ce vraiment la bonne solution?
flozza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h04   #4
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 671
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 671
Points : 5 404
Points : 5 404
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)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 10h49   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
vire les @ et fait des exceptions
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/01/2012, 20h33   #6
Membre du Club
 
Homme Florian siles
Webmaster
Inscription : juin 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Florian siles
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Webmaster
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : juin 2011
Messages : 59
Points : 47
Points : 47
Citation:
Envoyé par stealth35 Voir le message
vire les @ et fait des exceptions
Je veux bien mais pour quelle raison?
flozza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 20h49   #7
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
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
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 21h10   #8
Membre du Club
 
Homme Florian siles
Webmaster
Inscription : juin 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Florian siles
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Webmaster
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : juin 2011
Messages : 59
Points : 47
Points : 47
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 ?
flozza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 21h12   #9
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 412
Détails du profil
Informations personnelles :
Nom : Homme Adrien
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 : 412
Points : 537
Points : 537
Envoyer un message via MSN à amoiraud
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
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 21h19   #10
Membre du Club
 
Homme Florian siles
Webmaster
Inscription : juin 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Florian siles
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Webmaster
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : juin 2011
Messages : 59
Points : 47
Points : 47
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.
flozza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 21h23   #11
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 412
Détails du profil
Informations personnelles :
Nom : Homme Adrien
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 : 412
Points : 537
Points : 537
Envoyer un message via MSN à amoiraud
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"
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 21h25   #12
Membre du Club
 
Homme Florian siles
Webmaster
Inscription : juin 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Florian siles
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Webmaster
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : juin 2011
Messages : 59
Points : 47
Points : 47
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 ?
flozza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 21h28   #13
Membre du Club
 
Homme Florian siles
Webmaster
Inscription : juin 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Florian siles
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Webmaster
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : juin 2011
Messages : 59
Points : 47
Points : 47
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?
flozza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 21h31   #14
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 412
Détails du profil
Informations personnelles :
Nom : Homme Adrien
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 : 412
Points : 537
Points : 537
Envoyer un message via MSN à amoiraud
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..."
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/01/2012, 21h35   #15
Membre du Club
 
Homme Florian siles
Webmaster
Inscription : juin 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Florian siles
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Webmaster
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : juin 2011
Messages : 59
Points : 47
Points : 47
Alors effectivement c'est encore mieux. Merci pour cette précision, je vais me faire quelques exceptions du coup ^^
flozza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 21h43   #16
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 412
Détails du profil
Informations personnelles :
Nom : Homme Adrien
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 : 412
Points : 537
Points : 537
Envoyer un message via MSN à amoiraud
N'hésite pas à créer tes propres classes d'exceptions pour simplifier encore plus les choses
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/01/2012, 01h24   #17
Membre du Club
 
Homme Florian siles
Webmaster
Inscription : juin 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Florian siles
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Webmaster
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : juin 2011
Messages : 59
Points : 47
Points : 47
Une petite question au passage. Y a t il une différence entre SELF::.. et $this->.. ?
flozza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 09h44   #18
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 19h14   #19
Membre du Club
 
Homme Florian siles
Webmaster
Inscription : juin 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Florian siles
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Webmaster
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : juin 2011
Messages : 59
Points : 47
Points : 47
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?
flozza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 23h59   #20
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h52.


 
 
 
 
Partenaires

Hébergement Web