Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Problema com campo multiselect.

Senhores, bom dia, tendo em vista exercitar o que venho aprendendo, no curso de php, resolvi desenvolver alguns formulários, e como já era de se esperar diversos problemas estão surgindo. Em um dos meus formulário existe um campo do tipo select múltiplos, que a partir da seleção feita pelo usuário, as informações são gravadas em um tabela auxiliar e vinculadas a tabela principal com base no id.

Até ai tudo bem , mas a dificuldade apareceu durante a criação da página de alteração de dados, no campo multiselect. Pois, não conseguir trazer as informações cadastradas pelo usuário.

A variável `$interfaces` trás  a lista de todas as interfaces cadastradas, enquanto a variável `$interfacesServidor` vem opções que diz respeito a um servidor. Detalhe, já usei a lógica abaixo, mas não obtive êxito.
<?php
    if (in_array($interface->getId(), $interfacesServidor)
    {
      echo " selected";
        }
?>


$interfaceDao = new InterfaceDao($conexao);
$interfaces = $interfaceDao->listaInterface();
$interfacesServidor = $interfaceDao->listaInterfaceServidor();

label  class="col-sm-2 control-label">Interfaces</label>
     <div class="col-sm-4">
          <select multiple size="6" class="form-control" name="interface[]" required="required">
         <?php foreach ($interfaces as $interface) :?>
     <option value="<?=$interface->getId()?>"><?=$interface->getNome()?></option>
     <?php endforeach ?>
           </select>
      </div>
7 respostas

Oi Gerson, tudo bom?

Esse select está dentro de uma tag form? Qual a action dessa tag?

Compartilha com a gente o código que processa a seleção da interface =)

Acontece algum erro quando você envia? Ou só não cadastra? Como está o código de cadastro?

Se você quiser, sobe seu projeto no git e manda aqui o link, assim eu consigo rodar ele aqui e te passar um feedback =)

Abraço

André Boa tarde ! Obrigado por dispor de tempo para tentar me ajudar. Não estou com problema no formulário de cadastro e, sim na alteração do que foi cadastrado. Infelizmente, devido a minha pouca experiência, não conseguir montar a estrutura a lógica para trazer selecionada ("selected='selected'") , as opções que já foram cadastradas, nos campos multiselect do meu formulário de alteração de dados. Vou tentar colocar o projeto no github.

Mas basicamente, eu não conseguir montar esse if abaixo para o campo multiselect.

<label  class="col-sm-2 controllabel">Localização</label>
                           <div class="col-sm-4">
                            <select class="form-control" name="localizacao">
                                <?php 
                                $localizacaoDao = new localizacaoDao($conexao);
                                    $localizacoes = $localizacaoDao->listaLocalizacao();
                                foreach ($localizacoes as $localizacao) :
                                  $essaEhALocalizacao = $servidor->getLocalizacao()->getId() == $localizacao->getId();
                                  $selecao = $essaEhALocalizacao ? "selected='selected'" : "";
                                  ?>
                                <option value="<?=$localizacao->getId()?>" <?=$selecao?>><?=$localizacao->getNome()?></option>
                              <?php endforeach ?>
                              </select>
                           </div>

`

Campo multiselect, onde não conseguir criar a lógica na página de alteração de dados.

<label  class="col-sm-2 control-label">Funções</label>
                           <div class="col-sm-4">
                            <select multiple size="6" class="form-control" name="funcao[]" required="required">
                              <?php 
                // lista de funções cadastradas no sistema
                $funcaoDao = new FuncaoDao($conexao);  
                $funcoes = $funcaoDao->listaFuncao();

                //relação de funções vinculadas a um determinado servidor.
                $funcaoservidor = $funcaoDao->listaFuncaoServidor($id);

                foreach ($funcoes as $funcao) : ?>                              ?>
                                <option value="<?=$funcao->getId()?>"><?=$funcao->getNome()?></option>
                              <?php endforeach ?>
                            </select>
                           </div>

Acho que assim deve funcionar

<label  class="col-sm-2 control-label">
  Interfaces
</label>
  <div class="col-sm-4">
     <select multiple size="6" class="form-control" name="interface[]" required="required">
       <?php foreach ($interfaces as $interface) {
            print '<option value="'.$interface->getId();
            if (in_array($interface->getId(), $interfacesServidor)    {
               echo " selected";
            } 
            print '">';
            print $interface->getNome().'</option>';
        }?>
     </select>
  </div>

Gilson, boa tarde !

Já tentei essa estrutura lógica, mas não funcionou.

Se vc por o projeto no github compartilha comigo que ajudo vc

solução!

Pessoal, obrigado pela ajuda !

Mas conseguir resolver o problema. Segue abaixo a solução.

<label  class="col-sm-2 control-label">Funções</label>
                           <div class="col-sm-4">
                            <select multiple size="6" class="form-control" name="funcao[]" required="required">
                              <?php  foreach ($funcoes as $funcao) :?>
                                 <?php 
                                    foreach ($funcoesServidor as $funcaoServidor) :
                                        $essaSaoAsFuncoes = $funcaoServidor->getId() == $funcao->getId();
                                        $selecao = $essaSaoAsFuncoes ? "selected='selected'" : "";
                                    ?>           
                           <option value="<?=$funcao->getId()?>" <?=$selecao?> ><?=$funcao->getNome()?></option>
                                <?php endforeach ?>
                              <?php endforeach ?>
                            </select>

Boa Gerson!

Obrigado por compartilhar com a gente sua solução =)

Abraço!