Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
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 29/12/2007, 12h43   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 13
Points : 2
Points : 2
Par défaut Fatal error: Call to a member function on a non-object

Bonjour,
Voila, je débute en poo et je souhaite réaliser la classe admin ci-dessous :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class admin {
		var $status=FALSE;
		function admin() {
			$this->status=isset($_SESSION['admin']);
		}
		function login($login='',$pass='') {
			$this->status=(($login==config_login)&&($pass==config_password));
			if ($this->status) $_SESSION['admin']=1;
			return $this->status;
		}
		function logout() {
			$this->status=FALSE;
			session_destroy();
		}
		function afficher($cont) {
			if ($this->status) echo $cont;
		}
	}
Petites explications : la variable status est égale à TRUE si l'admin s'est loggué. De plus on enregistre une variable de session $_SESSION['admin']. Ainsi à chaque fois que l'on crée une nouvelle instance $admin=new admin(), on regarde si $_SESSION['admin'] est définie. Si oui on a $admin->status=TRUE. Enfin la fonction afficher() permet d'afficher du texte à la condition que l'utilisateur soit loggué en tant qu'admin.

Je montre un exemple :
Code :
1
2
3
4
$admin=new admin();
			if ($admin->login("admin","admin")) echo "Identification réussie<br/>";
			else echo "Mauvais nom d'utilisateur ou mot de passe";
			$admin->afficher("Salut administrateur");
Ce code marche très bien losrque je l'exécute sur EasyPhp (PHP Version 4.3.10) mais lorsque j'essaie de l'exécuter sur mon serveur Free (PHP Version 4.4.3-dev), j'obtiens l'erreur suivante: Fatal error: Call to a member function on a non-object in /mnt/111/sdc/a/5/alemat13/radioonair/index.php on line 38
ce qui est bizarre, c'est que la ligne 38 correspond à la ligne "$admin->afficher("Salut administrateur");" et il ne retourne pas d'erreur pour la fonction login(), cependant cette fonction renvoie FALSE à chaque fois même si je mets le bon nom d'utilisateur et le bon mot de passe. En revanche, si je mets un mauvais nom d'utilisateur ou mot de passe, le code s'exécute comme prévu.
Merci de votre aide.
alemat13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2007, 10h24   #2
Membre actif
 
Inscription : mars 2007
Messages : 342
Détails du profil
Informations personnelles :
Localisation : Luxembourg

Informations forums :
Inscription : mars 2007
Messages : 342
Points : 178
Points : 178
T'as pas oublié d'uloader ta dernière version de class admin sur le serveur free?
cmako est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 12h38   #3
Invité de passage
 
Inscription : décembre 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 13
Points : 2
Points : 2
Oui oui, tous mes fichiers sont uploadés, il n'y a pas de problème de ce coté là. Je pense plutôt que c'est du à la version de php.
alemat13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 13h18   #4
Invité de passage
 
Inscription : décembre 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 13
Points : 2
Points : 2
Petite précision, en fait le script marche très bien lorsque la page est chargée la première fois, c'est quand on réactualise qu'il ne marche plus, et ce jusqu'à ce qu'on redémarre le navigateur (ie lorsque l'on redémarre une session). Il semblerait donc que le problème soit au niveau de la variable de session. Seulement j'arrive pas à savoir quoi ... Je pense pas que le fait de se loggué 2 fois de suite puisse provoqué cette erreur ...
alemat13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 13h32   #5
Invité de passage
 
Inscription : décembre 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 13
Points : 2
Points : 2
Bon alors j'ai réussi à résoudre le problème par contre je ne sais pas comment j'ai fait !!
J'ai séparé en trois fichiers mes appels à la classe admin:

accueil.php :
Code :
$admin->afficher("Salut admin");
login.php :
Code :
1
2
if ($admin->login("admin","admin")) echo "Identification réussie";
else echo "Identification échouée";
logout.php :
Code :
1
2
$admin->logout();
echo "Vous êtes déconnecté";
Par contre il me fait encore un truc bizarre c'est que lorsque j'appelle login.php une première fois, il m'affiche "Identification réussie", et la deuxième fois il affiche "Identification échouée". Je n'y comprends plus rien. Ca marche mais pas comme je l'attendais. Si quelqu'un arrive à résoudre ce mystère ...
alemat13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 15h35   #6
Membre actif
 
Inscription : mars 2007
Messages : 342
Détails du profil
Informations personnelles :
Localisation : Luxembourg

Informations forums :
Inscription : mars 2007
Messages : 342
Points : 178
Points : 178
Citation:
Envoyé par alemat13 Voir le message
Petite précision, en fait le script marche très bien lorsque la page est chargée la première fois, c'est quand on réactualise qu'il ne marche plus, et ce jusqu'à ce qu'on redémarre le navigateur (ie lorsque l'on redémarre une session). Il semblerait donc que le problème soit au niveau de la variable de session. Seulement j'arrive pas à savoir quoi ... Je pense pas que le fait de se loggué 2 fois de suite puisse provoqué cette erreur ...
Je vois que tu utilises la variable $_SESSION mais tu n'utilises pas la fonction session_start() indispensable pour que ça fonctionne.


Pour plus d'info http://fr3.php.net/manual/fr/function.session-start.php
cmako est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 17h22   #7
Invité de passage
 
Inscription : décembre 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 13
Points : 2
Points : 2
Si je l'ai pas spécifié, en fait ma page index.php commence avec un session_start(). Après mes pages login.php, logout.php et accueil.php sont appelé grace a un include dans une div de mon fichier index.php. En gros:
Code :
1
2
3
4
5
6
7
8
9
10
11
<?php
session_start();
include('includes/config.php');
include('includes/functions.php');//c'est ce fichier qui contient ma classe admin
?>
[...]
<div id="centre">
<?php
if (!@include($_GET['page'].".php")) include('accueil.php');
?>
</div>
alemat13 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 02h52.


 
 
 
 
Partenaires

Hébergement Web