Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 28-09-2012 18:37:21

m_abrar
Membre
Date d'inscription: 01-03-2010
Messages: 12

Afficher le résultat d’une requête paramétrée

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

 

#2 28-09-2012 20:05:13

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

Re: Afficher le résultat d’une requête paramétrée

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

 

#3 02-10-2012 14:21:46

m_abrar
Membre
Date d'inscription: 01-03-2010
Messages: 12

Re: Afficher le résultat d’une requête paramétrée

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

 

#4 02-10-2012 15:33:29

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: Afficher le résultat d’une requête paramétrée

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 big_smile

Hors ligne

 

#5 02-10-2012 16:40:32

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

Re: Afficher le résultat d’une requête paramétrée

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:

Code:

[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:


Code:

[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

 

#6 02-10-2012 17:02:38

m_abrar
Membre
Date d'inscription: 01-03-2010
Messages: 12

Re: Afficher le résultat d’une requête paramétrée

Je prendrai vos remarques en considération amiss
  Merci

Hors ligne

 

#7 04-10-2012 21:43:56

m_abrar
Membre
Date d'inscription: 01-03-2010
Messages: 12

Re: Afficher le résultat d’une requête paramétrée

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

 

#8 28-10-2012 22:26:08

ptitjib
Membre
Date d'inscription: 03-12-2009
Messages: 10

Re: Afficher le résultat d’une requête paramétrée

Bonjour,

Pourquoi ne te sers tu pas du controller d'erreur quand aucun resultat n'est trouvé:

Code:

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 :

Code:

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

 

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