Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
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
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
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
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
$candidat = $this->addElement('select', 'candidat', array(
'label' => 'Candidats',
'required' => true,
'multioptions' => $candidatsArray->nom,
));
'multioptions' => $candidatsArray,
Cdt
Jean
Hors ligne
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
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
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
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
Pages: 1