Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/03/2011, 12h23   #1
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
Par défaut Affichage de résultat

Bonjour,

J'ai le code suivant:
Code :
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 :
<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,
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 12h32   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Aïe.

Cette forme est plus appropriée:
Code :
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 ?

Citation:
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).

Citation:
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.

Citation:
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 :
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
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 15h03   #3
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
Citation:
Vu que cette propriété est publique tu peux y accéder ainsi:
Code :
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...
Citation:
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 :
1
2
$err = $PDO->errorInfo();
throw new RuntimeException("Query Error : {$err[2]}");
Correspond à la gestion d'une exception ?
Merci,
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 15h10   #4
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
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 ?
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 15h32   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
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

Citation:
C'est l'objet de connection PDO... Par contre,
Oui et comment se retrouve t'il dans cette méthode ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 12h03   #6
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
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...
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 12h20   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
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 :
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];
    }
}
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 13h53   #8
Membre du Club
 
Inscription : mars 2008
Messages : 274
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 274
Points : 50
Points : 50
Ok, merci,
yann18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h26.


 
 
 
 
Partenaires

Hébergement Web