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

Zend Framework PHP Discussion :

POO Récupération de données d'une méthode d'une fonction


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Par défaut POO Récupération de données d'une méthode d'une fonction
    Bonjour,

    Je suis pas encore très familier avec la POO, j'utilise PHP 5.3 et Zend Framework 1.10.

    J'ai tout d'abord un fichier nommé utilisateur.php, qui permet d'instancier la table utilisateur, et j'ai une méthode qui effectue une sélection sur cette table :

    utilisateurs.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
     
    <?php
     
    require_once 'Zend/Db/Table/Abstract.php';
     
     
     
    class Utilisateurs extends Zend_Db_Table_Abstract
    {
        protected $_name = 'utilisateurs';
        protected $_primary = array('id_utilisateurs');
     
     
     
    	public  function recupStatut($util)
    	{
     
     
    	   $sql = "SELECT statut FROM utilisateurs WHERE login LIKE '$util'";
    	   $result = $this->db->fetchAll($sql);
    	return $result;
     
     
     
    	}
    }
     
    ?>
    je souhaite récupérer le résultat de cette sélection (donc $result) dans une autre page.

    Voici le code de l'autre page ( Je ne met que les passages importants) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //Instanciation de la table utilisateurs
     
    require_once '\..\models\utilisateurs.php';
    // récupération du statut
     
    $statut = new utilisateurs();		
    $statut->recupStatut($user);
     
    // Mise en session
     
    $user_session->statut = $statut;
    Et dans ma vue, je test l'affichage avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    echo $user_session->statut;
    J'obtiens cette erreur :

    Catchable fatal error: Object of class __PHP_Incomplete_Class could not be converted to string

    Plusieurs questions :

    - Suite au message, je pense qu'il faut convertir le résultat de la requête en string, comment faire ?

    - La fonction recupStatut() est mal écrite ?

    - Problème au niveau de la session ?

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Par défaut
    En faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $user_session->statut = $statut;
    Il y a je pense deux ou trois niveaux d'incompréhension dans le code que tu présentes.

    Tu assignes à $user_session->statut non pas le statut utilisateur, mais ton objet de classe Utilisateur qui ne peut pas être convertis en string (et donc sur lequel on ne peux pas faire d'echo).

    Ta méthode recupStatut() retourne l'information (les résultats de la requête) mais tu ne l'utilises pas, aussi elle ne sert à rien dans cet exemple.

    Ce que tu veux se rapproche de ça je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $utilisateur = new utilisateurs();		
    $statut = $utilisateur->recupStatut($user);
     
    // Mise en session								
    $user_session->statut = $statut;
    Ce qui marchera déjà mieux... Mais pas totalement. Tu utilises $this->db->fetchAll($sql) qui retourne les résultats de la requête sous forme d'un tableau de tableaux. Dans le cas présent ça retournera à peu près :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    array(
       0 => array(
          'statut' => 'ma valeur du champ statut'
       )
    )
    Ce que tu veux, par rapport à ton code, à mon avis, c'est juste la valeur du premier champ du premier résultat, sous-entendu que ta requête ne retourne qu'un seul résultat. Je te conseille donc la méthode fetchOne() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $sql = "SELECT statut FROM utilisateurs WHERE login LIKE '$util'";
    $result = $this->db->fetchOne($sql);
    return $result;
    Plus de doc sur Zend_Db : http://framework.zend.com/manual/en/...b.adapter.html

    A mon avis, ça devrait déjà marcher plus comme tu l'espérais. J'espère avoir un peu aidé...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Par défaut
    Merci du coup de main

    En effet j'ai pas fait attention sur le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $user_session->statut = $statut;

    Faut que je refasse des tutos sur la manipulation des objets.

    Donc je pense que ça devrait marcher, j'ai une autre erreur au niveau de la connexion de la table mais je vais tenter de m'en sortir tout seul

    Merci !

  4. #4
    Membre chevronné

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Par défaut
    Je viens de tilter sur un énorme problème de sécurité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public  function recupStatut($util)
    {
    	$sql = "SELECT statut FROM utilisateurs WHERE login LIKE '$util'";
    	$result = $this->db->fetchOne($sql);
    	return $result;	
    }
    Le problème est que tu inclus directement la variable $util dans ta requête, qui peut contenir du code dangereux. Zend_Db permet de lui laisser se charger de protéger les paramètres, voici une façon de faire beaucoup plus sûre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public  function recupStatut($util)
    {
    	$sql = "SELECT statut FROM utilisateurs WHERE login LIKE ?";
    	$result = $this->db->fetchOne($sql, $util);
    	return $result;	
    }
    Le deuxième argument des méthodes fetchXxx() permet d'associer un ou des paramètres à insérer dans la requête. Le "?" sera remplacé par la valeur de ta variable $util, les quotes seront mises si besoin et le contenu potentiellement dangereux sera protégé correctement par rapport au SGBDR utilisé.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Par défaut
    Je viens juste de voir ta réponse nightly,

    mon application sera seulement en interne donc il y a moins de risques, mais je vais modifier cela quand même !

    Merci !


    EDIT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = $this->_db->fetchOne($sql, $util);
    C'est _db et non db

    Si tu veux des cours sur Zend je suis là ! (je plaisante )

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

Discussions similaires

  1. [PHP 5.3] [POO] Appel d'une méthode dans une méthode
    Par yann18 dans le forum Langage
    Réponses: 6
    Dernier message: 20/10/2011, 09h56
  2. Réponses: 3
    Dernier message: 29/04/2008, 14h14
  3. Réponses: 6
    Dernier message: 20/04/2007, 15h24
  4. "ajouter une méthode dans une méthode"
    Par Zorgloub dans le forum Langage
    Réponses: 1
    Dernier message: 09/04/2006, 12h53
  5. Réponses: 2
    Dernier message: 31/08/2005, 16h12

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