Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alisson Nunes da Rocha

Zend_Form_Element_Select

Recommended Posts

Boa tarde galera, estou com um probleminha no meu projetinho!

 

Fiz o formulario com o Zend_Form, só que ao preencher ele deixa muito option

<option value=""></option>

 

mais no banco ha dados... alguém pode me ajudar?

 

$om = new Zend_Form_Element_Select('id_om');
$om->setLabel('Om:')
  ->setRequired(true)
  ->addFilter('StripTags')
  ->addValidator('NotEmpty');

$table_om = new Application_Model_Om();

foreach ($table_om->fetchAll() as $e) {
$om->addMultiOption($e->id_om, $e->om);
}

 

abaixo meu model:

class Application_Model_Om extends Zend_Db_Table_Abstract
{

	protected $_name = 'om';
protected $_primary = array('id_om');

}

 

 

saida na tela... na verdade era pra todos está preenchido!

<select name="id_om" id="id_om">
   <option value="" label="" selected="selected"></option>
   <option value="1" label="DEC / DOC">DEC / DOC</option>

   <option value="23473" label=""></option>
   <option value="3319" label=""></option>
   <option value="3400" label=""></option>
   <option value="3509" label=""></option>
   <option value="3608" label=""></option>
   <option value="3707" label=""></option>
   <option value="3806" label=""></option>
   <option value="3913" label=""></option>
   <option value="4002" label=""></option>

   <option value="4101" label=""></option>
   <option value="4119" label=""></option>
   <option value="4127" label=""></option>
   <option value="34744" label=""></option>
   <option value="39925" label="DEC">DEC</option>
   <option value="4" label="DGUARIBA">DGUARIBA</option>
   <option value="2" label="Cia E FPaz HAITI">Cia E FPaz HAITI</option>

   <option value="46706" label="DOC">DOC</option>
   <option value="3004" label=""></option>
   <option value="28001" label="Cia Cmdo 1GEC">Cia Cmdo 1GEC</option>
   <option value="23085" label=""></option>
   <option value="28100" label=""></option>
   <option value="3" label="DG">DG</option>
</select

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho, porque e princípio está tudo OK. Faça um debug dos dados antes de inserir no Select. Algo assim:

 

foreach ($table_om->fetchAll() as $e) {
       echo 'Id => ',$e->id_om,' e valor => ',$e->om,'<br/>';
}

 

Por este código que você mostrou, o problema só pode estar nos dados gravados do banco. A não ser que exista outro código antes ou depois disto.

 

-------------------------

 

Sobre a montagem do select, tenho algumas dicas. O valor padrão para o setRequired() já é true, então não precisa adicionar o flag ali dentro. Além disto, ao utilizar o setRequired() já é adicionado por padrão um validador NotEmpty. Além disto, o elemento Select já adiciona, também por padrão, um validador inArray(), permitindo somente a entrada de valores presentes no formulário. Portanto o StripTags também é desnecessário. Ficaria, de maneira otimizada, algo assim:

$om = new Zend_Form_Element_Select('id_om');
$om->setLabel('Om:')
  ->setRequired();

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Carlos, como sempre você me ajudando rsrsrsrs

 

Seguinte pelo debug amigo, deu certo... trouxe todos os dados na tabela:

 

Id => 1 e valor => DEC / DOC
Id => 23473 e valor => 2º GEC
Id => 3319 e valor => 1º BEC
Id => 3400 e valor => 2º BEC
Id => 3509 e valor => 3º BEC
Id => 3608 e valor => 4º BEC
Id => 3707 e valor => 5º BEC
Id => 3806 e valor => 6º BEC
Id => 3913 e valor => 7º BEC
Id => 4002 e valor => 8º BEC
Id => 4101 e valor => 9º BEC
Id => 4119 e valor => 10º BEC
Id => 4127 e valor => 11º BEC
Id => 34744 e valor => 21ª Cia E Cnst
Id => 39925 e valor => DEC
Id => 4 e valor => DGUARIBA
Id => 2 e valor => Cia E FPaz HAITI
Id => 46706 e valor => DOC
Id => 3004 e valor => 7º B E CMB
Id => 28001 e valor => Cia Cmdo 1GEC
Id => 23085 e valor => 1º GEC
Id => 28100 e valor => Cia Cmdo 2ºGEC
Id => 3 e valor => DG

 

mais no Select, ele traz os dados, só que vazio rsrsrsrs tu acredita? hahuahuahua olha meu code:

 

$om = new Zend_Form_Element_Select('id_om');
$om->setLabel('Om:')
   ->setRequired();

$om->addMultiOption('', '');

$table_om = new Application_Model_Om();

foreach ($table_om->fetchAll() as $e) {
$om->addMultiOption($e->id_om, $e->om);
}

 

Rapz,

 

Estava testando aqui, puxei outra coluna do banco e funcionou... será o caractere "ª" e o "º" q está trabalhando ?

2º GEC - NÃO TRAZ

1º BEC - NÃO TRAZ

2º BEC - NÃO TRAZ

3º BEC - NÃO TRAZ

4º BEC - NÃO TRAZ

5º BEC - NÃO TRAZ

6º BEC - NÃO TRAZ

7º BEC - NÃO TRAZ

8º BEC - NÃO TRAZ

9º BEC - NÃO TRAZ

10º BEC - NÃO TRAZ

11º BEC - NÃO TRAZ

21ª Cia E Cnst - NÃO TRAZ

DEC - TRAZ

DGUARIBA - TRAZ

Cia E FPaz HAITI - TRAZ

DOC - TRAZ

7º B E CMB - NÃO TRAZ

Cia Cmdo 1GEC - TRAZ

1º GEC - NÃO TRAZ

Cia Cmdo 2ºGEC - NÃO TRAZ

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, pode até ser. Tenta escapar antes de jogar no select. Algo assim:

 

$om->addMultiOption($e->id_om, $this->view->escape($e->om));

 

Acho que é isto. Tenta aí e veja o que acontece.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos,

 

Estou usando ISO, mudei pro UTF-8 e em branco a pagina, usando o:

 

$om = new Zend_Form_Element_Select('id_om');
$om->setLabel('Om:')
  ->setRequired();

$om->addMultiOption('', '');

$table_om = new Application_Model_Om();

foreach ($table_om->fetchAll() as $e) {
    $om->addMultiOption($e->id_om, $this->view->escape($e->om));
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

É... então é este o motivo do problema só acontecer com você, porque comigo não acontece. Uso UTF-8 em tudo (desde banco de dados, até codificação dos arquivos passando pela definição de UTF-8 no framework e na abertura da conexão).

 

Como você está utilizando ISO em tudo, os dados foram gravados no banco em ISO (imagino eu), acredito que você deverá fazer algum tipo de tratamento nos dados antes de jogar para o select. Tente jogar um htmlentities antes de jogar no Select. Algo assim:

 

foreach ($table_om->fetchAll() as $e) {
    $om->addMultiOption($e->id_om, htmlentities ($this->view->escape($e->om)));
}

 

Ou algo assim.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Carlos,

 

Algo errado com o:

foreach ($table_om->fetchAll() as $e) {
    $om->addMultiOption($e->id_om, htmlentities ($this->view->escape($e->om)));
}

esse $this->view->escape($e->om);

 

quando coloco assim:

foreach ($table_om->fetchAll() as $e) {
    $om->addMultiOption($e->id_om, htmlentities($e->om));
}

assim funciona, mais transformando os caracteres especiais em html:

<option value="23473" label="2&ordm; GEC">2&ordm; GEC</option>
<option value="3319" label="1&ordm; BEC">1&ordm; BEC</option>

<option value="3400" label="2&ordm; BEC">2&ordm; BEC</option>
<option value="3509" label="3&ordm; BEC">3&ordm; BEC</option>
<option value="3608" label="4&ordm; BEC">4&ordm; BEC</option>
<option value="3707" label="5&ordm; BEC">5&ordm; BEC</option>
<option value="3806" label="6&ordm; BEC">6&ordm; BEC</option>

<option value="3913" label="7&ordm; BEC">7&ordm; BEC</option>
<option value="4002" label="8&ordm; BEC">8&ordm; BEC</option>
<option value="4101" label="9&ordm; BEC">9&ordm; BEC</option>
<option value="4119" label="10&ordm; BEC">10&ordm; BEC</option>
<option value="4127" label="11&ordm; BEC">11&ordm; BEC</option>

 

lebrando que na view eu apenos chamo o form:

 

$this->form;

 

abraços e vlw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uhn... então imagino que no banco os valores estejam gravados assim:

 

2º GEC

 

Se for isto mesmo, tive uma ideia agora, que seria desabilitar o escape do label. Algo assim:

 

$om = new Zend_Form_Element_Select('id_om');
$om->setLabel('Om:')
  ->setRequired()
  ->setOptions ( array ('escape' => false ) );

$om->addMultiOption('', '');

$table_om = new Application_Model_Om();

foreach ($table_om->fetchAll() as $e) {
    $om->addMultiOption($e->id_om, $e->om);
}

 

Veja se resolve.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.