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

PHP & Base de données Discussion :

POO instancié class héritée


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 240
    Par défaut POO instancié class héritée
    Bonjour, j'apprend nouvellement la POO et j'utilise PDO pour la connexion, affichage des info de ma BDD.

    J'ai 3 classes:
    - une pour la connexion à la BDD,
    - une qui contient les méthodes d'ordre générale (affichage, etc..)
    - et une pour gérer les méthodes spécifiques telle que les membres (connexion, ajout, modification, etc...) qui extends de la class des méthodes générales

    Mon problème c'est comment appeler une méthode de la class "méthodes générales" dans la class fille afin de bénéficier de ses méthodes.

    Classe connexio BDD

    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
    <?php
      class DBconnexion {
     
    	  public static function PDO() {
     
    		   try {
    		  	$bdd= new PDO('mysql:host=localhost;dbname=ajmci', 'root', '', array(
    		  		  PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
    				  PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
    		   } 
    		    catch(PDOException $e){
    			 die('<h1>Impossible de se connecter a la base de donnees</h1>');   
    		   }
     
    		   return $bdd;
    	  }
      }
    ?>
    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
    Classe globalManager
     
    <?php
    	class manager {
     
    	  protected $bdd;
     
     
    	  public function __construct(PDO $bdd) {
    		  $this->bdd = $bdd;
    	  } 
    }
     
     $ddb = DBconnexion::PDO();
     $gManager = new manager($ddb);
     
    ?>
    Classe managerMember

    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
    <?php
    	session_start(); //On demarre la session
     
    	class memberManager extends manager {
     
    	  public $table;
    	  public $login;
    	  protected $password;
     
    	    //Fonction connexion membre
            function logMember($table, $login, $password){
     
            //execute login via function prepare pour prevenir les injection MySQL 
            $result = $this->bdd->prepare("SELECT * FROM ".$table." WHERE login ='".$login."' AND  
                          motpass = '".$password."'");
            $result->execute();
    		$data = $result->fetch(PDO::FETCH_OBJ);
    		$row = count($data);
     
            if($row != 0){
                if(($data->login == $login) && $data->motpass == $password){
                    $_SESSION['login'] = $data->login;
                    $_SESSION['profil'] = $data->profil;
                    return true;
                }
     
            }else{
                return false;
            }
     
        }
     }
     
    $gManagerMember = new memberManager;	  
    ?>
    Page traitement connexion membre

    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
    <?php
        require('class/db.class.php');
        require('class/manager.class.php');
        require('class/memberManager.class.php');
     
     
    	if($_POST) {
    		$table = "administrateur";
    	        $login = $_POST['login'];
    		$password = $_POST['motpasse'];
     
    		$connect = $gManagerMember->logMember($table, $login, $password);
     
    		if($connect == true){
    			echo 'Bon';
                exit;
    		}
    		else {
    			echo "pas bon";
    		}
    	}
    ?>
    Erreur affiché
    Catchable fatal error: Argument 1 passed to manager::__construct() must be an instance of PDO, none given, called in D:\EasyPHP-12.1\www\ajmci_news\class\memberManager.class.php on line 33 and defined in D:\EasyPHP-12.1\www\ajmci_news\class\manager.class.php on line 14
    NB: le principe pour moi c'est d'avoir une classe qui traite les méthodes standarts et une classe fille qui elle traite les méthodes spécifiques.

  2. #2
    Membre expérimenté Avatar de stephanegib2
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 152
    Par défaut
    Pour être franc, je n'ai pas trop compris ton code.
    je pense que tu peux faire sa

    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
     
    <?php
      class DBconnexion {
     
    	  public static function PDO() {
     
    		   try {
    		  	return new PDO('mysql:host=localhost;dbname=ajmci', 'root', '', array(
    		  		  PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
    				  PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
    		   } 
    		    catch(PDOException $e){
    			 die('<h1>Impossible de se connecter a la base de donnees</h1>');   
    		   }
    	  }
      }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    	class manager {
     
    	  protected $bdd;
     
    	  public function __construct() {
    		  $this->bdd = new manager( DBconnexion::PDO());
    	  } 
    }
    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
     
    <?php 
    	class memberManager extends manager {
     
    	  public $table;
    	  public $login;
    	  protected $password;
     
     	  public function __construct() {
    		 parent::__construct();
    	  } 
     
    	    //Fonction connexion membre
            public function logMember($table, $login, $password){
            $result = $this->bdd->prepare("SELECT * FROM ".$table." WHERE login ='".$login."' AND  
                          motpass = '".$password."'");
            $result->execute();
    		$data = $result->fetch(PDO::FETCH_OBJ);
    		$row = count($data);
     
            if($row != 0 && $data->login == $login) && $data->motpass == $password && session_status() != PHP_SESSION_NONE){
                    $_SESSION['login'] = $data->login;
                    $_SESSION['profil'] = $data->profil;
                    return true;
            }else{
                return false;
            }
     
        }
     }
    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
     
    <?php
        session_start();
        require('class/db.class.php');
        require('class/manager.class.php');
        require('class/memberManager.class.php');
     
     
    	if($_POST) {
    		$table = "administrateur";
    	        $login = $_POST['login'];
    		$password = $_POST['motpasse'];
     
                    $gManagerMember = new memberManager();
    		$connect = $gManagerMember->logMember($table, $login, $password);
     
    		if($connect == true){
    			echo 'Bon';
                exit;
    		}
    		else {
    			echo "pas bon";
    		}
    	}

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 240
    Par défaut
    J'ai suivi ton code voilà l'erreur:
    Catchable fatal error: Argument 1 passed to memberManager::__construct() must be an instance of PDO, none given, called in D:\EasyPHP-12.1\www\ajmci_news\class\memberManager.class.php on line 55 and defined in D:\EasyPHP-12.1\www\ajmci_news\class\memberManager.class.php on line 10

Discussions similaires

  1. [Lazarus] [Linux] Erreur lors de la création d'une instance de classe héritée
    Par timmalos dans le forum Lazarus
    Réponses: 2
    Dernier message: 10/05/2011, 12h59
  2. [POO] [DEV] Classe de debug pour PHP
    Par -COil- dans le forum Langage
    Réponses: 11
    Dernier message: 09/06/2007, 19h53
  3. [POO] instances de classe
    Par benkunz dans le forum Langage
    Réponses: 1
    Dernier message: 27/03/2007, 21h58
  4. Réponses: 2
    Dernier message: 09/10/2005, 15h35
  5. Réponses: 3
    Dernier message: 23/08/2004, 17h49

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