Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-05-2011 10:03:07

Endyamon
Nouveau membre
Date d'inscription: 25-05-2011
Messages: 4

[ZF 1.10.8][Zend_Form] Listes déroulantes et base de données

Bonjour,

Je cherche à créer un formulaire qui contient notamment des listes déroulantes dont le contenu doit provenir d'une table, le but est de récupérer un index pour ensuite l'insérer dans une seconde table. J'ai fait quelques recherches et essais, mais je n'ai pas trouvé de solution satisfaisante. Pour l'instant, voici ce que j'ai fait :

CONTROLEUR :

function ajouterAction()
{
    $form = new Application_Form_Jury();
#    $form->envoyer->setLabel('Ajouter');
    $this->view->form = $form;
}

VUE :

<?php
$this->title = "Ajouter un nouveau jury";
$this->headTitle($this->title);
echo $this->form;
?>

FORM :

class Application_Form_Jury extends Zend_Form
{
    public function init()
    {
        $this->setName('jury');
       
        $db = Zend_Db_Table::getDefaultAdapter();         
        $options = $db->fetchPairs("SELECT id, CONCAT(nom,' ',prenom) FROM syn_adherents");
        print_r($options);
        $candidat = new Zend_Form_Element_Select('candidat');
        $candidat->setLabel('Candidat')
                 ->setRequired(true)
                 ->setMultiOptions($options);
           
        $envoyer = new Zend_Form_Element_Submit('envoyer');
        $envoyer->setAttrib('id', 'boutonenvoyer');
    }
}


le printr me permet de visualiser le contenu du tableau récupéré. L'affichage est correct : j'obtiens bien l'index et le libellé attendu. Toutefois, la liste déroulante ne s'affiche pas du tout. Je n'arrive pas à mettre le doigt sur mon erreur.

Ensuite, comme récupérer l'index pour l'insérer dans mon autre table ?

Merci par avance pour vos réponses, je désespère de faire marcher cette partie !

Hors ligne

 

#2 25-05-2011 10:46:57

jfvole
Membre
Date d'inscription: 20-11-2010
Messages: 69

Re: [ZF 1.10.8][Zend_Form] Listes déroulantes et base de données

Bonjour,

Voici un extrait de code qui corresponds à ce que tu cherche :

      foreach ($acteurs as $acteur)
      {
        $acteursArray[$acteur->id] = $acteur->nom;
      }
    $acteur = $this->addElement('select', 'acteur', array(
            'label'      => 'Etablissements ou acteurs',
            'required'   => true,
            'multioptions'   => $acteursArray,
    ));

$acteur-> id correspond à VALUE et $acteur->nom au LABEL de <OPTION ...>...</OPTION>

Cdt

Jean

Hors ligne

 

#3 28-05-2011 17:28:03

Endyamon
Nouveau membre
Date d'inscription: 25-05-2011
Messages: 4

Re: [ZF 1.10.8][Zend_Form] Listes déroulantes et base de données

Bonjour,

Merci pour ta réponse, cela m'a permis d'avancer. J'ai maintenant la liste déroulante qui s'affiche avec les bonnes données.

Toutefois, j'ai la notice suivante :

"Trying to get property of non-object in"

La ligne incriminée est celle contenue dans le foreach :

      foreach ($candidatsArray as $candidat)
      {
        $candidat[$candidat->id] = $candidat->nom;
      }

La réponse est sans doute simple, mais je n'arrive pas à mettre le doigt dessus.

Merci par avance pour ton aide.

Hors ligne

 

#4 02-06-2011 07:54:29

jfvole
Membre
Date d'inscription: 20-11-2010
Messages: 69

Re: [ZF 1.10.8][Zend_Form] Listes déroulantes et base de données

Bonjour,

$candidats = tableau déja existent;
$candidat = un tuple.
$candidatsArray = new array();

foreach ($candidats as $candidat)
      {
        $candidatsArray[$candidat->id] = $candidat->nom;
      }

Cdt

Jean

Hors ligne

 

#5 04-06-2011 17:26:02

Endyamon
Nouveau membre
Date d'inscription: 25-05-2011
Messages: 4

Re: [ZF 1.10.8][Zend_Form] Listes déroulantes et base de données

Bonjour Jean,

Encore merci pour ta réponse, mais je ne m'en sors toujours pas...

    public function init()
    {
        $candidatsArray = array();
        $this->setName('jury');   
        $db = Zend_Db_Table::getDefaultAdapter();
        $candidats = $db->fetchPairs("SELECT id, CONCAT(nom,' ',prenom) as nom FROM syn_adherents");

    foreach ($candidats as $candidat)
    {
        $candidatsArray[$candidat->id] = $candidat->nom;
    }
    $candidat = $this->addElement('select', 'candidat', array(
            'label'      => 'Candidats',
            'required'   => true,
            'multioptions'   => $candidatsArray->nom,
    ));
                   
        $envoyer = new Zend_Form_Element_Submit('envoyer');
        $envoyer->setAttrib('id', 'boutonenvoyer');
    }

J'ai toujours une erreur disant qu'à cette ligne je fais appel à une variable qui n'est pas un tableau :

$candidatsArray[$candidat->id] = $candidat->nom;

Merci par avance si tu as une idée !

Hors ligne

 

#6 06-06-2011 10:03:29

jfvole
Membre
Date d'inscription: 20-11-2010
Messages: 69

Re: [ZF 1.10.8][Zend_Form] Listes déroulantes et base de données

$candidat = $this->addElement('select', 'candidat', array(
            'label'      => 'Candidats',
            'required'   => true,
            'multioptions'   => $candidatsArray->nom,
    ));

            'multioptions'   => $candidatsArray,

Cdt

Jean

Hors ligne

 

#7 06-06-2011 19:05:21

Endyamon
Nouveau membre
Date d'inscription: 25-05-2011
Messages: 4

Re: [ZF 1.10.8][Zend_Form] Listes déroulantes et base de données

Merci Jean, OK pour la correction de l'erreur, mais j'ai toujours un problème avec le candidatsArray :

Notice: Trying to get property of non-object in D:\EasyPHP\www\adhezif\application\forms\Jury.php on line 14

La ligne 14 est :         $candidatsArray[$candidat->id] = $candidat->nom;

Merci pour ton aide.

Hors ligne

 

#8 07-06-2011 11:26:32

Ithier
Membre
Date d'inscription: 05-01-2010
Messages: 85

Re: [ZF 1.10.8][Zend_Form] Listes déroulantes et base de données

Est-ce que le problème ne viendrais pas plutôt de $candidat et pas de $candidatsArray ? Il me semble que fetchPairs renvoie un tableau et pas un objet.

Hors ligne

 

#9 07-06-2011 12:03:24

f.garoby
Membre
Date d'inscription: 02-03-2011
Messages: 105

Re: [ZF 1.10.8][Zend_Form] Listes déroulantes et base de données

Endyamon a écrit:

Merci Jean, OK pour la correction de l'erreur, mais j'ai toujours un problème avec le candidatsArray :

Notice: Trying to get property of non-object in D:\EasyPHP\www\adhezif\application\forms\Jury.php on line 14

La ligne 14 est :         $candidatsArray[$candidat->id] = $candidat->nom;

Merci pour ton aide.

Le problème n'est pas sur la variable $candidatsArray mais sur la variable $candidat qui n'est pas, comme l'indique le message d'erreur, un objet.
Vérifie qu'elle contient bien ce que tu veux (à coups de Zend_Debug::dump( $candidat ) )

Hors ligne

 

#10 07-06-2011 20:55:57

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: [ZF 1.10.8][Zend_Form] Listes déroulantes et base de données

Endyamon a écrit:

Bonjour Jean,

Encore merci pour ta réponse, mais je ne m'en sors toujours pas...

    public function init()
    {
        $candidatsArray = array();
        $this->setName('jury');   
        $db = Zend_Db_Table::getDefaultAdapter();
        $candidats = $db->fetchPairs("SELECT id, CONCAT(nom,' ',prenom) as nom FROM syn_adherents");

    foreach ($candidats as $candidat)
    {
        $candidatsArray[$candidat->id] = $candidat->nom;
    }
    $candidat = $this->addElement('select', 'candidat', array(
            'label'      => 'Candidats',
            'required'   => true,
            'multioptions'   => $candidatsArray->nom,
    ));
                   
        $envoyer = new Zend_Form_Element_Submit('envoyer');
        $envoyer->setAttrib('id', 'boutonenvoyer');
    }

J'ai toujours une erreur disant qu'à cette ligne je fais appel à une variable qui n'est pas un tableau :

$candidatsArray[$candidat->id] = $candidat->nom;

Merci par avance si tu as une idée !

-----------------------------------------------------
il faut passer à $multioptions le tableau $candidatsArray et non $candidatsArray->nom(qui n'est qu'une supposée variable du tableau).

public function init()
    {
        $candidatsArray = array();
        $this->setName('jury');   
        $db = Zend_Db_Table::getDefaultAdapter();
        $candidats = $db->fetchPairs("SELECT id, CONCAT(nom,' ',prenom) as nom FROM syn_adherents");

    foreach ($candidats as $candidat)
    {
        $candidatsArray[$candidat->id] = $candidat->nom;
    }
    $candidat = $this->addElement('select', 'candidat', array(
            'label'      => 'Candidats',
            'required'   => true,
            'multioptions'   => $candidatsArray,
    ));

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages