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 :

Affichage de résultat [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 295
    Par défaut Affichage de résultat
    Bonjour,

    J'ai le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class EditComptes {
    var $data;
    ...
    function getInfoApp($app) {
    ...
    global $data;
    ]$select = $PDO->prepare('SELECT nom, prenom, id, pass, `section`
    FROM cpte
    WHERE `idRec` = :idRec');
    $select->bindValue(':idRec', $_SESSION['app'], PDO::PARAM_INT);
    $select->execute();
    $data = $select->fetch();
    ...
    Avec lequel je dois afficher les informations contenues dans $data dans un formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="nom" id="nom" value="<?php echo $data->nom; ?>" />
    global $data me paraît plus un tour de passe passe qu'autre chose et ne me satisfait pas... Je pense qu'il y a mieux à faire...
    j'ai essayé de stocker l'objet $select dans la propriété $data, mais j'avoue honnêtement:
    1. Ne pas savoir comment faire pour afficher les données à partir de cette propriété
    2. et de savoir si c'est la bonne méthode à faire...

    Merci,

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Aïe.

    Cette forme est plus appropriée:
    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
     
    class EditComptes {
      public $data;
     
      public function getInfoApp ($app) {
        $select = $PDO->prepare('SELECT nom, prenom, id, pass, `section` FROM cpte WHERE `idRec` = :idRec');
        $select->bindValue(':idRec', $_SESSION['app'], PDO::PARAM_INT);
        if ($select->execute()) {
           $this->data = $select->fetch(PDO::FETCH_ASSOC);
        }
        else {
             $err = $PDO->errorInfo();
             throw new RuntimeException("Query Error : {$err[2]}");
        }
    }
    Une question tout de même, d'ou vient cette variable $PDO dans cette méthode ?

    global $data me paraît plus un tour de passe passe qu'autre chose et ne me satisfait pas... Je pense qu'il y a mieux à faire...
    Effectivement, $data est une propriété d'instance de EditComptes elle est donc accessible par les méthode d'instance avec le mot clé $this (voir l'exemple ci dessus).

    j'ai essayé de stocker l'objet $select dans la propriété $data, mais j'avoue honnêtement:
    L'objet select est un PDOStatement, à moins de vouloir le mettre en cache pour la classe (en non pour l'instance - ça n'a aucun sens, il y aurait redondance), ça ne sert à rien de le conserver comme propriété d'instance.

    Ne pas savoir comment faire pour afficher les données à partir de cette propriété
    Vu que cette propriété est publique tu peux y accéder ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $edit_compte = new EditCompte(); // je ne connais pas la forme de ton constructeur
    $edit_compte->getInfoApp($app);
    var_dump($edit_compte->data); // sera un array

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 295
    Par défaut
    Vu que cette propriété est publique tu peux y accéder ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $edit_compte = new EditCompte(); // je ne connais pas la forme de ton constructeur
    $edit_compte->getInfoApp($app);
    var_dump($edit_compte->data); // sera un array
    Et moi je suis fatigué... Sûr que si je fais echo $this->data->index après l'instanciation, ça ne risque pas de fonctionner...
    Une question tout de même, d'où vient cette variable $PDO dans cette méthode ?
    C'est l'objet de connection PDO... Par contre,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $err = $PDO->errorInfo();
    throw new RuntimeException("Query Error : {$err[2]}");
    Correspond à la gestion d'une exception ?
    Merci,

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 295
    Par défaut
    Oublie ma précédente question, quoique je ne connaissais pas ce vocabulaire... A personnaliser lorsqu'on passe en production je suppose...
    Je passe par un try and catch d'habitude. Cela revient au même ?

  5. #5
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    A personnaliser lorsqu'on passe en production je suppose...
    Non à mettre en place dès le départ.
    Les exceptions sont levées avec le mot-clé throw et catchées par un bloc try catch ailleurs (voir attrapées par le système si la callback à été définie par set_exception_handler).

    A lire: http://php.net/manual/en/language.exceptions.php

    C'est l'objet de connection PDO... Par contre,
    Oui et comment se retrouve t'il dans cette méthode ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 295
    Par défaut
    Bonjour,

    cela vient du fait que je n'ai pas créée de classe de connection. Mais maintenant que je le dis, je pense que je devrais le faire...

  7. #7
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Vu que la plupart du temps, on utilise une seule instance de PDO dans tout les scripts, il peut être intéressant d'en faire un singleton. La façon la plus adéquate de procéder est la méthode de Stealth35...voici le code:

    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
    class Singleton
    {
        protected static $_instances;
     
        public static function __callStatic($name, array $arguments)
        {    
            if(empty(static::$_instances[$name]) || !empty($arguments))
            {
                    if(strpos($name, '\\') === 0)
                    {
                    $name = substr($name, 1);
                    }
     
                    $classname = '\\' . $name;
     
                if(method_exists($classname, '__construct'))
                {
                    $class = new \ReflectionClass($classname);
                    static::$_instances[$name] = $class->newInstanceArgs($arguments);
                }
                else
                {
                    static::$_instances[$name] = new \$classname;
                }
            }
     
            return static::$_instances[$name];
        }
    }

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 295
    Par défaut
    Ok, merci,

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

Discussions similaires

  1. [MySQL] Affichage 1 résultat / 1 tableau
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 24
    Dernier message: 01/05/2006, 19h22
  2. [MySQL] affichage du résultat d'une requete dans une page
    Par blackbird1 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/03/2006, 14h07
  3. [MySQL] Affichage des résultats d'un requête
    Par wiwi dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/02/2006, 11h25
  4. Affichage des résultats d'un moteur de recherche
    Par poah dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2005, 14h31
  5. Affichage du résultat
    Par thomas_strass dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/07/2005, 11h30

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