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 :

probleme de recupération de donnéees [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut probleme de recupération de donnéees
    bonjour la communauté,

    j'ai un soucis avec le code suivant...
    Il fonctionne bien (bien qu'il soit largement perfectible, je suis débutant en php/poo/pdo), quand je place un var_dump($this) à la fin de la bouche FOREACH, ma fiche ressort bien sous la forme d'un array.

    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
    32
    33
    <?php 
    require 'class/connect.php';
    class Model extends connect {
    	public $table;		
    	public $data;
    	public $connect;
     
    	function __construct(){
    		$this->connect = parent::__construct();
    	}
     
     
     
    	public function fiche($id){
     
     
    		$texte="SELECT * FROM ".$this->table." WHERE id=$id ORDER BY id LIMIT 1";
     
    		$sql = $this->connect->prepare($texte);
     
    		$sql->execute();
    		foreach ($sql as $key => $value) {
    			$this->$key= $value;
    		};
    	var_dump($this);
     
    }	
    	static function load($name){
    		require("$name.php");
    		return new $name();
    	}
    }
     ?>
    le problème vient de mon fichier index.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php 
     
    require_once('class/model.php');
     
    $adherents = Model::load("adherents");
     
    $adherents->fiche(2);
    echo $adherents->nom;
     
     
     ?>
    le echo me renvoie "Notice: Undefined property: adherents::$nom"...

    Je ne dois pas comprendre un truc dans la manipulation des données d'un array en POO...
    Merci de votre aide...

  2. #2
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Je ne suis pas un spécialiste, mais les lignes 29 et 30 ne semblent pas bonnes...(utilisation de la variable $name dans le require puis dans le return)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut
    Merci pour ta réponse, mais je ne pense pas que le problème vienne de là...

    Cette fonction instancie juste une certaine table (ici, "adherents"), je peux ainsi utiliser les mêmes fonctions en instanciant d'autres tables.

    Par ailleur,
    quand je remplace ma boucle par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($sql as $row) {
    			$this->data= $row;
    		};
    je récupère bien mes champs dans mon index.php en faisant
    $adherents->data['nom'] par exemple

    mais je préfère

    $adherents->nom;

    C'est vraiment un problème de manipulation de données mais je ne vois pas d'où ca vient..

    Merci

  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
    Par défaut
    Déjà ta requête est étrange puisque tu fais un ORDER et une LIMIT sur un résultat qui est a priori unique.
    Ensuite tu fais une préparation de données mais tu mets le paramètres en dur.

    Pour finir, concernant ton problème et puisque tu as fait un var_dump(), tu vois bien que $key ne contient pas le nom de la colonne et que $value est un tableau contenant colonne=>valeur

    Cela donne donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql="SELECT * FROM ".$this->table." WHERE id= :id";
    $sth = $this->connect->prepare($sql);
    $sth->execute(array(':id'=>$id));
    while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
    	foreach ($row as $key=>$value) {
    		$this->$key= $value;
          }
    }
    Évite quand tu exposes un problèmes de le surcharger d'éléments sans rapports. Ici, tu pouvais reproduire le problème avec les seuls lignes que j'ai corrigé et donc il n'y a que ça qui était pertinent.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Par défaut
    Merci infiniment Sabotage...

    Un peu honte en effet de ma requête , le fruit de x essais qui à la fin n'a plus ni queue ni tête....

    Ça fonctionne sans problème maintenant, même si j'avais bien analysé le var_dump(), je n'aurais jamais trouvé la solution...
    Je suppose c'est en partie en galérant comme ça que l'on apprend, mais heureusement que vous êtes là

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

Discussions similaires

  1. Réponses: 35
    Dernier message: 10/11/2008, 20h14
  2. [C#] problème d'accès aux données d'un datagrid
    Par linux dans le forum ASP.NET
    Réponses: 4
    Dernier message: 26/07/2005, 15h30
  3. [CR] problemes d'affichage de donnees
    Par marceline dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 24/06/2005, 12h24
  4. Probleme avec type de donnees
    Par kevinss dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 15h42
  5. Réponses: 12
    Dernier message: 04/10/2004, 19h18

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