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 :

un objet vide en programmation orientée objet


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club Avatar de gautier1er
    Homme Profil pro
    Developpeur C et PHP
    Inscrit en
    Août 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Developpeur C et PHP

    Informations forums :
    Inscription : Août 2017
    Messages : 61
    Points : 32
    Points
    32
    Par défaut un objet vide en programmation orientée objet
    Code php : 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
     <?php
    class Membre
      {
    	  //attributs
    	  private $_pseudo; 
           private $_password;                   
             private $_mail; 
     
    	  //constructeur
    	 public function  __construct( array $donnees)
         {
           $this->hydrateMembre($donnees);
         }
     
     
    	 //getters (accesseurs) 
    	 public function   getPseudo()
         {
     
          return  $this->_pseudo;
         }
     
    public  function  getPassword()
    {
     
    return  $this->_password;
    }
     
    	public  function  getMail()
        {
     
          return  $this->_mail;
        }
     
     
    //setters
    public function setPseudo($login)
    {
      $this->_pseudo=$login;
    }
     
      public  function  setPassword($mdp)
     {
     
           $this->_password=$mdp;
     
     }
     
    public function setMail($Adressemail)
    {
     
      //on verifie si c'est vrai une adresse mail 
      if($this->isMail($Adressemail))
      {
       $this->_mail=$Adressemail; 
      }
    }
     
    public function isMail($mail)
    {
     
     return preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#",$mail);
    }
     
     
      }
     
      ?>



    Code php : 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
     <?php
    class MembreManager
     {
     
          //attribut
        private $_db;
     
        //constructeur
        public function  __construct($db)
        {
         $this->setDb($db);
        }
     
      public function getSectionFromDB(Membre $user)
      {
       $req=$this->_db->prepare('SELECT idSection FROM membre WHERE   PseudoMembre=?');
       $req->execute(array($user->getPseudo() ) );
       $donnee=$req->fetch(PDO::FETCH_ASSOC);
       return $donnee['idSection'] ;
      }
     
     
       public function getMembre($id)
       {
     
       $req=$this->_db->prepare('SELECT * FROM membre WHERE idSection=?');
       $req->execute(array($id ) );
       $donnee=$req->fetch(PDO::FETCH_ASSOC);
       return new Membre($donnee);
       } 
     
     }
     
      ?>

    le but est de mettre les données de l'utilisateur dans les variables de session
    un utilisateur se connecte à partir de son pseudo et son mot de passe.
    J'aimerai stocker le pseudo, l'email, la section et la date d'inscription de l'utilisateur dans les sessions

    Donc j'ai crée mes deux objets pour la vérification des données envoyé par le formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	 $manager=new MembreManager($db);
     
    	$user=new Membre(array('pseudo'=>$login,'password'=>$pass) );
    //on fait les vérifications ici

    Toutes les données de l'utilisateur sont correctes donc je crée un objet qui récupère les données de l'utilisateur dans la base de données


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	//on récupère les données de l'utilisateur
              $utilisateur=$manager->getMembre($id);
    Mais quand j'utilise l'objet $utilisateur
    par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $utilisateur->getPseudo() ;
    $utilisateur->getMail();
    l'objet est vide.

    J'ai besoin de votre aide.


    cordialement.
    Fichiers attachés Fichiers attachés

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ou est la methode hydrateMembre ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club Avatar de gautier1er
    Homme Profil pro
    Developpeur C et PHP
    Inscrit en
    Août 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Developpeur C et PHP

    Informations forums :
    Inscription : Août 2017
    Messages : 61
    Points : 32
    Points
    32
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      public function hydrateMembre(array $donnees )
     {
            foreach($donnees as $cle=> $valeur)
            {
              $methode='set'.ucfirst($cle);
              if(method_exists($this, $methode))
              {
               $this->$methode($valeur);
              }
            }
     
      }

    J'ai aussi ajouté des attributs et méthodes à ma classe Membre ci dessus

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pourquoi cette méthode n'est pas dans les codes que tu nous as donné ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club Avatar de gautier1er
    Homme Profil pro
    Developpeur C et PHP
    Inscrit en
    Août 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Developpeur C et PHP

    Informations forums :
    Inscription : Août 2017
    Messages : 61
    Points : 32
    Points
    32
    Par défaut
    J 'ai enlevé des méthodes et attributs pour aller au but du sujet. Excusez moi si vous aviez trouvé cela impeu bizarre.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    As-tu debugué un peu ?
    Par exemple est-ce que la requête dans getMembre() donne un résultat ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Nouveau membre du Club Avatar de gautier1er
    Homme Profil pro
    Developpeur C et PHP
    Inscrit en
    Août 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Developpeur C et PHP

    Informations forums :
    Inscription : Août 2017
    Messages : 61
    Points : 32
    Points
    32
    Par défaut
    C'est le problème même qui est là "l'objet est vide " , cela veut dire que la requête retourne rien peut-être

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    la requête retourne rien peut-être
    Il faut vérifier
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    manque d'explications mais je pense que tu débutes en POO PHP et tu ne connais pas toutes les règles qui s'y appliquent.
    Tiens lis ça et je pense que dans ton cas ce qui est important :
    Afin de pouvoir désérialiser (unserialize()) un objet, la classe de l'objet doit être définie, pour permettre sa reconstruction.

  10. #10
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par gautier1er Voir le message
    C'est le problème même qui est là "l'objet est vide " , cela veut dire que la requête retourne rien peut-être
    Citation Envoyé par sabotage Voir le message
    Il faut vérifier
    Et donc, tu as vérifié ? la requête renvoie bien quelque chose ?
    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)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  11. #11
    Nouveau membre du Club Avatar de gautier1er
    Homme Profil pro
    Developpeur C et PHP
    Inscrit en
    Août 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Developpeur C et PHP

    Informations forums :
    Inscription : Août 2017
    Messages : 61
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Afin de pouvoir désérialiser (unserialize()) un objet, la classe de l'objet doit être définie, pour permettre sa reconstruction.
    J'utilise ce code ci dessous dans ma page (en haut avant le <!DOCTYPE html>)
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function chargerClasse ($classe)
    {
    require '../classes/'.$classe.'.class.php';
    }
    spl_autoload_register ('chargerClasse');

  12. #12
    Nouveau membre du Club Avatar de gautier1er
    Homme Profil pro
    Developpeur C et PHP
    Inscrit en
    Août 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Developpeur C et PHP

    Informations forums :
    Inscription : Août 2017
    Messages : 61
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Il faut vérifier
    Quand je fais :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      $utilisateur=$manager->getMembre($id);
     
    If(empty($utilisateur) )
    {
    return True ; 
    }
    else{
    return  fasse ; 
    }
    Ceci me renvoi faux (false)
    Mais quand j'utilise une méthode: écho $utilisateur->getPseudo(); cela n'affiche rien

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    On parlait de la requête...

    Sinon plutôt que d'afficher true/false qui n'indique pas grand chose, fais directement un var_dump().
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Nouveau membre du Club Avatar de gautier1er
    Homme Profil pro
    Developpeur C et PHP
    Inscrit en
    Août 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Developpeur C et PHP

    Informations forums :
    Inscription : Août 2017
    Messages : 61
    Points : 32
    Points
    32
    Par défaut
    quand je fais
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
     var_dump($utilisateu);
    je vois null affiché sur l'ecran

  15. #15
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Et en faisant var_dump($utilisateur); ? Ce serait bien de faire attention en tapant...
    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)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  16. #16
    Nouveau membre du Club Avatar de gautier1er
    Homme Profil pro
    Developpeur C et PHP
    Inscrit en
    Août 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Developpeur C et PHP

    Informations forums :
    Inscription : Août 2017
    Messages : 61
    Points : 32
    Points
    32
    Par défaut
    Dans mon code source c'est bien saisie , j'ai fais du copié collé c'est ce qui a entraîné cela .
    je m'excuse.

  17. #17
    Membre averti Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Points : 301
    Points
    301
    Par défaut
    Hello gautier1er,

    As-tu penser à vérifier si tu entrais bien dans ta condition if(method_exists($this, $methode)) ?

    Il se peut que les champs de ta base de données ne matchent pas avec tes setters. Pour te simplifier la vie tu pourrais utiliser PDO::FETCH_CLASS, voir un tutoriel ici de comment l'utiliser cas d'utilisation du fetch class.

    Peut-être mettre le error_reporting(E_ALL), mettre des try/catch dans tes fonctions d'interrogation de base de données afin de récupérer de potentielles exceptions et donc setter ton object PDO avec $tonObjectPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    Je pense qu'après ça tu devrais y voir plus claire.

    Enfin, je te propose de passer un peu de temps sur l'indentation de ton code, elle est un peu cassée

    Courage, bonne continuation !
    Sun Certified Java Programmer, SE 6 et Sun Certified Web Component Developer, J2EE 5

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

Discussions similaires

  1. Problème de programmation orientée objet
    Par dan65 dans le forum WinDev
    Réponses: 8
    Dernier message: 17/09/2006, 01h04
  2. Réponses: 2
    Dernier message: 30/03/2006, 14h48
  3. [C#] Comment correctement programmer orienté objet ?
    Par ChristopheOce dans le forum C#
    Réponses: 5
    Dernier message: 06/02/2006, 13h22
  4. [POO] apprendre la programmation orientée objet
    Par Invité dans le forum Langage
    Réponses: 5
    Dernier message: 10/12/2005, 11h33
  5. [DEBUTANT] Conseil sur la programmation orienté objet
    Par etiennegaloup dans le forum Langage
    Réponses: 7
    Dernier message: 27/05/2005, 12h59

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