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

Preencher inputs após mudança em select

Boa tarde, estava praticando com o código baseado na aula de PHP e MySQL e preciso de ajuda com uma parte do código. Basicamente tenho um formulário com dois selects(aluno_id, produto_id) e alguns inputs(produto_preco,quantidade,preco_total), utilizo funções para preencher arrays e então os selects pelo ID e mostrar pelo nome.

Agora preciso fazer com que cada vez que o select dos produtos for alterado, faça um busca pelo ID no array dos produtos, e preencha o input produto_preco com o preço equivalente ao produto_id. Pelo que pesquisei isso é feito com Javascript e JSON, e possivelmente Ajax, fiz algumas tentativas porém não obtive sucesso.

Lembrando que os dados desse form serão cadastrados no BD depois.

<?php require_once("cabecalho.php");
require_once("banco-vendas.php");
require_once("banco-aluno.php");
require_once("banco-produto.php");

$venda = array("aluno_id" => "1", "produto_id" => "1",
"quantidade_produto" => "", "preco_produto" => "", "valor_total" => "",
"data_operacao" => "");
$listaPreco = listaPreco($conexao); // cria um array tridimensional 
listaPreco com id, nome, preco
$alunos = listaAlunos($conexao);    // cria array alunos
$produtos = listaProdutos($conexao);  // cria array produtos

$teste = array_search('2', array_column($listaPreco,'id')); // teste filtro 


?>

<h1>Formulário Vendas</h1>
<form action="adiciona-venda.php" method="post">
  <table class="table">
    <?php include("vendas-formulario-base.php"); // inputs e selects do 
formulario?>
    <tr>
      <td>
          <button class="btn btn-primary" type="submit">Cadastrar</button>
      </td>
    </tr>
  </table>
</form>

<script 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js">
</script>
<script>
$('select[name="produto_id"]').on('change', function(){ // select produtos
  var teste = "<?php Print($teste);?>";
  // var ar = <?php json_encode($listaPreco) ?>;
  // alert(ar);
  $("#cont").val(teste); // input preco


});
</script>
<?php include("rodape.php"); ?>
3 respostas

Tenha um endereço que receba via GET o id e devolva um json com a listagem. Implemente no javascript uma chamada ajax nesse endereço parametrizando o id, popule o componente que quiser com o resultado da requisição (json).

Poderia ser um pouco mais especifico? Não deveria haver um filtro no array dos produtos?

solução!

Bom, realizei alguns testes e consegui resolver. O código Javascript ficou assim:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
    $('select[name="produto_id"]').on('change', function(){ // select produtos

       var listaPrecosProdutos = <?php echo json_encode($listaPreco);?>;
       var produto_id = $(this).val();

       for (i = 0; i<listaPrecosProdutos.length;i++){
         if (produto_id == listaPrecosProdutos[i].id){

           $("#cont").val(listaPrecosProdutos[i].preco);
         } else{

         }
       }
    });
</script>