Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problema para gravar e listar um campo multiselect no banco de dados MYSQL.

Pessoal, bom dia, tendo em vista exercitar o conhecimento que vem adquirindo no curso de PHP resolvi criar alguns form. Em um deles existem dois campos do tipo select multiplos, no entanto, eu não sei pegar esses dados colocá-los em um array ,salvá-los no banco e,posteriormente, listá-los. Segue o código abaixo, os campos são funções e interfaces. `

          <div class="masonry-item col-12">
                              <div class="bd bgc-white">
                               <div class="peers fxw-nw@lg+ ai-s">
                                      <div class="peer peer-greed w-70p@lg+ w-100@lg- p-20">
                                          <legend>Cadastro de Servidores</legend>
                                      <form action="adiciona-servidor.php" method="POST">
                                      <div class="form-row">    
                                        <div class="form-group col-md-6">
                                            <label>Hostname</label> 
                                            <input type="text" class="form-control" name="hostname">
                                            <span class="help-block">Ex: S1100AS16</span>
                                         </div>
                                         <div class="form-group col-md-6">
                                              <label>Internet Protocol</label> 
                                              <input type="text" class="form-control" name="internetprotocol">
                                              <span class="help-block">Ex: 192.168.1.10</span>
                                          </div>
                                          <div class="form-group col-md-6">
                                              <label>Localização Física</label> 
                                                  <select class="form-control" name="localizacao">
                                                      <?php foreach ($localizacoes as $localizacao) : ?>                    
                                                       <option value="<?=$localizacao->id?>"><?=$localizacao->nome?></option>
                                                      <?php endforeach?>
                                                </select>
                                          </div>
                                          <div class="form-group col-md-6">
                                              <label>Rede</label> 
                                                  <select class="form-control" name="rede">
                                                      <?php foreach ($redes as $rede) : ?>                    
                                                      <option value="<?=$rede->id?>"><?=$rede->nome?></option>
                                                      <?php endforeach?>
                                                </select>
                                          </div>
                                          <div class="form-group col-md-6">
                                              <div class="form-group">
                                              <label class="col-md-6 control-label" for="funcao">Selecione uma ou mais funções</label>
                                              <div class="col-md-6">
                                                <select id="funcao[]" name="funcao[]" class="form-control" multiple="multiple">
                                                    <?php foreach ($funcoes as $funcao):?>
                                                  <option value="<?=$funcao->id?>"><?=$funcao->nome?></option>
                                                  <?php endforeach ?>
                                                </select>
                                              </div>
                                            </div>
                                        </div>    

                                        <div class="form-group col-md-6">
                                              <div class="form-group">
                                              <label class="col-md-6 control-label" for="interface">Selecione uma ou mais Interfaces</label>
                                              <div class="col-md-6">
                                                <select id="interface" name="interface" class="form-control" multiple="multiple">
                                                    <?php foreach ($interfaces as $interface):?>
                                                  <option value="<?=$interface->id?>"><?=$interface->nome?></option>
                                                  <?php endforeach ?>
                                                </select>
                                              </div>
                                            </div>
                                        </div>                                            
                                      <div class="form-group col-md-12">
                                              <label>Observação</label> 
                                              <textarea class="form-control" name="observacao"></textarea>
                                          </div>
                                   <button type="submit" class="btn btn-primary">Cadastrar</button>
                               </form>
                           </div>
                            <?php mostraAlerta("success");?>
                         </div>
                      </div>

                  </div>
1 resposta
solução!

Para salvar, você pode fazer desta forma. Como o seu formulário está desta forma:

<form action="adiciona-servidor.php" method="POST">
    <select id="funcao[]" name="funcao[]" class="form-control" multiple="multiple">
        <?php foreach ($funcoes as $funcao):?>
        <option value="<?=$funcao->id?>"><?=$funcao->nome?></option>
        <?php endforeach ?>
    </select>
</form>

Para capturar os dados do campo função você faria isso:

foreach($_POST["funcao"] as $valor){
    //$valor é a função selecionada
}

Você poderia gravar os dados de função numa tabela auxiliar, então você primeiro grava o formulário, gera o ID deste registro e grava numa tabela auxiliar cada uma das funções selecionadas em 1 linha, amarrado ao ID do formulário principal.

Para montar o combo, já marcando o que foi selecionado, você pode montar um array com base na tabela auxiliar

$array_auxiliar = [];
$sql = "SELECT funcao FROM tabela_auxiliar WHERE id_formulario = xxx";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_assoc($result)) {    
    $array_auxiliar[] = $row["funcao"]
}

E para marcar o OPTION do SELECT, você faria assim:

<?php foreach ($funcoes as $funcao):?>
    <option value="<?=$funcao->id?>" 
    <?php
    if (in_array($funcao->id, $array_auxiliar){
        echo " selected";
    }?>
    ><?=$funcao->nome?></option>
<?php endforeach ?>