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

Symfony PHP Discussion :

Requête sur base de données [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 42
    Points
    42
    Par défaut Requête sur base de données
    Bonjour cher tous!

    Aujourd'hui c'est un probleme de requette sur une base de données qui me rend fou
    Sur un projet j'ai utilisé deux bases de données et dans mon schema.yml à chaque fois je spécifie le nom de la base de données concernée sur mes tables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Budget:
      connection: baseclient
      tableName: budget
      columns:
        id:
          type: integer(11)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
    ...
    j'ai bien genere les modèles, les formulaires, les filtres, j'ai cree le sql et je l'ai insere dans ma base grace aux commandes symfony.

    Ensuite j'ai genere des modules avec la commande "doctrine_generate_admin" pour les CRUD de mes tables et ça marche nickel.

    Mais seulement sur un module simple "generate_module" j'essaye d'interroger ma base et j'ai une grosse erreur.
    dans le fichier.table j'ai cette requette:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public function getUserByConnexion($username,$password)
        {
            $q = Doctrine_Query::create()
                ->from('Utilisateur u')
                ->where('u.username ='.$username)
                ->andWhere('u.password ='.$password);
            return $q;
        }
    dans mon action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            $this->username= $request->getParameter('username');
            $this->password = $request->getParameter('password');
     
     
            $this->user = Doctrine::getTable('Utilisateur')
                              ->getUserByConnexion($this->username,$this->pass)
                              ->execute();
    et quand ce que le $this->user me donne dans le template
    j'ai cette erreur que je ne comprend pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQLSTATE[42S22]: Column not found: 1054 Unknown column 'distributeurvichy' in 'where clause'. Failing Query: "SELECT u.id AS u__id, u.username AS u__username, u.password AS u__password, u.repassword AS u__repassword, u.nom AS u__nom, u.prenom AS u__prenom, u.fonction AS u__fonction, u.email AS u__email, u.mobile AS u__mobile, u.telephone AS u__telephone, u.is_active AS u__is_active, u.is_super_admin AS u__is_super_admin, u.derniere_connexion AS u__derniere_connexion, u.ip_connexion AS u__ip_connexion, u.date_creation AS u__date_creation, u.derniere_modification AS u__derniere_modification, u.unite_id AS u__unite_id, u.profil_utilisateur_id AS u__profil_utilisateur_id FROM utilisateur u WHERE (u.username = distributeurvichy AND u.password = 27572535ce007aa408d2e145c18e64b0)"
    au secours je deviens bête , il me dit qu'il ne connait pas la colonne 'distributeurvichy' ...je saisd pas mais..cette colonne n'a effectivement jamais existé dans ma base.

    Si quelqu'un peut m'aider je suis preneur!!!

    Merci.

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 124
    Points : 150
    Points
    150
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public function getUserByConnexion($username,$password)
        {
            $q = Doctrine_Query::create()
                ->from('Utilisateur u')
                ->where('u.username = ?', $username)
                ->andWhere('u.password = ?', $password);
            return $q;
        }
    Essai cette requete pour voir.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 42
    Points
    42
    Par défaut
    On avance déjà mais on est encore loin!!
    Il me retourne ce resultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <pre> Doctrine_Collection data : Array( 0 : Object(Utilisateur) ) </pre>
    je sais pas si je comprends mal mais ça veut dire qu'il n'y a aucun objet qui a été retourné et pourtant il existe bel et bien dans ma table.

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Bon on est d'accord que la requête originel ne pouvait marcher. Corrigé par PeytaWodka.

    Reste un problème purement sql, pourquoi n'y a-t-il pas de données récupérées.

    Question, ton password est en claire dans ta base ???? Si non, ceci peut expliquer cela !

    Piste de recherche. Lance ton application en mode dev. Dans la barre de debug tu as les requêtes sql utilisées. Regarde celle qui récupère ton user. Teste là directement dans un outil comme phpMyAdmin ou Heidi.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  5. #5
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 42
    Points
    42
    Par défaut
    Mon mot de passe est en hash dans ma base, et je prends bien soin de transformer le mot de passe que je recupere du formulaire avant de lancer ma recherche dans la base et en plus j'ai essayer de rechercher mon user sans faire reference au mot de passe et il n'a toujour rien trouver.

    Par ailleurs en executant le script que j'ai recupere dans le log
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT u.id AS u__id, u.username AS u__username, u.password AS u__password, u.repassword AS u__repassword, u.nom AS u__nom, u.prenom AS u__prenom, u.fonction AS u__fonction, u.email AS u__email, u.mobile AS u__mobile, u.telephone AS u__telephone, u.is_active AS u__is_active, u.is_super_admin AS u__is_super_admin, u.derniere_connexion AS u__derniere_connexion, u.ip_connexion AS u__ip_connexion, u.date_creation AS u__date_creation, u.derniere_modification AS u__derniere_modification, u.unite_id AS u__unite_id, u.profil_utilisateur_id AS u__profil_utilisateur_id FROM utilisateur u WHERE (u.username = ? AND u.password = ?) - (distributeurvichy, 27572535ce007aa408d2e145c18e64b0)
    j'ai eu cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? AND u.password = ?) - (distributeurvichy, 27572535ce007aa408d2e145c18e64b0) ' at line 1
    J'ai donc modifier mon code dans mon modele

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public function getUserByConnexion($username,$password)
        {
            $q = Doctrine_Query::create()
                ->from('Utilisateur u')
                ->where('u.username = "'.$username.'"')
                ->andWhere('u.password = "'.$password.'"');
            return $q;
        }
    J'ai eu ce script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT u.id AS u__id, u.username AS u__username, u.password AS u__password, u.repassword AS u__repassword, u.nom AS u__nom, u.prenom AS u__prenom, u.fonction AS u__fonction, u.email AS u__email, u.mobile AS u__mobile, u.telephone AS u__telephone, u.is_active AS u__is_active, u.is_super_admin AS u__is_super_admin, u.derniere_connexion AS u__derniere_connexion, u.ip_connexion AS u__ip_connexion, u.date_creation AS u__date_creation, u.derniere_modification AS u__derniere_modification, u.unite_id AS u__unite_id, u.profil_utilisateur_id AS u__profil_utilisateur_id FROM utilisateur u WHERE (u.username = "distributeurvichy" AND u.password = "27572535ce007aa408d2e145c18e64b0") - ()
    je l'ai teste sur phpmyadmin et j'ai eu cet erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') LIMIT 0, 30' at line 1
    apparemment il doit y avoir un problème avec le LIMIT 0, 30!!?,

  6. #6
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 42
    Points
    42
    Par défaut
    En fait quand je regarde la commande sql qui est donnée dans le fichier de log
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT u.id AS u__id, u.username AS u__username, u.password AS u__password, u.repassword AS u__repassword, u.nom AS u__nom, u.prenom AS u__prenom, u.fonction AS u__fonction, u.email AS u__email, u.mobile AS u__mobile, u.telephone AS u__telephone, u.is_active AS u__is_active, u.is_super_admin AS u__is_super_admin, u.derniere_connexion AS u__derniere_connexion, u.ip_connexion AS u__ip_connexion, u.date_creation AS u__date_creation, u.derniere_modification AS u__derniere_modification, u.unite_id AS u__unite_id, u.profil_utilisateur_id AS u__profil_utilisateur_id FROM utilisateur u WHERE (u.username = "distributeurvichy" AND u.password = "27572535ce007aa408d2e145c18e64b0") - ()
    si je supprime le " -() " qu'il ya a la fin du script ca va me ramene l'objet que je recherche.
    Mais la question est de savoir comment faire pour l'enlever depuis la requête doctrine

  7. #7
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    La première requête que tu récupère semble bien fonctionnel. En effet, le -(...) n'est pas généré en sql. Il correspond aux arguments qui remplaceront les deux ? présents dans la requête.

    La question serait plutôt de savoir pourquoi la requête marche en sql et pas en dql.

    Tu peux essayer le debug du DQL généré. Dans ton code, au lieu de faire un exécute, fait un ->getSqlQuery() vers une variable puis un var_dumpt().

    Maintenant, je pense à une autre chose, tu fais un execute()... Donc tu récupère un Doctrine_Query et non pas un sfDoctrineRecord. Fais plutôt un ->fechtOne().
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  8. #8
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 42
    Points
    42
    Par défaut
    avec un ->fetchOne voila la nouvelle erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Call to undefined method Doctrine_Query::fechtOne() in C:\wamp\www\hyundailocalad\apps\frontend\modules\connexion\actions\actions.class.php on line 31

  9. #9
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    De la compréhension de son modèle objet...

    De l'utilisation d'un bon EDI qui fait de la complétion...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $this->user = Doctrine::getTable('Utilisateur')
                              ->getUserByConnexion($this->username,$this->pass)
                              ->fechtOne();
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  10. #10
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 42
    Points
    42
    Par défaut
    j'utilise netBeans et je crois que cote completion , il gère quand même!!
    Est ce que mon problme peut être au niveau du schema.yml, je dis ca comme ça atout hasard.

  11. #11
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Netbeans fait correctement l'autocomplétion pour le fechtOne(). Il est impossible qu'il te l'ai proposé là où tu l'as mis.

    Regarde le code que je t'ai donné, le fechtOne n'est pas au même endroit dans le code...
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  12. #12
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 42
    Points
    42
    Par défaut
    Bonjour,
    Je viens de mettre le fetchOne à sa place,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $this->user = Doctrine::getTable('Utilisateur')
                              ->getUserByConnexion($this->username,$this->pass)
                              ->fetchOne();
    et apparemment je n'ai plus d'erreur , mais seulement dans mon template $user me retourne 2, comment faire pour accéder aux différentes colonnes de l'objet?
    Qu'est qu'il fait exactement ce fetchOne??

  13. #13
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 80
    Points : 169
    Points
    169
    Par défaut
    Bonjour,

    Comme Michel le dit, Netbeans fait bien l'autocompletion, mais il aurait du vous sauter aux yeux que le verbe "to fecht" n'existe pas en anglais. On préfèrera utiliser "to fetch".

    De fait, "fetchOne" fonctionnera bien mieux et PHP ne devrait plus vous injurier pour ce cas là.

    Cdt.

  14. #14
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 80
    Points : 169
    Points
    169
    Par défaut
    fetchOne, va vous retourner un objet de type Utilisateur.

    Utilisez ensuite les accesseurs de l'objet retourné pour accéder aux différentes propriétés issues de la table.

    Par ailleurs, vous devriez ajouter de la phpdoc à votre signature de méthode getUserByConnexion, et notamment y spécifier le type de retour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /**
     * @param string login
     * @param string pwd
     * @return Utilisateur
     */
    public getUserByConnexion(....){
    }
    Par ailleurs, je serais vous, je déporterai l'appel à fetchOne dans la fonction getUserByConnexion.
    Cela aurait l'avantage de vous affranchir de l'appel à fetchOne dans le controlleur et vous permettrait de profiter de l'autocompletion de Netbeans qui identifierait bien le type de retour de getUserByConnexion attribué à l'objet affecté en retour de méthode.

  15. #15
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 42
    Points
    42
    Par défaut
    j'ai suivi vos instructions

    dans le modele
    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
     
    /**
     * @param string login
     * @param string pwd
     * @return Utilisateur
     */
     
        public function getUserByConnexion($username,$password)
        {
            $q = Doctrine_Query::create()
                ->from('Utilisateur u')
                ->where('u.username ="'.$username.'"')
                ->andWhere('u.password ="'.$password.'"')
                ->fetchOne();
            return $q;
        }
    l'action
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $this->user = Doctrine::getTable('Utilisateur')
                              ->getUserByConnexion($this->username,$this->pass)
                              ;
    le template
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php echo $user;?>
    me donne 2 et dans le même template ce script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php foreach ($user as $user){?>
        <?php echo $user->getUsername();?>
        <?php }?>
    ou tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php echo $user->getUsername();?>
    ça me donne une belle page blanche.

    Comment je fais pour acceder aux données de l'objet?

  16. #16
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    fetchOne() retourne un objet sfDoctrineRecord. Soit un enregistrement.

    Il n'est donc pas possible de parcourir par un foreach (qui accessoirement ne peut fonctionner avec ta syntaxe).

    Le fait d'afficher un sfDoctrineRecord va chercher si, dans ton objet du modèle, tu as définis une méthode _toString(), si oui, il te retournera le résultat. Dans le cas contraire, il retourne l'id de l'enregistrement.

    Par contre, il est étonnant que le $user->getUsername() ne retourne rien. Soit le nom n'est pas renseigné (mais alors comment la requête peut-elle le retourner, soit il y a un autre problème !

    Essaye dans ton action, juste après avoir récupéré ton user de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var_dump($this->user);
    die();
    histoire de voir ce qu'il a dans le ventre.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  17. #17
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 80
    Points : 169
    Points
    169
    Par défaut
    La page blanche est à priori une erreur 500, c'est à dire le module PHP d'Apache qui se vautre, sur - par exemple - l'appel d'une méthode sur une variable "non objet". Ca peut aussi être simplement que la donnée ne contient rien (à vérifier)...

    Dans la première utilisation, le fait d'avoir un résultat (le "2") peut venir de deux sources :
    - La première, est que $user est bien un objet, et que la méthode magique __toString() essais de trouver le meilleur candidat à afficher (il essais "id", "lb", et d'autres). Dans ce cas, cela voudrait dire que la méthode getUsername() n'existe pas dans l'objet et c'est facheux. Vérifier du coup que le "2" affiché dans le premier cas n'est pas l'identifiant de votre donnée en base.

    - la seconde, est que $user contient en fait une donnée simplement textuelle (id : "2") ou numérique (ie : 2) et que de fait essayer d'y appliquer un appel de méthode est forcément vouée à l'échec.

    Tout ça pour dire que vous devriez vous mettre en debug, et que dans la toolbar de symfony, vous devriez trouver quel est le type de la donnée $user dans l'onglet "view".

    De là, cela devrait vous donner des pistes.

  18. #18
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 42
    Points
    42
    Par défaut
    je n'ose meme pas vous montrez tout ce qu'il a dans le ventre c'est trooop!!
    juste un apercu apres le var_dump:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    object(Utilisateur)#76 (18) { ["_node":protected]=> NULL ["_id":protected]=> array(1) { ["id"]=> string(1) "2" } ["_data":protected]=> array(18) { ["id"]=> string(1) "2" ["username"]=> string(17) "distributeurvichy" ["password"]=> string(32) "27572535ce007aa408d2e145c18e64b0" ["repassword"]=> string(32) "27572535ce007aa408d2e145c18e64b0" ["nom"]=> string(12) "distributeur" ["prenom"]=> string(5) "vichy" ["fonction"]=> string(0) "" ["email"]=> string(15) "test@localad.fr" ["mobile"]=> string(0) "" ["telephone"]=> string(0) "" ["is_active"]=> string(1) "1" ["is_super_admin"]=> string(0) "" ["derniere_connexion"]=> string(0) "" ["ip_connexion"]=> string(9) "127.0.0.1" ["date_creation"]=> string(19) "2011-05-23 00:00:00" ["derniere_modification"]=> string(19) "2011-05-23 00:00:00" ["unite_id"]=> string(1) "5" ["profil_utilisateur_id"]=> string(1) "2" } ["_values":protected]=> array(0) { } ["_state":protected]=> int(3) ["_lastModified":protected]=> array(0) { } ["_modified":protected]=> array(0) { } ["_oldValues":protected]=> array(0) { } ["_errorStack":protected]=> NULL ["_references":protected]=> array(0) { } ["_pendingDeletes":protected]=> array(0) { } ["_pendingUnlinks":protected]=> array(0) { } ["_serializeReferences":protected]=> bool(false) ["_invokedSaveHooks":protected]=> bool(false) ["_oid":"Doctrine_Record":private]=> int(2) ["_table":protected]=> object(UtilisateurTable)#52 (27) { ["_data":protected]=> array(0) { } ["_identifier":protected]=> string(2) "id" ["_identifierType":protected]=> int(1) ["_conn":protected]=> object(Doctrine_Connection_Mysql)#21 (19) { ["driverName":protected]=> string(5) "Mysql" ["dbh":protected]=> object(PDO)#72 (0) { } ["tables":protected]=> array(1) { ["Utilisateur"]=> object(UtilisateurTable)#52 (27) { ["_data":protected]=> array(0) { } ["_identifier":protected]=> string(2) "id" ["_identifierType":protected]=> int(1) ["_conn":protected]=> object(Doctrine_Connection_Mysql)#21 (19) { ["driverName":protected]=> string(5) "M
    je perds la tête; juste pour anticiper, le jour ou je ferais une requête ou j'aurais plusieurs objet retourne le fetchOne me sera toujours utile? si oui comment je le parcourrais cette fois la?

  19. #19
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 80
    Points : 169
    Points
    169
    Par défaut
    Comme son nom l'indique, le fetchOne ne récupère qu'une information du type de l'objet demandé (ici Utilisateur).

    Si vous souhaitez itérer sur plusieurs enregistrements, il faut alors passer par un execute() qui renverra un Doctrine_Collection d'objets Utilisateur (dans ce cas) et vous pourrez utiliser un foreach.

    Concernant votre erreur, il est du coup, étonnant que vous n'ayez rien d'affiché. Le code que vous avez montré correspond-il vraiment à ce que vous avez dans votre code source (controleur, modèle, table et vue) ?

  20. #20
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 80
    Points : 42
    Points
    42
    Par défaut
    le code que je vous ai envoyé est exactement celui qui est sur ce projet.Effectivement le "2" qui est retourne est l'id de l'utilisateur, et quand je change la methode _string() et que je lui demande de me retourne le username , il le fait sans probleme.
    Ce qui me gene réellement dans cette histoire.C'est que j'ai plusieurs autres projets où ->execute() me retourne bien l'objet ou les objets demandées.
    Je pourrais bien me contenter d'utiliser le fetchOne pour la connexion vu que je ne recherche qu'un seul user.Mais comment je ferais si je veux une collection d'objet.??

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Requête sur base de données distante
    Par themich dans le forum Requêtes
    Réponses: 0
    Dernier message: 09/02/2013, 18h24
  2. Requête sur bases de données Blast
    Par jb59000 dans le forum Bioinformatique
    Réponses: 12
    Dernier message: 09/02/2009, 11h06
  3. [MySQL] Requête sur base de données à partir d'un formulaire
    Par spawns dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 26/01/2009, 09h00
  4. Execution de requête sur base de données distante
    Par ~~PriVate JoKe~~ dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/11/2006, 21h59
  5. Requête sur base de données ACCESS
    Par JLamotte dans le forum Access
    Réponses: 1
    Dernier message: 21/11/2005, 10h50

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