Tenho um formulário, com vários campos porém preciso que o usuário ao preencher o primeiro campo (código) realize uma busca no BD, retorne se achou o código do produto, se encontrou, preencha os campos do formulário. Caso não, preencha apenas o código digitado pelo usuário e deixe os outros campos vazios para preenchimento do mesmo.
Como posso realizar esta query tão complicada. Já tentei vários caminhos que achei na net e não consegui,
Você não detalhes do seu código, imagino que a melhor solução seria um evento onblur no campo do código, chamando uma função javascript que executa um ajax para o carregamento, algo do tipo:
<input type="text" name="codigo" onblur="loadCadastro(this.value)">
<script type="text/javascript">
function loadCadastro(codigo) {
// busca ajax...
// preenche os campos com o que retornar...
}
</script>
Já a página que fornecerá a busca terá uma query parecida com algo:
$campo = filter_input(INPUT_GET, 'codigo');
$sql = 'SELECT * FROM cadastro WHERE codigo = ?';
/* query pelo PDO talvez? */
Obrigado Lost Soldier, vou tentar explicar melhor. Tenho um formulário de produtos e o primeiro campo é código de barras, mas, quando usuário faz a leitura do codigo, o comportamento do leitor é dar um submit sem passar pelo restante do formulário e isso é automático.
Estive pensando em diversas maneiras para lidar com isso,(que após a leitura do codigo pelo leitor, ele vá para o segundo campo e não ocorra o submit neste ponto, apenas no final (button).
A que me apareceu seria enviar um submit apenas do primeiro campo (aproveitando o comportamento padrão do leitor de código de barras), pesquisar se este produto existe no BD, caso sim, retornar com os dados e preencher todos os campos do formulário. Se não, retornar o codigo lido pelo leitor, preenchendo este campo e após o usuário preencheria o restante dos campos (este seria um produto novo) e no final utilizaria o botão submit.
o “enter” não está bindado para o submit do form? Pois, se nao me engano, o comportamento padrão do leitor de codigo de barras é digitar todos os dígitos e depois dar um enter
Igor, o comportamento do código de barras é esse mesmo, ele preenche com o codigo (todos os digitos) automaticamente e também automaticamente submete o formulário todo(somente com o campo codigo de barras preenchido), o usuário não consegue preencher os demais campos que compõe o formulário, ele já foi submetido, mas nesse caso em particular, o usuário vai passar o codigo de barras na etiqueta para o cadastramento do produto e é nesse momento que precisamos saber se o produto existe no BD, caso sim, devolver o formulário preenchido com os dados do BD, caso não, devolver somente este codigo de barras para aí sim cadastrar o produto (continuar preenchendo o formulário até o fim) e aí sim utilizar o botão submit.
Explicado um pouco o funcionamento básico de um form…
O botão submit, seja por input ou button, assume automaticamente o envio quando o usuário digita enter em qualquer campo do form… para evitar esse comportamento após leitura do código de barras, sugiro trocar seu input submit por input button, por exemplo…
<form name="formCadastro" method="post" action="...">
<!-- campos que compoem o form... -->
<input type="button" value="Enviar" onclick="document.formCadastro.submit();">
</form>
Perceba que acrescentei um name ao form, isso para o truque funcionar no input pelo onclick… dessa forma o formulário só é realmente enviado quando usuario clicar no botão e não na leitura do código de barras…
A partir daí a brincadeira começa para resgatar o cadastro pelo código…
LostSoldier, perfeito essa forma realmente resolve o problema do leitor de codigo de Barras. Obrigado.
Mas quando fui implementar,descobri que eu tenho outro problema. O input dos campos não está saindo pelo botão submit no final do formulário, Eu fiz essa solução copiando a solução do curso FP-73 da apostila da Caelum onde utiliza uma mesma pagina para cadastrar/alterar um produto.
Desta forma o input já está saindo nesta função, antes de chegar ao botão: