Pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter, inscrivez-vous gratuitement !

 

  1. #1
    Membre à l'essai Avatar de gautier1er
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2017
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : août 2017
    Messages : 52
    Points : 23
    Points
    23

    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 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 29 181
    Points : 43 361
    Points
    43 361

    Par défaut

    Ou est la methode hydrateMembre ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai Avatar de gautier1er
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2017
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : août 2017
    Messages : 52
    Points : 23
    Points
    23

    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 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 29 181
    Points : 43 361
    Points
    43 361

    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
    Membre à l'essai Avatar de gautier1er
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2017
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : août 2017
    Messages : 52
    Points : 23
    Points
    23

    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 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 29 181
    Points : 43 361
    Points
    43 361

    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
    Membre à l'essai Avatar de gautier1er
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2017
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : août 2017
    Messages : 52
    Points : 23
    Points
    23

    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 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 29 181
    Points : 43 361
    Points
    43 361

    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
    Modérateur
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    4 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 4 626
    Points : 11 448
    Points
    11 448
    Billets dans le blog
    5

    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.
    # Dans la Création, tout est permis mais tout n'est pas utile...

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

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

    Informations forums :
    Inscription : avril 2007
    Messages : 7 959
    Points : 16 091
    Points
    16 091

    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.

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

  11. #11
    Membre à l'essai Avatar de gautier1er
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2017
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : août 2017
    Messages : 52
    Points : 23
    Points
    23

    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
    Membre à l'essai Avatar de gautier1er
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2017
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : août 2017
    Messages : 52
    Points : 23
    Points
    23

    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 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 29 181
    Points : 43 361
    Points
    43 361

    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
    Membre à l'essai Avatar de gautier1er
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2017
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : août 2017
    Messages : 52
    Points : 23
    Points
    23

    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
    7 959
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

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

    Informations forums :
    Inscription : avril 2007
    Messages : 7 959
    Points : 16 091
    Points
    16 091

    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.

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

  16. #16
    Membre à l'essai Avatar de gautier1er
    Homme Profil pro
    Webmaster
    Inscrit en
    août 2017
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : août 2017
    Messages : 52
    Points : 23
    Points
    23

    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 : 36

    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 Syntaxe
    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