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 :

comment se connecté lorsqu'on est dans une class heritage [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut comment se connecté lorsqu'on est dans une class heritage
    Bonjour je souhaite me connecté à pour entrée une donnée mais je n'y arrive pas, voici le script singleton qui permet de se connecté via 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
    31
    32
    33
    34
    35
    36
    37
     
    <?php
    class Patron
     {
     
      private static $instance;
     
      protected $connexion;
     
      private function __construct() {
        /* création d'un objet PDO avec les constantes définies dans la configuration */
        $this->connexion = new PDO('mysql:host=localhost;dbname=labase', 'root', '');
        /* mettre Exception comme mode d'erreur */
          $this->connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      }
     
      /* clonage impossible */
      private function __clone() {}
     
      /**
       * Accéder à l'UNIQUE instance de la classe
       */
      static public function getInstance() {
        if (! (self::$instance instanceof self)) {
          self::$instance = new self();
        }
        return self::$instance;
      }
     
      /**
       * Accesseur de la connexion
       */
      public function OpenCnx() {
        return $this->connexion;
      }
    }
    ?>
    j'ai 2 class :
    class saisie():
    elle sert a récolter les saisies d'une personne qui saisie nom et adresse

    class enregistre()
    elle vérifie que les saisies son correcte (exemple qu'il ya bien 10 chiffre pour le numéro de telephone)

    la class enregistre() héritera de la class saisie, il faut que la class enregistre puisse vérifier les attribut de la class saisie.
    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
     
    class Enregistre extends Saisie
    {
     
       public function verifier()
        {
          //vérifie que les attribut on été bien saisie
        }
         public function save()
       {
           //enregistrement de tous les attribut qui sont dans la class saisie
       }
     
    }
    $saisie1=new Saisie($_POST['nom'],$_POST['adresse'],...);
    $enregistre=new Enregistre();//on transmet tous les poste dans les attribut de cette classe
    $enregistre->verifier();//on vérifie que les donnée son ok
    $enregistre->save();//on enregistre le résultat dans la bdd
    pour utliser la connection il faut faire appelle à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $bdd = Patron::getInstance()->OpenCnx();
    Dans la class enregistre si je crée une methode de connection de la class j'ai cette erreur;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Call to private Patron::__construct() from invalid context in /var/www/xxtest/test.php on line 41
    comment faut t'il que je procède si je veux me connecter avec "une sous class"??

    voici le scipt qui fait cette erreur:
    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
     
    class frere extends fille
    {
     
    	public function enregistre()
    	{
    				$bdd = Cnx::getInstance()->OpenCnx();
    								// enregistrement de la personne
    				$sql_perso="INSERT INTO Clients (ID_client,nom) VALUES ('','222')";
    				$nb=$bdd->exec($sql_perso);
    				$this->endID= $bdd->lastInsertId();
    		 		$bdd=null;  
     
    	}
     
     
     
    }
    $enregister= new enregistre();
    il y a peut être une autre facon de le faire?
    voici un petit dessin pour illustrer mes class les flèches c'est lhéritage
    http://www.hostingpics.net/viewer.php?id=824048pdo.jpg

  2. #2
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    Bonjour,

    j'ai du mal à lire ton diagramme là désolé mais il faut que vous mettiez un diagramme de classe claire! là dans ton diagramme on voit pas la différence entre un héritage et utilisation d'un objet d'une autre classe.

    bon essaie de mettre le constructeur de la classe patron en protected et non en private

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    merci de ta réponse je vais essayer de faire un schema plus claire.
    voici ce que j'ai testé mais qui fonctionne
    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
     
    <?php
    class fille extends Patron
    {
     
    	public function __construct()
    	{
    				$bdd = Patron::getInstance()->OpenCnx();
    				// enregistrement de la personne
    				$sql_perso="INSERT INTO Clients (ID_client,nom) VALUES ('','111')";
    				$nb=$bdd->exec($sql_perso);
    				$this->endID= $bdd->lastInsertId();
    		 		$bdd=null;  
     
    	}
     
     
     
    }
     
    class frere extends fille
    {
     
    	public function __contruct()
    	{
    				$bdd = Patron::getInstance()->OpenCnx();
    								// enregistrement de la personne
    				$sql_perso="INSERT INTO Clients (ID_client,nom) VALUES ('555','222')";
    				$nb=$bdd->exec($sql_perso);
    				$this->endID= $bdd->lastInsertId();
    		 		$bdd=null;  
     
    	}
     
     
     
    }
    $fille= new fille();
    c'est ici que je doit modifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      private static $instance;
    en haut le script fonctionne bien il enregistre tous les 2 les infos dans la base mais la ou ca se gatte c'est quand vire le constructeur et que je vais crée une method enregistre()
    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
     
    class frere extends fille
    {
           public functon construct()
           {
              echo "merci de faire un $this->enregistre pour faire une requte"
           }
     
    	public function enregistre()
    	{
    				$bdd = Patron::getInstance()->OpenCnx();
    								// enregistrement de la personne
    				$sql_perso="INSERT INTO Clients (ID_client,nom) VALUES ('555','222')";
    				$nb=$bdd->exec($sql_perso);
    				$this->endID= $bdd->lastInsertId();
    		 		$bdd=null;  
     
    	}
     
     
     
    }

  4. #4
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    essaie de déclarer l'instance static de la classe Patron en publique

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    j'ai fait un plus simple schmema
    http://www.hostingpics.net/viewer.php?id=387247pdo.jpg


    j'ai essayer des mettre 2 deux la en public
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      public static $instance
      public function __construct()
    y 'a plus d'erreur mais ma base n'est pas écrite?

  6. #6
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    la classe de connexion tu l'as laissé telle qu'elle est tu l'as pas touché?

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    la class de connection je ne l'ai pas touche et vérifier si j'avais bien les mot de pass et login correcte.

    je viens de trouvé une solution, je n'avais pas utiliser le chargement des class par __autoload(), donc maintenant je n'ai plus besion de faire un héritage de connection pdo
    c'est réglér merci de ton aide

  8. #8
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    Bonsoir,

    béh tout à fait il faut jamais hériter d'une classe de connexion c'est pas pratique de tout il faut l'inclure si non __autoload ralenti beaucoup l'application surtout si ton application a besoin de beaucoup de classe.

    bonne chance en tout cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/11/2011, 22h29
  2. Réponses: 4
    Dernier message: 09/09/2009, 07h53
  3. Réponses: 4
    Dernier message: 17/12/2007, 14h46
  4. Réponses: 3
    Dernier message: 09/01/2007, 09h44
  5. menu actif surligné lorsqu'il est dans une frame
    Par vertalan dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/06/2006, 15h38

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