Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 26-05-2009 17:07:20

daninou
Nouveau membre
Lieu: moselle
Date d'inscription: 26-05-2009
Messages: 9
Site web

Zend_Form_Element_Select et requete SQL

Tout d'abord, bonjour à toutes et à tous.

Je suis nouveau sur le forum, et je commence à utiliser ZF pour développer.

Voilà, je commence à créer un formulaire. Pour input Text, cela fonctionne, et ma méthode pour insérer dans ma BDD fonctionne.
Maintenant, pour compléter mon insert, je dois rajouter un select, qui contient des noms issus d'une requête SQL, avec en 'value' leur ID respectif ca c'est cette valeur qui doit être postée.

Je rencontre 2 problèmes:
1/ Afficher le select
2/ Construire le select avec les valeurs récupérées par SQL

J'ai bcp cherché avant de poster, mais pour l'instant, que des échecs...

Code:

.......
$patientbmi = new Zend_Form_Element_Text('patientbmi');
        $patientbmi->setLabel('Patient BMI')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty');
        
        
        $patientname = new Zend_Form_Element_Select ('patientname');
        $patientname->setLabel ('Patient name');
        $result = $db->fetchAssoc('select * from patient');
        foreach ($result as $patients)
        {
            $patientname->addMultiOption($id_patient->id_patient, $patient_name->patient_name);
        }

Et dans mon controlleur:

Code:

function insertpatientAction()
    {
        $this->view->title = "Insert patient";
        $form = new FormulairePatient();
        $form->submit->setLabel('Insert');
        $this->view->form = $form;
        if ($this->_request->isPost()) {
            $formData = $this->_request->getPost();
            if ($form->isValid($formData)) {
                $patient = new Patient();
                $row = $patient->createRow();
                $row->patient_name = $form->getValue('patientname');
                $row->height_patient = $form->getValue('patientheight');
                $row->weight_patient = $form->getValue('patientweight');
                $row->bmi_patient = $form->getValue('patientbmi');
                $row->patient_name = $form->getValue('patientname');
                $row->save();

                $this->_redirect('/index/insertpatient');
            } else {
                $form->populate($formData);
            }
        }
        
    }

Notice: Undefined variable: db in C:\wamp\www\projectAbl\application\models\FormulairePatient.php on line 43

Fatal error: Call to a member function fetchAssoc() on a non-object in C:\wamp\www\projectAbl\application\models\FormulairePatient.php on line 43

Je pense que mon select n'est pas complet d'une part? Et que ma boucle n'est pas bonne?? Je continue à chercher.
Si quelqu'un sait m'aider, merci beaucoup wink

Hors ligne

 

#2 26-05-2009 17:16:46

Djules
Membre
Date d'inscription: 29-03-2009
Messages: 52
Site web

Re: Zend_Form_Element_Select et requete SQL

Le problème, c'est qu'il ne connait pas la variable "db", ça tu l'avais compris je pense smile

Tu devrais faire ta requête SQL dans ton contrôleur (ce serait déja plus correct), et passer au constructeur du modèle de formulaire le résultat de ta requête comme paramètre, tu saisis ?

Hors ligne

 

#3 26-05-2009 17:29:53

daninou
Nouveau membre
Lieu: moselle
Date d'inscription: 26-05-2009
Messages: 9
Site web

Re: Zend_Form_Element_Select et requete SQL

Heu , pas vraiment...

Pour la requête dans le controleur, OK, mais je peut la mettre dans ma fonction insertpatientAction, comme ceci:

Code:

function insertpatientAction()
    {
        $this->view->title = "Insert patient";
        $form = new FormulairePatient();
        $form->submit->setLabel('Insert');
        $this->view->form = $form;
        if ($this->_request->isPost()) {
            $formData = $this->_request->getPost();
            if ($form->isValid($formData)) {
                $patient = new Patient();
                $row = $patient->createRow();
                $row->height_patient = $form->getValue('patientheight');
                $row->weight_patient = $form->getValue('patientweight');
                $row->bmi_patient = $form->getValue('patientbmi');
$result = $db->fetchAssoc('select * from patient');
        foreach ($result as $patients)
        {
            $patientname->addMultiOption($id_patient->id_patient, $patient_name->patient_name);
        }

                $row->patient_name = $form->getValue('patientname');
                $row->save();

                $this->_redirect('/index/insertpatient');
            } else {
                $form->populate($formData);
            }
        }

Ensuite, dans le constructeur du FormulairePatient, comment faire pour passer le résultat en paramètres? Je ne comprends pas pourquoi il ne connait pas $db->fetchAssoc? C'est bien comme cela qu'on contruit une requête??

Merci

Hors ligne

 

#4 26-05-2009 20:08:27

daninou
Nouveau membre
Lieu: moselle
Date d'inscription: 26-05-2009
Messages: 9
Site web

Re: Zend_Form_Element_Select et requete SQL

Bon, j'ai cherché mais pas assez apparemment: je ne vois pas comment créer mon select et le remplir avec une requête sql? Je suis débutant en POO et avec ZF.

Merci d'avance pour ceux qui me montrerons un exemple, je n'ai pas trouvé dans les tutos...

Merci

Hors ligne

 

#5 26-05-2009 20:38:22

daninou
Nouveau membre
Lieu: moselle
Date d'inscription: 26-05-2009
Messages: 9
Site web

Re: Zend_Form_Element_Select et requete SQL

Autant pour moi

J'avais mal cherche: donc j'ai réussi à créer mon Select, mais avec des valeurs en dur.

Code:

$select = new Zend_Form_Element_Select('selection de données');
$select->setMultiOptions(array('option 1'=>'valeur 1', 'option 2'=>'valeur 2')); // les options à afficher dans le select
$select->setValue('option 2'); // selectionne la valeur 2 à l'affichage

$this->addElements(array($idpatient, $patientname, $patientheight, $patientweight, $patientbmi,
                                array('select','selection de données', 
                                    array('label'=>'séléctionnez une donnée :',
                                             'multioptions'=>array('option 1'=>'valeur 1','option 2'=>'valeur 2'), 'value'=>'option 2')), $submit));

Il me faut maintenant chercher comment le remplir via une requête SQL, si quelqu'un peut m'aider... Merci wink

Hors ligne

 

#6 27-05-2009 08:58:16

Djules
Membre
Date d'inscription: 29-03-2009
Messages: 52
Site web

Re: Zend_Form_Element_Select et requete SQL

Bon, alors je te montre l'exemple :

Dans ton contrôleur, juste avant la création de ton formulaire, tu fais ta requête SQL, puis tu la passes à ton formulaire en paramètre :

Code:

$result = $db->fetchAssoc('select * from patient');
$form = new FormulairePatient($result);

Ensuite, dans ton modèle "FormulairePatient", tu instancies le contructeur avec la valeur passées en paramètre :

Code:

class FormulairePatient extends Zend_Form{
        public function __construct($resultat_requete)
        {
            parent::__construct($resultat_requete);
            .......
            .......
            foreach ($result_requete as $patients)
            {
                   $patientname->addMultiOption($patients->id_patient, $patients->patient_name);
            }

Dernière modification par Djules (27-05-2009 08:59:18)

Hors ligne

 

#7 27-05-2009 09:16:45

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: Zend_Form_Element_Select et requete SQL

Personellement je remplis mon Zend_Form_Element_Select depuis mon controller qui appel le formulaire

Code:

//Ton fichier Model 
public function getForHtmlSelect()
{
    $results = $this->fetchAll();
    $data    = array();
    foreach($results as $result) {
        $data[$result->id] = $result->nom;
    }
    
    return $data;
}

Code:

$monModel = new MonModel();
$tableauPourMonSelect = $monModel->getForHtmlSelect(); 

$monForm = new MonForm();
$monForm->getElement('nomDeMonElementSelect')->setMultiOptions($tableauPourMonSelect);

Société : Direct Info Service

Hors ligne

 

#8 27-05-2009 09:57:46

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Zend_Form_Element_Select et requete SQL

Hello,

Il y a aussi fetchPairs() qui renvoie directement un tableau key/value.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#9 27-05-2009 10:07:53

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: Zend_Form_Element_Select et requete SQL

Oh excellent ! Merci du tuyau wink


Société : Direct Info Service

Hors ligne

 

#10 27-05-2009 13:35:43

daninou
Nouveau membre
Lieu: moselle
Date d'inscription: 26-05-2009
Messages: 9
Site web

Re: Zend_Form_Element_Select et requete SQL

Merci Djules, Yannux, MikaelKael

Alors je pense avoir compris les 2 méthodes, mais pour l'instant g testé celle de Djules. J'ai toujours cette erreur, il ne connait pas $db ???. Je ne voit pas pourquoi. J'ai refais mon code et mon form, en sachant que en fait, le select doit contenir des country, pas des patient, mais c'est pareil... wink En outre, c'est l'id_country qui doit être posté, donc en '->setValue'. Je vous montre comment j'ai fais car cela me semble OK, mais pourtant :
Dans mon Contrôleur:

Code:

function insertpatientAction()
    {
        $this->view->title = "Insert patient";
    [color=#FF0000]$result_request = $db->fetchAssoc('SELECT * FROM country');[/color]
    $form = new FormulairePatient($result_request);
        $form->submit->setLabel('Insert');
        $this->view->form = $form;
        if ($this->_request->isPost()) {
            $formData = $this->_request->getPost();
            if ($form->isValid($formData)) {
                $patient = new Patients();
                $row = $patient->createRow();
                $row->patient_name = $form->getValue('patientname');
                $row->height_patient = $form->getValue('patientheight');
        $row->weight_patient = $form->getValue('patientweight');
        $row->bmi_patient = $form->getValue('patientbmi');
        [color=#FF0000]$row->id_country_birth = $form->getValue('patientcountrybirth');[/color]
                $row->save();

                $this->_redirect('/index/insertpatient');
            } else {
                $form->populate($formData);
            }
        }
    }

Mon modèle formulaire

Code:

$patientcountrybirth = new Zend_Form_Element_Select('patientcountrybirth');
        foreach ($result_request as $countries)
            {
                   $patientcountrybirth->addMultiOption($countries->id_country, $countries->name_country)
                   ->setValue($countries->id_country);
            }

$this->addElements(array($idpatient, $patientname, $patientheight, $patientweight, $patientbmi, [color=#FF0000]$patientcountrybirth[/color], $submit));

Je pense que c OK, si j'ai bien compris la méthode de Djules?

Mais j'ai toujours ce message:

Notice: Undefined variable: db in C:\wamp\www\projectAbl\application\controllers\IndexController.php on line 13

Fatal error: Call to a member function fetchAssoc() on a non-object in C:\wamp\www\projectAbl\application\controllers\IndexController.php on line 13

J'ai ces lignes dans mon index.php

Code:

// Mise en place de la BDD
$db = Zend_Db::factory($config->db);
Zend_Db_Table::setDefaultAdapter($db);

Merci de votre aide, et patience!!! wink

Dernière modification par daninou (27-05-2009 13:58:53)

Hors ligne

 

#11 27-05-2009 14:27:12

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Zend_Form_Element_Select et requete SQL

cette discussion montre bien la nécessité de bien séparer la couche métier du contrôleur.

A+JYT

Hors ligne

 

#12 27-05-2009 14:33:20

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: Zend_Form_Element_Select et requete SQL

Il faut mettre ton $db dans le registry...
mais utilise bien la couche model ca sera beaucoup mieux


Société : Direct Info Service

Hors ligne

 

#13 27-05-2009 16:37:32

daninou
Nouveau membre
Lieu: moselle
Date d'inscription: 26-05-2009
Messages: 9
Site web

Re: Zend_Form_Element_Select et requete SQL

J'attends avec impatience ma commande:
Zend Framework - Bien programmer en PHP de Julien Pauli et Guillaume Ponçon chez Eyrolles.

Car j'ai bcp de lacunes encore...

J'ai regardé comment mettre dans le registry:

Zend_Registry::set('index', $value);

Mais j'ai du mal: je dois mettre $db? style:

Code:

Zend_Registry::set('db', $db);

Mais dans quel fichier, index.php, dans le controleur....

Bon, je pense que je vais attendre mon bouquin, car là je ne comprends pas désolé...

Merci à tous de votre aide

Hors ligne

 

#14 27-05-2009 17:13:53

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: Zend_Form_Element_Select et requete SQL

tu as fais le quickstart  de la doc ? :s


Société : Direct Info Service

Hors ligne

 

#15 27-05-2009 18:17:06

daninou
Nouveau membre
Lieu: moselle
Date d'inscription: 26-05-2009
Messages: 9
Site web

Re: Zend_Form_Element_Select et requete SQL

Je ne l'ai pas fais celui là, j'ai réaliser celui la:
http://g-rossolini.developpez.com/tutor … k/debuter/

Il fonctionne bien et je l'ai adapter à mon projet.
Mais il n'y a pas d'exemple, ni dans le quick start avec des select, c'est sur cela que je coince

Hors ligne

 

#16 27-05-2009 18:19:04

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: Zend_Form_Element_Select et requete SQL

oui fin oublie ton select smile

je t'ai montré un exemple beaucoup plus logique pour respecter ta structure MVC.

As tu fais des models ?

Le quickstart parle du registry...

Dernière modification par yannux (27-05-2009 18:19:42)


Société : Direct Info Service

Hors ligne

 

#17 27-05-2009 20:11:08

daninou
Nouveau membre
Lieu: moselle
Date d'inscription: 26-05-2009
Messages: 9
Site web

Re: Zend_Form_Element_Select et requete SQL

Le formulaire est un modèle.

Je vais regarder de plus près le Quick start.

Hors ligne

 

#18 27-05-2009 20:31:50

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Zend_Form_Element_Select et requete SQL

non le formulaire est un usage
ce n'est pas un modèle

Hors ligne

 

#19 27-05-2009 21:20:46

mdelanno
Membre
Lieu: Nord
Date d'inscription: 26-08-2007
Messages: 90
Site web

Re: Zend_Form_Element_Select et requete SQL

daninou a écrit:

Code:

Zend_Registry::set('db', $db);

Pas besoin de le mettre dans le registre, tu peux récupérer l'adaptateur avec Zend_Db_Table_Abstract::getDefaultAdapter()

Hors ligne

 

#20 27-05-2009 23:40:28

daninou
Nouveau membre
Lieu: moselle
Date d'inscription: 26-05-2009
Messages: 9
Site web

Re: Zend_Form_Element_Select et requete SQL

Je crois que c'est ce que j'ai fais:

Code:

$db = Zend_Db::factory($config->db);
Zend_Db_Table::setDefaultAdapter($db);

Hors ligne

 

#21 28-05-2009 09:43:52

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: Zend_Form_Element_Select et requete SQL

Hum ... relis ce que mdelano  à écrit.....


Société : Direct Info Service

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