popolare un elenco a discesa dinamicamente con zend

ciao, un'altro problemino sto cercando di popolare dinamicamente un menu a discesa una select con zend framework, così:

$clients = new Clienti();

       $clientsnameList = $clients->getClientsNameList();
       $clientslastnameList = $clients->getClientsLastNameList();
       $clientsidList = $clients->getClientsIdList();

       $this->addElement($this->createElement('select', 'idcliente')
        ->setLabel('Clienti')
        ->setMultiOptions(

            array(

                    $clientsidList => $clientsnameList.' '.$clientslastnameList

                ))

        ->setRequired(true)
        );

- così con i 3 array che contengono tutti i nomi o tutti i cognomi o tutti gli id l'elenco rimane vuoto

vorrei semplicemente inserire i campi nome e cognome come visualizzazione e l'id come valore ma non ci riesco se gli do l'unico array contenente insieme nome cognome e id li visualizzo ma il valore non è uguale all'id e non  scrive correttamente sul dbcosì:

     $clients = new Clienti();

       $clientsList = $clients->getClientsList();


       $this->addElement($this->createElement('select', 'idcliente')
        ->setLabel('Clienti')
        ->setMultiOptions($clientsidList)
        );

che punta a     public function getClientsList()

    {

         $db = Zend_Registry::get('db');

         $sql = 'SELECT nome , cognome, idcliente  FROM clienti';

         $rows = $db->fetchAll($sql);

          return $rows;

    }

visualizzo prima il numero dell'indice da 0 poi il nome e sotto il cognome, non riesco a trovare qualche esempio sul web nella documentazione di zend ho trovato solo un trafiletto senza esempi utili , se mi aiutate ancora voi vi ringrazio

inviato 6 anni fa
surferbloggy
X 0 X

se ho capito bene il problema è nel creare l'array:

$clientsidList => $clientsnameList.' '.$clientslastnameList

forse esiste un metodo più veloce comunque questo dovrebbe funzionare:

           $clientsinfo = array();
      do {
            $name = current($clientsnameList);
         $lastname = current($clientslastnameList);
         array_push($clientsinfo, $name." ".$lastname);
      } while (next($clientsnameList) !== FALSE & next($clientslastnameList) !== FALSE);   
      $options = array_combine($clientsidList,$clientsinfo);
           $element->addMultiOptions($options);
risposto 6 anni fa
civre
X 0 X

grazie tante, così però mi da nell'elenco Array Array invece del nome e cognome come dovrei modificarlo??

$clientsinfo = array();
      do {
            $name = current($clientsnameList);
         $lastname = current($clientslastnameList);
         array_push($clientsinfo, $name." ".$lastname);
      } while (next($clientsnameList) !== FALSE & next($clientslastnameList) !== FALSE);
      $options = array_combine($clientsidList,$clientsinfo);
//           $element->addMultiOptions($options);



             $this->addElement($this->createElement('select', 'idcliente')
        ->setLabel('Clienti')
        ->setMultiOptions(

                $options

                )
        );
risposto 6 anni fa
surferbloggy
X 0 X

fai una stampa di $name, cosa torna?

risposto 6 anni fa
civre
X 0 X

se faccio così:

  $clientsnameList = $clients->getClientsNameList();
       $clientslastnameList = $clients->getClientsLastNameList();
       $clientsidList = $clients->getClientsIdList();
        

        $clientsinfo = array();

   for ($i = 1; $i <= $clientslastnameList.length; $i++) {
       
     array_push($clientsinfo, $clientsnameList[$i]." ".$clientslastnameList[$i]);
   }
$options = array_combine($clientsidList,$clientsinfo);
       $this->addElement($this->createElement('select', 'idcliente')
        ->setLabel('Clienti')
        ->setMultiOptions(

                $options
//                $clientslastnameList

                )
        );

mi da:

Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in /home/glamourf/public_html/zendfidelity/application/forms/PurchasedForm.php on line 22

Catchable fatal error: Argument 1 passed to Zend_Form_Element_Multi::setMultiOptions() must be an array, boolean given, called in /home/glamourf/public_html/zendfidelity/application/forms/PurchasedForm.php on line 30 and defined in /home/glamourf/public_html/Zend/library/Zend/Form/Element/Multi.php on line 142

se al posto di $options metto $clientslastnameList visualizzo tutti i cognomi come se metto gli altri array visualizzo i nomi oppure gli id quindi non sono vuoti ma non riesco ad associare assieme id e nomi-cognomi

risposto 6 anni fa
surferbloggy
X 0 X

l'indice parte da 0 non da 1

risposto 6 anni fa
civre
X 0 X

grazie ma anche se parte da 0 mi da

Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in /home/glamourf/public_html/zendfidelity/application/forms/PurchasedForm.php on line 22

Catchable fatal error: Argument 1 passed to Zend_Form_Element_Multi::setMultiOptions() must be an array, boolean given, called in /home/glamourf/public_html/zendfidelity/application/forms/PurchasedForm.php on line 31 and defined in /home/glamourf/public_html/Zend/library/Zend/Form/Element/Multi.php on line 142

forse c'è un'altro modo? ma com'è che non trovo esempi simili sul web??

risposto 6 anni fa
surferbloggy
X 0 X

la stampa di nome non me l'hai più data...  >:(

con il mio esempio inserisci anche dopo il while print_r($nome);

cosa viene stampato a video?

risposto 6 anni fa
civre
X 0 X

se utilizzo questo codice $nome non me lo stampa e mi da nell'elenco a discesa 1 Array Array

do {
            $name = current($clientsnameList);
            print_r($nome);
         $lastname = current($clientslastnameList);
         array_push($clientsinfo, $name." ".$lastname);
      } while (next($clientsnameList) !== FALSE & next($clientslastnameList) !== FALSE);
      $options = array_combine($clientsidList,$clientsinfo);
//           $this->addMultiOptions($options);

 $this->addElement($this->createElement('select', 'idcliente')
        ->setLabel('Clienti')
        ->setMultiOptions(

            array(

                    $options

                ))

        ->setRequired(true)
        );
risposto 6 anni fa
surferbloggy
X 0 X

scusami, metti "name" non "nome"  :bye:

risposto 6 anni fa
civre
X 0 X

hai ragione name mi stampa:

Array ( [nome] => sefgs ) Array ( [nome] => dghnfgh ) Array ( [nome] => roby2 ) Array ( [nome] => roby3 ) Array ( [nome] => roby3 ) Array ( [nome] => roby3 ) Array ( [nome] => tizio ) Array ( [nome] => tizio )

risposto 6 anni fa
surferbloggy
X 0 X

allora prova a mettere al posto di print_r($nome); $name = $name["nome"];

stessa cosa devi fare per "lastname" ...

risposto 6 anni fa
civre
X 0 X

 :DGrazie mille!!così sembra funzionare, il value così è l'id?? come posso verificare che il value è l'id ??perchè ancora non lo scrive sul db! //        $clientsnameList = $clients->getClientsNameList();        $clientslastnameList = $clients->getClientsLastNameList();        $clientsidList = $clients->getClientsIdList();        

        $clientsinfo = array();         $idarr= array();

      do {             $name2 = current($clientsnameList);             $name = $name2["nome"];                $lastname2 = current($clientslastnameList);          $lastname = $lastname2["cognome"];          array_push($clientsinfo, $name." ".$lastname);           $ids2=current($clientsidList);              $ids=$ids2["idcliente"];                   array_push($idarr, $ids);               } while (next($clientsnameList) !== FALSE & next($clientslastnameList) !== FALSE & next($clientsidList) !== FALSE);             $options = array_combine($idarr,$clientsinfo);

 $this->addElement($this->createElement('select', 'idcliente')         ->setLabel('Clienti')         ->setMultiOptions(

            array(

                    $options

                )          )

        ->setRequired(true)         );

risposto 6 anni fa
surferbloggy
X 0 X

si ora ho corretto anche il model e scrive!!! grazie tantissime del tuo aiuto!!!ciao :bye:

risposto 6 anni fa
surferbloggy
X 0 X

controlla il codice sorgente della pagina dove viene stampato il form

risposto 6 anni fa
civre
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda