Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 13-04-2011 21:35:46

bandit_rouge
Membre
Date d'inscription: 18-02-2010
Messages: 31

[1.11.4][zend_form_element_select][zend_db] liste depuis une BDD

Bonjour,

J'essaye de configurer un formulaire avec une liste déroulante contenant les codes postaux de ma table Ville.

Code:

// CODE POSTAL
        $codepostal = new Application_Model_DbTable_Villes();      
        $select = $codepostal->select()
                                      ->from('villes');
        $result = $codepostal->fetchRow($select);
        
        $this->addElement('select', 'codepostal', array(
            'required'    => false,
            'label'       => 'Code postal:',
            'multiOptions' => array($result)
        ));

Mais  ma liste déroulante reste désespérant vide...
J’écume le net depuis ce matin et je ne trouve pas d'indices...
Une idée?
j'ai un warning :
Warning: htmlspecialchars() expects parameter 1 to be string, object given in ...\library\Zend\View\Abstract.php on line 897

Merci.

Dernière modification par bandit_rouge (13-04-2011 21:37:23)

Hors ligne

 

#2 13-04-2011 21:47:18

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

Re: [1.11.4][zend_form_element_select][zend_db] liste depuis une BDD

ton pb ne vient pas de cette portion de code
c'est dans la vue que tu as un pb
c'est a dire dans ton phtml

Hors ligne

 

#3 14-04-2011 13:01:40

bandit_rouge
Membre
Date d'inscription: 18-02-2010
Messages: 31

Re: [1.11.4][zend_form_element_select][zend_db] liste depuis une BDD

je ne suis pas sur que le problème soit lié à la vue:
En faisant cette petite modif

Code:

// CODE POSTAL
        $codepostal = new Application_Model_DbTable_Villes();
        //$codepostalList = $codepostal->getVilles();
        
        $select = $codepostal->select()
                             ->from($codepostal, 'nom');
        $result = $codepostal->fetchRow($select)->toArray();
        
        $this->addElement('select', 'codepostal', array(
            'required'    => false,
            'label'       => 'Code postal:',
            'multiOptions' => array($result)
        ));

j'ai dans ma liste UN résultat: le première tuple de ma table...

Si je fais un fetchAll j'ai autant de  warning
Warning: htmlspecialchars() expects parameter 1 to be string, array given in ...\library\Zend\View\Abstract.php on line 897
que de tuples dans ma table et ma liste est vide...

Je sens que je chauffe!

Dernière modification par bandit_rouge (14-04-2011 13:58:35)

Hors ligne

 

#4 14-04-2011 14:00:13

nuxwin
Membre
Lieu: Caen (14)
Date d'inscription: 17-03-2011
Messages: 66

Re: [1.11.4][zend_form_element_select][zend_db] liste depuis une BDD

bandit_rouge a écrit:

je ne suis pas sur que le problème soit lié à la vue:
En faisant cette petite modif

Code:

// CODE POSTAL
        $codepostal = new Application_Model_DbTable_Villes();
        //$codepostalList = $codepostal->getVilles();
        
        $select = $codepostal->select()
                             ->from($codepostal, 'nom');
        $result = $codepostal->fetchRow($select)->toArray();
        
        $this->addElement('select', 'codepostal', array(
            'required'    => false,
            'label'       => 'Code postal:',
            'multiOptions' => array($result)
        ));

j'ai dans ma liste UN résultat: le première tuple de ma table...

Si je fais un fetchAll j'ai autant de  warning
Warning: htmlspecialchars() expects parameter 1 to be string, array given in C:\wamp\www\50knts\library\Zend\View\Abstract.php on line 897
que de tuples dans ma table et ma liste est vide...

Je sens que je chauffe!

Bonjour;

Merci de nous fournir la structure de votre table. La source n'est pas une base de données mais avez-vous lu ce thread ? http://www.z-f.fr/forum/viewtopic.php?id=6386

Dernière modification par nuxwin (14-04-2011 14:11:56)

Hors ligne

 

#5 14-04-2011 14:22:14

nuxwin
Membre
Lieu: Caen (14)
Date d'inscription: 17-03-2011
Messages: 66

Re: [1.11.4][zend_form_element_select][zend_db] liste depuis une BDD

Edit:

Je ne connais pas la structure de votre table mais en partant du principe qu'elle contient deux colonnes (name et code)

Table villes

Code:

[lang=sql]
CREATE TABLE IF NOT EXISTS `villes` (
  `name` varchar(150) collate utf8_unicode_ci NOT NULL,
  `code` int(11) unsigned NOT NULL,
  PRIMARY KEY  (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;
 
INSERT INTO `villes` (`name`, `code`) VALUES
('Caen', '14000'),
('Deauville', '14800'),
('Paris', '75000');

Application/Models/DbTable/Villes.php

Code:

[lang=php]
class Application_Model_DbTable_Villes extends Zend_Db_Table_Abstract
{

    /**
     * Database table to operate on
     *
     * @var string
     */
    protected $_name = 'villes';

    /**
     * Primary key
     *
     * @var string
     */
    protected $_primary = 'name';
}

Element select

Code:

[lang=php]
    $model = new Application_Model_DbTable_Villes();
    $rows = $model->fetchAll()->toArray();

    $this->addElement('select', 'codepostal', array(
        'required'    => false,
        'label'       => 'Code postal:'
    ));

    $codePostalElement = $this->getElement('codepostal');

    foreach ($rows as $row) {
        $codePostalElement->addMultiOption($row->code, $row->name);
    }

Note: Il ne s'agit que d'un exemple.

Dernière modification par nuxwin (14-04-2011 14:52:09)

Hors ligne

 

#6 14-04-2011 15:25:25

bandit_rouge
Membre
Date d'inscription: 18-02-2010
Messages: 31

Re: [1.11.4][zend_form_element_select][zend_db] liste depuis une BDD

J'ai trouvé encore plus simple

Code:

// CODE POSTAL
        $villedb = new Application_Model_DbTable_Villes();  
        $this->addElement('select', 'codepostal', array(
            'required'    => false,
            'label'       => 'Code postal:',
        ));
        $codePostalElement = $this->getElement('codepostal');
        foreach ($villedb->fetchAll() as $row) {
            $codePostalElement->addMultiOption($row->id, $row->cp);
        }

Mais le temps de chargement est trop long....faut que je creuse pour trouver une autre solution, le but étant de faire 2 listes déroulantes CodePostal et Ville, avec la/les ville(s) pré-sélectionnée(s)  après la saisie du CP.

Une idée?

Hors ligne

 

#7 15-04-2011 00:57:48

nuxwin
Membre
Lieu: Caen (14)
Date d'inscription: 17-03-2011
Messages: 66

Re: [1.11.4][zend_form_element_select][zend_db] liste depuis une BDD

Re ;

Effectivement, l'idée de proposer deux listes, l'une contenant tous les codes postaux et l'autre les villes me semble pas être très judicieux en terme de performance, surtout si vous n'utilisez pas de cache et quand bien même.... Je ne sais pas si vous comptiez lister toutes les villes de France et code postaux associés mais si oui, c'est une fausse bonne idée.

Je pense que le plus simple et de proposer à l'utilisateur deux champs de type text (ville et code postal) lesquels seront validés lors de la soumission du formulaire.

Vous pouvez également ajaxiser un peu la chose en faisant en sorte que lorsque l'utilisateur entre le code postal dans le champs, une requête vers le serveur soit effectuée en amont afin de récupérer le nom de la ville et remplir le champs associé automatiquement. Cela peut aussi être implémenté dans le sens inverse. Il s'agit d'une forme d'auto-complétion. Pensez aussi à l'auto-suggestion qui peut être un bon complément.

Voir ici pour un exemple concret:

http://www.geonames.org/export/ajax-pos … ete-2.html

Cordialement ;

Dernière modification par nuxwin (16-04-2011 06:41:38)

Hors ligne

 

#8 15-04-2011 12:24:47

bandit_rouge
Membre
Date d'inscription: 18-02-2010
Messages: 31

Re: [1.11.4][zend_form_element_select][zend_db] liste depuis une BDD

Merci pour cette piste de recherche.
Je vais étudier cela.

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