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 :

Afficher valeur depuis tableau associatif directement depuis une classe ? [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 126
    Par défaut Afficher valeur depuis tableau associatif directement depuis une classe ?
    Bonjour à tous

    Je n'arrive pas à accéder à une valeur lue dans un tableau associatif venant d'un résultat de requête depuis une classe :

    La requête retourne les bons résultats mais dans "index.php" la ligne $petsGenre->petGenre (ligne 9) envoie l'erreur "undefined property"...

    Sauf erreur de ma part, l'on peut accéder aux valeurs d'un tableau associatif directement depuis la classe ... Si je déclare à null une variable "petGenre" dans sa classe respective il n'y a plus d'erreur mais la valeur n'est pas affichée dans le "echo" de la page index.php...

    D'autre part, peut on factoriser et changer le mode de PDO fetch suivant les différents types de requêtes dans la fonction /Model.php/read() ?

    Merci d'avance pour vos suggestions

    index.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
     
    <body>
        <div class="container">
            <h1>Interface gestion </h1>
            <h3>Categories et sous-categories d'animaux</h3>
            <p>
                <?php
                //$petsGenre->id = 3;
                $petsGenre->read("petgenre");
                echo $petsGenre->petgenre
                ?>
            </p>
     
        </div>
    </body>
    Model.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
     
    //Fonction lecture données d'une table
     
        public $id;
        public $table;
        public $idName;
     
        public function read($fields = null)
        {
            $bdd = self::getBdd();
     
            if ($fields == null) {
                $fields = "*";
            }
            //Requêtes différentes si aucun identifiant spécifié
            if ($this->id == null) {
                $sql = ("SELECT $fields FROM " . $this->table);
                echo 'Toute la table';
            } else {
                $sql = ("SELECT $fields FROM " . $this->table . " WHERE " . $this->idName . " = " . $this->id);
                echo 'Un seul résultat';
            }        
            $data = $bdd->prepare($sql);
            $data->execute();
            $data = $data->fetchAll(PDO::FETCH_ASSOC);
     
            echo '<pre>', print_r($data), '<pre>';
            foreach ($data as $k => $v) {
                $this->$k = $v;
            }
        }
    Classe "PetsGenre.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    class PetsGenres extends Model
    {
        var $table = "petsGenres";
        var $idName = "idGenre";
    }

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour,
    Vous ne retournez rien, du coup rien ne s'affiche.

    Ceci devrais répondre à votre besoin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $datas = $data->fetchAll(PDO::FETCH_OBJ);
    return $datas; 
          // echo '<pre>', print_r($data), '<pre>';
          //  foreach ($data as $k => $v) {
          //      $this->$k = $v;
          //  }

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 126
    Par défaut
    Rebonjour et merci pour votre réponse , malheureusement cela ne marche toujours pas ...

    Cela me renvoie :"warning : undefined property"

    Le tableau associatif est pourtant correct ... je le vois grâce au print_r ...

    Voici le fichier Model modifié :

    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
    //Fonction lecture données d'une table
     
        public $id;
        public $table;
        public $idName;
     
        public function read($fields = null)
        {
            $bdd = self::getBdd();
     
            if ($fields == null) {
                $fields = "*";
            }
            //Requêtes différentes si aucun identifiant spécifié
            if ($this->id == null) {
                $sql = ("SELECT $fields FROM " . $this->table);
     
            } else {
                $sql = ("SELECT $fields FROM " . $this->table . " WHERE " . $this->idName . " = " . $this->id);         
            }
            $data = $bdd->prepare($sql);
            $data->execute();
            $result = $data->fetchAll(PDO::FETCH_ASSOC);
     
            echo '<pre>', print_r($data), '<pre>';
            foreach ($data as $k => $v) {
                $this->$k = $v;
            }
            return $result;
        }
    fichier index.php

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <body>
        <div class="container">
            <h1>Interface gestion </h1>
            <h3>Categories et sous-categories d'animaux</h3>
            <p>
                <?php
                $petsGenre->id = 3;
                $petsGenre->read();
                echo $petsGenre->petGenre;
                ?>
            </p>
     
        </div>
    </body>

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Ok, je viens de comprendre ce que vous essayez de faire.


    On est bien d'accords que votre code, ne retourneras que le dernier élément de votre tableau, donc si vous ne passez ps de id, seule la dernière ligne sera retourné.

    Où instanciez vous votre objet de class ?

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 126
    Par défaut
    La classe "PetsGenres" est instanciée par la fonction générique suivante qui est incluse dans Model.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Fonction chargeant un fichier PHP déterminé
        static function classLoader($fileName)
        {
            require_once($_SERVER['DOCUMENT_ROOT'] . '/' . $fileName . '.php');
     
            return new $fileName();
        }
    et Dans le fichier index.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    require_once($_SERVER['DOCUMENT_ROOT'] . '/core.php');
    $petsGenre = Model::classLoader('PetsGenres');
    ?>

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Attention vous mettez les données dans $result, mais vous bouclez dans $data

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     $result = $data->fetchAll(PDO::FETCH_ASSOC);
     
            echo '<pre>', print_r($data), '<pre>';
            foreach ($result as $k => $v) {
                $this->$k = $v;
            }
            //return $result;

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

Discussions similaires

  1. Copier des valeurs depuis une autre tableau régulièrement mis à jour
    Par koukou13 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/04/2019, 05h50
  2. Réponses: 7
    Dernier message: 03/10/2008, 11h37
  3. Comment obtenir la valeur depuis une requêtre SQL
    Par xianxian620 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/03/2007, 10h34
  4. [SQL] Affichage d'une valeur depuis une requête
    Par kitty2006 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 19/09/2006, 16h38
  5. afficher un JDialog depuis une classe JDialog
    Par koolway dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 31/03/2006, 13h47

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