Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Pouvez-vous m’aider SVP
Lorsque j’essaye d’afficher le résultat d’une requête paramétrée je reçois le message suivante :
Warning: Invalid argument supplied for foreach() in C:\wamp\www\cdfc\application\modules\admin\views\scripts\consencai\consulterenaissements.phtml on line 36
La ligne 36 correspond à la première ligne dans l’extrait du fichier consulterenaissements.phtml ci dessous
Merci
Extraits du code :
=====================================================================
modele consencai.php:
........
public function obtenirEncaissementParGroupe($parametres = NULL) {
try {
if ($parametres) {
return $this->fetchRow($this->select()
->where('libel_groupe_consencai = ?', $parametres),
->order('np_eleve_consencai ASC');
}
catch (Exception $e) {
echo "consConsencai<br />";
echo $e->getMessage();
exit;
}
}
........
=====================================================================
Controleur consencaiController.php
........
public function afficherformAction() {
$this->view->headLink()
->appendStylesheet($this->view->baseUrl().'/styles/formlogin.css');
$form = new Admin_Form_Conscours();
$this->view->form = $form;
$this->view->message = '';
}
///////////////////////////////////////////////////////////////////////////////////
public function consulterenaissementsAction() {
$form = new Admin_Form_Conscours();
if ($this->_request->isPost()) {
$formData = $this->_request->getPost();
$parametres = $formData['libel_groupe'];
$donnees = new Admin_Model_DbTable_Consencai();
$this->view->rows = $donnees->obtenirEncaissementParGroupe($parametres);
}
}
........
=====================================================================
Vue consulterencaissements.phtml
........
<?php foreach ($this->rows as $infoEncaissements) { ?>
<tr>
<td class="colg1"align="center">
<?php echo $infoEncaissements->np_professeur; ?>
</td>
<td class="colg1"align="center">
<?php echo $infoEncaissements->np_eleve_consencai; ?>
</td>
........
=====================================================================
Formulaire Consencai.php
........
$groupeTab = new Admin_Model_DbTable_Groupe();
$groupeRows = $groupeTab->getGroupes();
$groupes = array();
foreach ($groupeRows as $row) {
$groupes[$row->libel_groupe] = $row->libel_groupe;
}
$groupe = new Zend_Form_Element_Select('libel_groupe');
$groupe->setLabel('Groupe : ')
->setMultiOptions($groupes)
->setValue(0)
->getDecorator('label')->setOption('tag', NULL);
$this->addElement($groupe);
........
=====================================================================
Hors ligne
bonjour,
ton foreach ne boucle pas sur un tableau car ta méthode afficherformAction() ne renvoie rien. Pour que ta méthode renvoie un tableau il faut que return soit la dernière instruction de ta méthode.
Hors ligne
Bonjours,
Amiss pouvez vous m’expliquer davantage SVP ?
Pour moi la fonction afficherformAction sert à afficher le formulaire a travers le fichier indiqué ci-dessous.
La fonction obtenirEncaissementParGroupe sert à exécuter la requête
Merci
////////////////////////////////////////////////////////////////////////////////
<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 </b> </td>
<td align="center"><b>Cliquez sur le lien correspondant a votre choix </b> </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 align="center">
<a href="<?php echo $this->url(array('module'=>'admin',
'controller'=>'consencai',
'action'=>'obtenirEncaissementParGroupe'),
'default', true) ?>">
Consultation par groupe
</a>
</td>
</tr>
</table>
</form>
Hors ligne
Tes noms d'action sont vraiment imbitable, il faut utiliser la notation camelCase(), ensuite utilise le bbcode pour rendre ton code plus lisible stp.
ps : amiss, il est normal que les actions ne revoient pas de valeur, après il utilise peut être mal le principe j'avoue ne pas avoir regardé le code, c'est franchement pas lisible avec le fond vert
Hors ligne
bonjour,
shadypierre et m_abrar, je me suis planté je faisais allusion à la méthode obtenirEncaissementParGroupe
------------
au niveau de la vue consulterencaissements.phtml la variable $this->rows n'est pas un tableau raison pour laquelle t'as une erreur de type :Invalid argument supplied for foreach().Tu peux faire un debug pour t'assurer que $this->rows est bien un tableau et qu'il contient des données:
[lang=php] consulterencaissements.phtml Zend_Debug::dump($this->rows);
Par ailleurs ton erreur se situe au niveau de la méthode obtenirEncaissementParGroupe(),du modèle, qui ne renvoie pas un tableau. La valeur reçue($parametres) dans la clause where doit être échappée(par quoteIdentifier de Zend_Db) dans le cas d'une chaîne de caractère.Voilà un peu ce que tu peux faire:
[lang=php] public function obtenirEncaissementParGroupe($parametres = NULL) { try { if ($parametres) { return $this->fetchRow($this->select() ->where($this->getAdapter()->quoteIdentifier("libel_groupe_consencai").'=?',$parametres); ->order('np_eleve_consencai ASC'); } catch (Zend_Db_Exception $e) { echo "consConsencai<br />"; printf("Erreur SQL :%s",$e->getMessage()); exit; } }
Dernière modification par amiss (02-10-2012 16:44:42)
Hors ligne
Je prendrai vos remarques en considération amiss
Merci
Hors ligne
Bonjour amiss,
J’ai suivi vos consigne j’ai même changé les noms d'action, le problème est toujours le même, je crois que le résultat de ma requête est vide, alors qu’au niveau de Myphpadmin la même requête renvoi des enregistrements.
Vous trouver ci-dessous des extraits du code
/-----------------------------------------------------------------
Modele:
select();
if ($parametres) {
$select->where($this->getAdapter()->quoteIdentifier("libel_groupe_consencai").'=?',$parametres);
->order('np_eleve_consencai ASC');
}
$encaiRows = $this->fetchAll($select);
$rows = array();
foreach ($encaiRows as $encaiRow) {
$rows[] = new Admin_Model_Consencai($encaiRow);
}
return $rows;
}
catch (Exception $e) {
echo "consConsencai";
echo $e->getMessage();
exit;
}
}
}
/-----------------------------------------------------------------
Controller:
_request->isPost()) {
$formData = $this->_request->getPost();
$parametres = $formData['libel_groupe'];
$donnees = new Admin_Model_DbTable_Consencai();
$this->view->rows = $donnees->pargroupe($parametres);
}
}
public function afficherAction() {
$this->view->headLink()
->appendStylesheet($this->view->baseUrl().'/styles/formlogin.css');
$form = new Admin_Form_Conscours();
$this->view->form = $form;
$this->view->message = '';
}
}
/-----------------------------------------------------------------
Formulaire:
setMethod('post')
->setName('consultationcours')
->setAttrib('name', 'conscours');
$groupeTab = new Admin_Model_DbTable_Groupe();
$groupeRows = $groupeTab->getGroupes();
$groupes = array();
foreach ($groupeRows as $row) {
$groupes[$row->libel_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);
$this->setDecorators(array(array('ViewScript',
array('viewScript' => 'consultscript.phtml'))));
}
}
/-----------------------------------------------------------------
consultscript.phtml pour afficher le formulaire
Veuillez choisir le parametre adequoatCliquez sur le lien correspondant a votre choix element->libelgroupe->renderLabel(); ?>element->libelgroupe->renderViewHelper(); ?>
Consultation par groupe
/-----------------------------------------------------------------
Extrait du encais.phtml
........
rows as $infoEncaissements) { ?>
np_professeur; ?>
np_eleve_consencai; ?>
............
/-----------------------------------------------------------------
afficher.phtml
Consultations des encaissements
form->setAction($this->url());
echo $this->form;
/-----------------------------------------------------------------
Hors ligne
Bonjour,
Pourquoi ne te sers tu pas du controller d'erreur quand aucun resultat n'est trouvé:
public function obtenirEncaissementParGroupe($param) { $param= (string)$param; $row = $this->fetchRow( $this->select() ->where('libel_groupe_consencai = ?', $param) ); if (!$row) { throw new Zend_Db_Table_Exception("Count not find row 'libel_groupe_consencai' = $param"); } return $row->toArray(); //plusieurs colonnes, tableau à 1 dimention }
Je ne comprend pas ton ORDER car avec fetchRow(), tu ne selectionnes qu'un seul enregistrement.
Pour plusieurs, il faut construire ta requète avec fetchAll().
Tu aurauis alors :
public function obtenirEncaissementsParGroupe($param) { $param= (string)$param; $rows = $this->fetchAll( $this->select() ->where('libel_groupe_consencai = ?', $param) ->order('np_eleve_consencai ASC') ); if (!$rows) { throw new Zend_Db_Table_Exception("Count not find rows 'libel_groupe_consencai' = $param"); } return $rows->toArray(); //Plusieurs lignes de plusieurs colonnes, tableau à 2 dimentions }
Dernière modification par ptitjib (28-10-2012 22:29:24)
Hors ligne