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 :

[POO] Problème inclusion dans une classe


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 513
    Points : 416
    Points
    416
    Par défaut [POO] Problème inclusion dans une classe
    Bonjour a tous,
    voila j'ai une question simple, mais qui peut peut-être me permettre de comprendre d'où vient mon problème. voila en fait je suis en train de développer un site en PHP5 avec de l'objet. J'ai donc un objet pour accèder à ma base de données qui s'appelle Cbdd.php et une classe qui me permet de vérifier le compte d'une personne lors de sa connection sur le site dans un fichier VerifCompte.php.
    en fait dans le fichier VerifCompte.php j'inclue le fichier Cbdd.php et j'ai alors une erreur, et je me demandé si ce n'était pas parce que j'inclue une classe dans un fichier définissant une autre classe.
    Voila merci par avance.
    Bob
    Jérémy
    Ingénieur Conception et Développement

  2. #2
    Membre habitué
    Avatar de thanathz
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 178
    Points
    178
    Par défaut
    Dans ton fichier tu dois faire un require_once dans le fichier qui appelle VerifCompte.php

    par exemple on suppose que tu vérifies le compte sur index.php, voila son contenu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    require_once('VerifCompte.php');
    require_once('Cbdd.php');
     
    $myVerif=new VerifCompte(); // par exemple...
    Là ton inclusion sera normalement prise en compte

  3. #3
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Je suis pas vraiment d'accord.
    Sur index.php, on en a rien à cirer que VerifCompte utilise une BD pour pouvoir verifier un compte. Si il veut utiliser un autre moyen (filesystem, ldap, ...), c'est à lui de décider, et donc à lui de faire l'include qui lui va bien !

    index.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    require_once('VerifCompte.php');
     
    $myVerif = new VerifCompte();
    VerifCompte.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    require_once('Cbdd.php');
    Class VerifCompte {
    ...
    LordBob, qu'elle erreur as-tu ?

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 513
    Points : 416
    Points
    416
    Par défaut
    ok, mais le problème persiste mais visiblement tu n'as pas compris la disposition des fichiers, voici donc mon code (mais regarde que la strucutre):

    Redirection.php:
    Code : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
            //RedirectionUser.php
    		//permet de rediriger chaque utilisateur selon son login et son mot de passe sur la partie du site correspondant à son type d'utilisateur
     
    		require_once('config/VerifCompte.php');
     
    		$test=new VerifCompte($_POST['login'],$_POST['pass']);		
     
    		if ( $test->Existe() )
    		{
    			$groupe=$test->VerifGroupe();  //on cherche le type d'utilisateur de la personne
    			switch ($groupe)               
    			{
    				case 'CPE':
    						header('Location: pages/CPE/accueil.html');break;
    				case 'ADMINISTRATEUR':
    						header('Location: pages/ADMINISTRATEUR/accueil.html');break;
    				case 'ELEVE':
    						header('Location: pages/ELEVE/accueil.html');break;
    				case 'PROFESSEUR':
    						header('Location: pages/PREOFESSEUR/accueil.html');break;
    				case 'PARENT':
    						header('Location: pages/PARENT/accueil.html');break;
    				default: 
    						header('Location: form-login.php');
    			}	
     
    		}
    		else
    		{
    			header('Location: form-login.php');			
    		}
    ?>
    VerifCompte.php:
    Code : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    <?php
            //VerifCompte.php
    		//Verification de l'existance de l'utilisateur
    		//page permettant de repartir les differents acces au site selon le type d'utilisateur
     
    	   //pour utiliser les fonctions de base de l'utilisation d'une BD
    	   require_once('../bdd/Cbdd.php');
     
    	   class VerifCompte
    	   {
    			//login de l'utilisateur
    			private $login;
    			//password de l'utilisateur
    			private $pass;		
     
    			//instanciation de la classe contenant les fonctions usuelles que l'on effectue sur la base de données
    			function __construct($login,$pass)
    			{				     
    				$this->login=$login;
    				$this->pass =$pass;
    			}
     
    			//verification de l'existance de l'utilisateur dans la base de données
    	        function Existe()
    			{ 
    			    //on vérifie que l'utilisateur a remplie les champs
    				if (isset($login) && isset($pass))
    				{
    					$obj=new Cbdd();
    					$requete=sprintf("  SELECT LoginUtilisateur,PasswordUtilisateur 
    										FROM UTILISATEUR 
    										WHERE LoginUtilisateur='%s' 
    										AND	PasswordUtilisateur='%s';", $login, $pass);
     
    					$obj->doRequete($requete);  //on envoie la requete pour verifier si il existe bien un tuple avec ses attributs là
     
    					if ( $obj->nextRecord() )  //le tuple existe
    						return (true);                 //la personne existe donc sous ce login et ce password
    					else
    						return (false);
    					unset($obj); //destruction de l'objet
    				}
    				else
    					return (false);
    			}
     
    			function VerifGroupe()
    			{ 
    			    $obj=new Cbdd();
    				$tab=array('CPE','PARENT','ELEVE','PROFESSEUR','ADMINISTRATEUR');
    				//récupération Id de l'utilisateur
    				$requete=sprintf(" SELECT IdUtilisateur
    								   FROM UTILISATEUR
    								   WHERE LoginUtilisateur=='%s'
    								   AND   PasswordUtilisateur='%s';",$login,$pass);
    				$obj->doRequete($requete);  //on soumet la requete a la BD
    				$Id=$obj->nextRecord();     //recuperation du resultat
    				for ( $i=0 ; $i<5 ; $i++ )         //on va chercher à quelle table d'utilisateur appartient l'Id 
    				{
    					$requete=sprintf(" SELECT IdUtilisateur
    									   FROM   '%s'
    									   WHERE  IdUtilisateur == '%d',$tab[i],$Id");
    					$obj->doRequete($requete);//on effectue la requete
    					if ( $obj->nextRecord() )  
    						return $tab[i];  //dans le cas où il y a eu un tuple, on retourne la table où il y a eu ce résultat
     
    				}
    				return ('probleme');
    			}
    	   }
    ?>
    Cbdd.php:
    Code : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    <?php
    	// Cbdd.php
    	//  Classe d'interaction avec la BDD.
    	//  Classe permettant d'intérargir avec la BDD pour effectuer des connexions, des requêtes.
     
    	// paramètres de la BDD
    	include('../config/inc.bd-config.php');
     
    	// définition de la classe Cbdd
    	class Cbdd
    	{
    		// adresse du serveur de la BDD
    		private $server;
    		// nom de la BDD
    		private $nom;
    		// nom utilisateur
    		private $user;
    		// mot de passe
    		private $pass;
    		// résultat de requête
    		private $result;
    		// 1 ligne de résultat
    		private $record;
    		// ligne du résultat actuellement traité
    		public $ligneCourante;
     
    		// constructeur
    		function __construct()
    		{
    			// initialisation des attributs de classe
    			$this->server = DBHOST;
    			$this->nom = DBNAME;
    			$this->user = DBUSER;
    			$this->pass = DBPASS;
    		}
     
    		// connection à la base de données
    		function connect()
    		{
    			// connection à MySQL
    			if(mysql_connect($this->server, $this->user, $this->pass))
    			{
    				//  selection de la BDD
    				if(mysql_select_db($this->nom))
    					return(true); // OK
    				else
    					return(false); // erreur
    			}
    			else
    				return(false); // ERREUR, connexion au serveur BDD
    		}
     
    		// exécution d'une requête SQL sur la base, renvoie TRUE si la requete à eu lieu, FALSE sinon
    		function doRequete($requete)
    		{
    			// on se connecte
    			if($this->connect())
    			{
    				// execution de la requete
    				if($this->result = mysql_query($requete))
    				{
    					$this->ligneCourante = 0;
    					return(true); // OK
    				}
    				else
    					return(false); // erreur
    			}
    			else
    				return(false); // erreur connexion BDD
    		}
     
    		// retourne un élément d'un tuple
    		function nextRecord()
    		{
    			// récupération d'une ligne de résultat de la requête
    			$this->record = mysql_fetch_array($this->result);
     
    			// si il n'y a pu de ligne, on retourne FALSE
    			if(!$this->record)
    				return(false);
     
    			$this->ligneCourante++; // on indique que l'on est une ligne plus loin
    			return($this->record);
    		}
     
    		// retourne le nombre de ligne d'un resultat
    		function nbLigne()
    		{
    			return(mysql_num_rows($this->result));
    		}
     
    		// retourne le nombre de champs d'un resultat
    		function nbColonne()
    		{
    			return(mysql_num_fields($this->result));
    		}
    	}
    ?>
    et voila le code d'erreur:
    Warning: main(../bdd/Cbdd.php) [function.main]: failed to open stream: No such file or directory in G:\projet\Application\config\VerifCompte.php on line 7

    Fatal error: main() [function.require]: Failed opening required '../bdd/Cbdd.php' (include_path='.;D:\Xampp\xampp\php\pear\') in G:\projet\Application\config\VerifCompte.php on line 7
    Jérémy
    Ingénieur Conception et Développement

  5. #5
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    le répertoire bdd se trouve où ?

  6. #6
    Membre habitué
    Avatar de thanathz
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 178
    Points
    178
    Par défaut
    Warning: main(../bdd/Cbdd.php) [function.main]: failed to open stream: No such file or directory in G:\projet\Application\config\VerifCompte.php on line 7
    C'est clair, ton inclusion ne marche pas, revois le chemin de /bdd/Cbdd.php

    L'ideal pour éviter ces problèmes est sans doute de définir un fichier de config qui est appelé systématiquement (enfin c'est ce que je fais) ou tu crées une constante dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    define(BASE_DIR, "c:\mon_chemin_de_base");
    puis dans l'appel des inclusions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once(BASE_DIR.'nom_a_inclure.php')
    ...
    [Private HS]
    Sinon misterN, moi je préfère initialiser ma connexion à la BDD dans le fichier général et appeler ensuite dans les classe l'objet car c'est moins couteux que de créer un objet (surtout de connexion à la BDD) dans chaque classes...

    Mais sinon, tu as raison
    [/Private HS]

  7. #7
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par thanathz
    L'ideal pour éviter ces problèmes est sans doute de définir un fichier de config qui est appelé systématiquement (enfin c'est ce que je fais) ou tu crées une constante dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    define(BASE_DIR, "c:\mon_chemin_de_base");
    puis dans l'appel des inclusions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once(BASE_DIR.'nom_a_inclure.php')
    +1

    Citation Envoyé par thanathz
    [Private HS]
    Sinon misterN, moi je préfère initialiser ma connexion à la BDD dans le fichier général et appeler ensuite dans les classe l'objet car c'est moins couteux que de créer un objet (surtout de connexion à la BDD) dans chaque classes...
    +1

    8)

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 513
    Points : 416
    Points
    416
    Par défaut
    ce n'est pas un probleme de chemin car dans le meme dossier, j'ai un fichier php qui contient le meme include et la je n'ai aucun problème!
    donc je ne sais vraiment pas pourquoi ça ne marche pas !
    Jérémy
    Ingénieur Conception et Développement

  9. #9
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    oui mais ce fichier n est peut etre pas inclus dans un autre de la memem manière.

    la tu as des include en cascade, il faut passer par des chemins absolus comme ca tu te fout de savoir ou tu te trouve.
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 513
    Points : 416
    Points
    416
    Par défaut
    bah pour ce include, j'ai fais un copier/coller. j'ai verifié les chemins, je comprend vraiment pas pourquoi ca ne marche pas !
    Jérémy
    Ingénieur Conception et Développement

  11. #11
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    as tu au moins essayer avec des chemins absolus ?
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  12. #12
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 513
    Points : 416
    Points
    416
    Par défaut
    non, mais comme le code ne vient pas de moi, je crois que je vais le reprendre entièrement moi même, mais voila je posais la question pour savoir le pourquoi aussi.
    sinon c'est quoi la différence entre include et require_once.
    voila sinon merci pour tout, bonne continuation a vous.
    Bob
    Jérémy
    Ingénieur Conception et Développement

Discussions similaires

  1. [PHP 5.0] [POO] Propriétés comme des objets dans une classe
    Par Zaki_SDwin dans le forum Langage
    Réponses: 8
    Dernier message: 30/06/2010, 12h54
  2. [POO] Sérialiser un objet PDO dans une classe
    Par __fabrice dans le forum Langage
    Réponses: 9
    Dernier message: 15/09/2008, 22h30
  3. [POO] Problème avec un require_once dans une classe
    Par Sayrus dans le forum Langage
    Réponses: 5
    Dernier message: 23/02/2008, 14h40
  4. [POO] Utilisation d'une classe dans une classe !
    Par Okinou dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2006, 14h34
  5. Réponses: 2
    Dernier message: 17/12/2005, 20h52

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