Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour ;
Comment récupère la valeur sélectionnée de la liste déroulante et la transmettre au modèle
via un lien ?
Merci
Extrait du code:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Formulaire : Consencai.php
<?php
class Admin_Form_Conscours extends Zend_Form {
public function init() {
$this->setMethod('post')
->setName('consultationcours')
->setAttrib('name', 'conscours');
$groupe= new Admin_Model_DbTable_Groupe();
$array = array();
$array = $groupe->fetchall();
$liste = array();
foreach($array as $val)
{
$liste[] = $val['libel_groupe'];
}
$listegroupe = new Zend_Form_Element_Select('libelgroupe');
$listegroupe->setLabel('Groupe : ')
->setMultiOptions($liste)
->getDecorator('label')->setOption('tag', NULL);
$this->addElement($listegroupe);
$this->setDecorators(array(array('ViewScript',
array('viewScript' => 'consencaiscript.phtml'))));
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ConsencaiController.php
....................
public function consulterAction() {
Zend_Loader::loadClass('Zend_Filter_StripTags');
$filter = new Zend_Filter_StripTags();
$libelgroupe = trim($filter->filter($this->getRequest()->getParam('libelgroupe')));
$ConsmoisTab = new Admin_Model_DbTable_Consencai();
$this->view->rows = $ConsmoisTab->getConsencais($libelgroupe);
}
...............
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
modele: Consencai.php
<?php
class Admin_Model_DbTable_Consencai extends Zend_Db_Table_Abstract {
protected $_name = 'tconsencai';
protected $_primary = 'id_consencai';
public function getConsencais($libelgroupe = NULL) {
try {
return $this->fetchAll($this->select()
->where('libel_groupe_consencai = ?', $libelgroupe));
}
catch (Exception $e) {
echo "getConsencais<br />";
echo $e->getMessage();
exit;
}
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Hors ligne
salut,
au niveau de la vue du formulaire est-ce que la liste a bien les données?
Hors ligne
Premièrement merci beaucoup amiss.
Oui au niveau de la vue du formulaire la liste déroulante contient bien les données.
Vous trouver ci dessous le fichier consencaiscript.phtml
<form action="<?php echo $this->escape($this->element->getAction()); ?>"
method="<?php echo $this->escape($this->element->getMethod()); ?>"
name="<?php echo $this->escape($this->element->getAttrib('name')); ?>"
class="formconscours">
<table>
<tr>
<td align="center" COLSPAN=2><b>Veuillez choisir le parametre adequoat</td>
<td align="center"><b>Cliquez sur le lien correspondant a votre choix </td>
</tr>
<tr>
<td align="center" COLSPAN=2></td>
<td align="right"></td>
</tr>
<tr>
<td align="right"><?php echo $this->element->libelgroupe->renderLabel(); ?></td>
<td><?php echo $this->element->libelgroupe->renderViewHelper(); ?></td>
<td><div align="center">
<a href="<?php echo $this->url(array('module'=>'admin',
'controller'=>'consencai',
'action'=>'consulter'),
'default', true) ?>">
Consultation par groupe
</a></div></td>
</tr>
</table>
</form>
Hors ligne
personnellement, je ne vois pas comment peut-on transmettre les données d'un formulaire sans passer par un bouton de soumission(submit) ou une requête ajax.Dans ton cas à la place du lien href un bouton submit à lui seul aurait suffit d'envoyer les données du formulaire.
Il te faut associer la vue du formulaire à une action serveur:
[lang=php] class Admin_Form_Conscours extends Zend_Form { public function init() { $this->setMethod('post') ->setName('consultationcours') ->setAttrib('name', 'conscours') ->setAction('/consencai/consulter'); //l'action du formulaire $groupe= new Admin_Model_DbTable_Groupe(); $array = array(); $array = $groupe->fetchall(); $liste = array(); foreach($array as $val) { $liste[] = $val['libel_groupe']; } $listegroupe = new Zend_Form_Element_Select('libelgroupe'); $listegroupe->setLabel('Groupe : ') ->setMultiOptions($liste) ->getDecorator('label')->setOption('tag', NULL); $this->addElement($listegroupe); $this->setDecorators(array(array('ViewScript', array('viewScript' => 'consencaiscript.phtml')))); } }
dans la vue de ton form tu peux mettre en dure le bouton submit
[lang=php] <form action="<?php echo $this->escape($this->element->getAction()); ?>" method="<?php echo $this->escape($this->element->getMethod()); ?>" name="<?php echo $this->escape($this->element->getAttrib('name')); ?>" class="formconscours"> <table> <tr> <td align="center" COLSPAN=2><b>Veuillez choisir le parametre adequoat</td> <td align="center"><b>Cliquez sur le lien correspondant a votre choix </td> </tr> <tr> <td align="center" COLSPAN=2></td> <td align="right"></td> </tr> <tr> <td align="right"><?php echo $this->element->libelgroupe->renderLabel(); ?></td> <td><?php echo $this->element->libelgroupe->renderViewHelper(); ?></td> <td><div align="center"> <input type="submit" name="go" value="go"> </div></td> </tr> </table> </form>
Dernière modification par amiss (14-11-2012 13:43:03)
Hors ligne
dans le select du form il serait plus pertinent de transmettre la clé primaire associée à libel-groupet et non le libellé du groupe(qui est une chaîne de caractère) même si cela ne résout pas ton problème
Hors ligne
Pauvez vous m'aider SVP ?
Losque j'essai d'executer une requete parametrée je reçoi le message suivant :
getConsencais
SQLSTATE[HY093]: Invalid parameter number: no parameters were bound
NB: Le parametre est la valeur selectionnée dans la liste déroulante au niveau du formulaire
Modéle
<?php
class Admin_Model_DbTable_Consencai extends Zend_Db_Table_Abstract {
protected $_name = 'tconsencai';
protected $_primary = 'id_consencai';
public function getConsencais($libelgroupe = NULL) {
try {
return $this->fetchAll($this->select()
->where('libel_groupe_consencai = ?', $libelgroupe));
}
catch (Exception $e) {
echo "getConsencais<br />";
echo $e->getMessage();
exit;
}
}
}
Vue de formulaire
<form action="<?php echo $this->escape($this->element->getAction()); ?>"
method="<?php echo $this->escape($this->element->getMethod()); ?>"
name="<?php echo $this->escape($this->element->getAttrib('name')); ?>"
class="formconscours">
<TABLE WIDTH=50%>
<tr>
<td align="center"><b>Veuillez choisir le groupe adequoat :</b></td>
<td><?php echo $this->element->libelgroupe->renderViewHelper(); ?></td>
<td align="center"><?php echo $this->element->valider->renderViewHelper(); ?></td>
<td align="center"> <?php echo $this->element->annuler->renderViewHelper(); ?></td>
</tr>
</table>
</form>
Controller
<?php
class Admin_ConsencaiController extends Zend_Controller_Action {
protected $urlRetour = '/admin/index/';
protected $nbreLignes = 15;
public function init() {
$action = $this->_request->getActionName();
if ($action == 'index') {
$this->view->headLink()
->appendStylesheet($this->view->baseUrl().'/styles/pagination.css');
}
}
public function indexAction() {
$session = new Zend_Session_Namespace('Consultation');
$libelgroupe = $session->groupe ;
$ConsmoisTab = new Admin_Model_DbTable_Consencai();
$ConsmoisRows = $ConsmoisTab->getConsencais();
$numPage = $this->_request->getParam('numpage', 1);
$page = Zend_Paginator::factory($ConsmoisRows);
$page->setPageRange(5)
->setCurrentPageNumber($this->_getParam('page', $numPage))
->setItemCountPerPage($this->_getParam('par', $this->nbreLignes));
$this->view->liste = $page;
$this->view->numPage = $numPage;
}
public function afficherAction() {
$this->view->headLink()
->appendStylesheet($this->view->baseUrl().'/styles/formlogin.css');
$form = new Admin_Form_Conscours();
$form->valider->setLabel('Consultation par groupe');
$meserr = '';
$champFocus = 'libel_groupe';
$request = $this->getRequest();
if ($request->isPost()) {
if ($form->isValid($request->getPost())) {
Zend_Loader::loadClass('Zend_Filter_StripTags');
$filter = new Zend_Filter_StripTags();
$libelgroupe=trim($filter->filter($this->getRequest()->getPost('libelgroupe')));
$session = new Zend_Session_Namespace('Consultation') ;
$session->groupe = $libelgroupe ;
$this->_forward("index");
}
}
$this->view->form = $form;
$this->view->message = '';
}
}
Formulaire
<?php
class Admin_Form_Conscours extends Zend_Form {
public function init() {
$this->setMethod('post')
->setName('consultationcours')
->setAttrib('name', 'conscours');
$groupeTab = new Admin_Model_DbTable_Groupe();
$groupeRows = $groupeTab->getGroupes();
$groupes = array();
foreach ($groupeRows as $row) {
$groupes[$row->id_groupe] = $row->libel_groupe;
}
$groupe = new Zend_Form_Element_Select('libelgroupe');
$groupe->setLabel('Groupe : ')
->setMultiOptions($groupes)
->setValue(0)
->getDecorator('label')->setOption('tag', NULL);
$this->addElement($groupe);
$valider = new Zend_Form_Element_Submit('valider');
$valider->setIgnore(TRUE);
$this->addElement($valider);
$annuler = new Zend_Form_Element_Submit('annuler');
$annuler->setLabel('Annuler')
->setIgnore(TRUE);
$this->addElement($annuler);
$this->setDecorators(array(array('ViewScript',
array('viewScript' => 'consencaiscript.phtml'))));
}
}
la vue:
<h2>Consultation des Encaissement par mois</h2>
<div align="center">
<table>
<tr>
<th>Numero</th>
<th>Professeur</th>
<th>Eleve</th>
<th>Groupe</th>
<th>Montant regle</th>
<th>Date</th>
</tr>
<?php foreach ($this->liste as $infoEncaissement) { ?>
<tr>
<td align="center">
<?php echo $infoEncaissement->id_consencai; ?>
</td>
<td>
<?php echo $infoEncaissement->np_professeur; ?>
</td>
<td align="center">
<?php echo $infoEncaissement->np_eleve_consencai; ?>
</td>
<td align="center">
<?php echo $infoEncaissement->libel_groupe_consencai; ?>
</td>
<td>
<?php echo $infoEncaissement->montantregle_consencai; ?>Dhs
</td>
<td align="right">
<?php echo $infoEncaissement->dtreglement_consencai; ?>Dhs
</td>
</tr>
<?php } ?>
</table>
</div>
Hors ligne
J’ai oublié d' alimenter la fonction getConsencais par $libelgroupe au niveau du controlleur
Le message d’erreur ci-dessus ne s’affiche plus OK
Après la correction le résultat retourné est vide (null)
A votre avis quel est le problème ?
Merci
Hors ligne