5
respostas

[Dúvida] PHP - Combo buscar filtro para preenchimento de outra combo e demais informações.

Boa tarde.

Prezados,

 Estou com uma situação em que tenho um formulário PHP que devem ser preenchidos alguns campos - inputs (Nome, Endereço, email,....), e tenho uma combo com categoria (Aéreo, Terrestre, Aquatico...), onde ao ser selecionada - onchange, a próxima combo de subcategorias deve ser preenchida, trazendo os dados do banco de dados MySql, daquela categoria selecionada na primeira combo. Ou seja, ao escolher a categoria Terrestre, o código da categoria deve ser passado como parâmetro, a fim de buscar e preencher a combo de subcategorias vinculadas ao código Terrestre, como por exemplo: Veículo, Carro, Moto, Bicicleta....
 No entanto, ao dar o submit(), estou perdendo os dados do formulário que já foram preenchidos. Diante disso, preciso utilizar uma forma de buscar as informações da combo de subcategoria, sem que os dados sejam apagados. 
 Pensei em utilizar Ajax para trazer as informações da combo, caso seja a melhor opção, alguém tem um exemplo de código? 
 Favor orientar também se é necessário instalar alguma biblioteca, ou seja, informar o passo a passo.

Obrigado.

5 respostas

Olá! Vc pode utilizar o JQuery, basicamente vc irá disparar um evento no onchange do primeiro select para que realizer um consumo ajax em outro recurso "php" que aguarda o valor do select e então realizando a consulta no banco de dados e devolvendo o retorno para que vc possa realizar o parser para o segundo elemento select da sua web.

Tem muito exemplo disso na internet, no vídeo abaixo ele explica exatamente o que você precisa!

https://www.youtube.com/watch?v=2KN-LrJCvOA

Obrigado Rodrigo, vou assistir o vídeo.

Beleza Sandro!!! Se ainda tiver alguma dúvida, posta o código aqui que tento lhe ajudar. Abraços.

Oi Rodrigo, boa tarde.

Vi o código indicado no git(https://github.com/fabiodavel/Youtube/commit/5daf710f14c0caba2b77b17d8293240b3c317500), mas não consegui faze-lo funcionar, infelizmente. Esta faltando algum detalhe, acredito que seja no retorno da função PHP, que está sendo chamada. Acho que o retorno dever ser json, mas já tentei também e não deu certo.

Veja se pode dar uma ajuda.

Tenho uma página PHP/HTML/JavaScript (incluirObjeto.php) que chama uma função externa - buscarSubcategoria.php. Estou passando como parâmetro o código da subcategoria, na chamada da função. Quando coloco o var_dump(), no retorno da função, vejo que retornar os dados que estou pesquisando. No entanto, na execução direta sem o var_dump, não retorna nada. Tive que retirar uma parte do código html, pois ultrapassou o limite de caracteres. Se for possível, posso encaminhar os arquivos de código para análise.

Desde já agradeço sua ajuda.

Seguem os códigos:

incluirObjeto.php

<title>Incluir Objeto</title>
        <form id="formSubCategoria" action="buscarSubcategoria.php" method="POST">
            <tr>
                <th align="left">Vincular Categoria:
                    <!-- <select name="comboCategoriaFk" id="comboCategoriaFk" onchange="formSubcategoria.submit()" required> -->
                    <select name="comboCategoriaFk" id="comboCategoriaFk" onChange="litarSubcategorias(comboCategoriaFk);" required>
                        <option value="">Selecione</option>
                        <?php foreach ( $fkCategoria as $fkc) : ?>
                            <option value="<?php echo $fkc['coCategoria']?> "
                            <?=($fkc['coCategoria'] == $comboCategoriaFk)?'selected':''?> > <?php echo $fkc['coCategoria']?> - <?php echo $fkc['txCategoria']?>
                            </option>
                        <?php endforeach; ?>
                    </select>				
                </th>
            </tr>    

            <tr>
                <th align="left">Vincular Subcategoria:
                    <select name="comboSubcategoriaFk" id="comboSubcategoriaFk" required>
                        <option value="">Selecione</option>
                        <?php 
                            if(isset($fkSubcategoria)){
                                foreach ( $fkSubcategoria as $fks) : ?>
                                    <option value="<?php echo $fks['coSubcategoria']?> "> <?php echo $fks['coSubcategoria']?> - <?php echo $fks['txSubcategoria']?></option>
                                <?php endforeach; }?>
                    </select>				
                </th>
            </tr>
        </from>
        <tr>
            <td>
                <button class="botao"  type="submit" >Incluir</button>
            </td>
            <td align="right">
                <button type="button" onClick="history.back(-1)" class="botao botao-block">Voltar</button>
                <br>
            </td>
        </tr>
            
    </thead>
</table>

=======================================================

buscarSubcategoria.php <?php

require '../../config.php'; include '../../src/Subcategoria.php';

echo 'codigo '; echo $_REQUEST['coCategoriaFk']; if(isset($_REQUEST['coCategoriaFk'])){ $listaFkSubcategoria = new Subcategoria($mysql); $fkSubcategoria = $listaFkSubcategoria->buscaFkSubcategoria($_REQUEST['coCategoriaFk']); // var_dump($fkSubcategoria); // return ($fkSubcategoria); // $json_data = array( // "data" => $fkSubcategoria // ); // return response()->json($json_data); // print_r($fkSubcategoria); return($fkSubcategoria); }

?>

Opa beleza!!!!

Olhando para o código vc está dando um return dentro de um script PHP e não dentro de uma function. Tente apenas um "echo" comum e se necessário utilizar algum cabeçalho HTML

Veja se consegue disponibilizar o projeto no github e coloque o link aqui, eu avalio pra vc e lanço as correções com comentários pra te ajudar.

Valeu man! Bons estudos