Maneju 0 Denunciar post Postado Janeiro 8, 2010 Olá. Eu queria faze um sistema de busca que, ao ser digitado algo no INPUT, automaticmante fizesse a pesquisa no BD e povoasse o SELECT. Então pensei em fazer isto no evento onkeyup do INPUT e fazer a instrução SQL com LIKE. Tenho uma rotina JS que é um pouco parecida (como ex. abaixo), nela eu pego o conteudo do CAMPO código, pesuiso no BD e alimento todos os INPUTs com o resultado da pesquisa. A dificuldade agora é ao invés de preencher os INPUTs, colocar o resultado da pesquisa na SELECT. <html> <head> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("select[name='nome']").change(function(){ $("input[name='endereco']").val('Carregando...'); $("input[name='telefone']").val('Carregando...'); $.getJSON( 'function.php', {idCliente: $(this).val()}, function(data){ $.each(data, function(i, obj){ $("input[name='endereco']").val(obj.endereco); $("input[name='telefone']").val(obj.telefone); }) }); }); }); </script> </head> <body> <form action="" method="post"> <label>Nome: <select name="nome"> <option value="">--</option> <?php include('function.php'); echo montaSelect(); ?> </select></label> <label>Endereço: <input type="text" name="endereco" value="" /></label> <label>Telefone: <input type="text" name="telefone" value="" /></label> </form> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Janeiro 8, 2010 Basta manipular o JSON retornado, trocando isso aqui: function(data){ $.each(data, function(i, obj){ $("input[name='endereco']").val(obj.endereco); $("input[name='telefone']").val(obj.telefone); }) }); pela criação dos options do <select>Se você não tentar fazer fica difícil. Não tem como 'ficarmos fazendo' tudo para você. Mostre as dúvidas, os erros.. vá atrás também. Fórum não é 'help desk', o trabalho aqui é voluntário. Ajudo porque aprendo mais assim, e gosto. Mas também vou trabalhar de graça pra você. http://forum.imasters.com.br/public/style_emoticons/default/natal_happy.gif Aqui algo que pode lhe ajudar: http://forum.imasters.com.br/index.php?/topic/365795-combos-dependentes-ajax-jquery/ Compartilhar este post Link para o post Compartilhar em outros sites
Maneju 0 Denunciar post Postado Janeiro 9, 2010 Ok, vou procurar me virar mais sozinho. PS - eu sei como funciona o Fórum e não quero que ninguém trabalhe por mim. Ao invés de responder isto, você poderia simplesmente ter colocado o link de exemplo como fez no final do post. você como moderador(alias moderador é pra moderar e não responder dúvidas técnicas, senão sua insígnia seria de suporte técnico) não tem obrigação de responder toda vez que pergunto, pode simplesmente ignorar meus posts. Só acho que qdo se começa algo novo as dúvidas são muitas e com o tempo e os estudos isto diminui e a gente pode repassar o conhecimento adquiro para outros que saibam menos. Mesmo assim obrigado por esta ajuda e tantas outras que você postou pra mim. Compartilhar este post Link para o post Compartilhar em outros sites
Holt 1 Denunciar post Postado Janeiro 9, 2010 Faça com o onkeyup... Mas em vez de enviar o formulário... Direcione um iframe com os dados do input em get... vais obter um resultado mais interessante... Compartilhar este post Link para o post Compartilhar em outros sites
Maneju 0 Denunciar post Postado Janeiro 9, 2010 Holt, eu já tinha feito metade da rotina, coloquei no onkeyup do INPUT e já tinha obtido o retorno correto tb das informações. Eu só estava com dificuldade para alimentar (e limpar) o SELECT conforme fosse mudando a seleção. Mas acho que tá quase lá. Valeu pela força, abraços! Compartilhar este post Link para o post Compartilhar em outros sites
Maneju 0 Denunciar post Postado Janeiro 9, 2010 Bom, fiz até onde meu limite permite e agora parei nesta situação: No código JS, o "alert" da digitação está correto e o "alert" do retorno dos dados não mostra nada. Se execuo a function_busca.php no browser ele me retorna os dados do banco. $(document).ready(function(){ $("#busca").keyup(function(){ var Valor = $("#busca").val(); alert( Valor); <==== está apresentando corretamente $.getJSON( 'function_busca.php', {Valor: $("#busca").val()}, function(data){ alert(data) <==== não apresenta nada var option = new Array(); //Limpa Variável $("select[name='selecao']").empty(); //Limpa Combo $.each(data, function(i, obj){ option[i] = document.createElement('option'); //Povoa Combo $( option[i] ).attr( {value : obj.idCliente} ); $( option[i] ).append( obj.Razao ); $("select[name='selecao']").append( option[i] ); }) }); }); }); <?php include 'config.php'; $con = conectar(); //recebe resultado da função conectar mysql_select_db('testes'); //função nativa do PHP que faz a conexão ao Banco de Daods MySQL $id = $_POST['Valor']; /** * função que devolve em formato JSON os dados do cliente */ function retorna( $id=null ) { $sql="select idCliente, Razao from clientes where Razao like '$_Post[Valor]%'"; $query = mysql_query( $sql ); $json .= ' ['; if( mysql_num_rows( $query ) > 0 ) { while( $dados = mysql_fetch_assoc( $query ) ) { $json .= "{idCliente: '{$dados['idCliente']}', Razao: '{$dados['Razao']}}";; } } else $json = 'razao: não encontrado'; $json .= ']'; return $json; } $id = $_GET['Valor'];//o método getJSON só envia GET echo retorna( $id ); ?> Não entendi porque não vem o resultado da function_busca.php e a variavel Valor está com o valor certo e se a function_busca.php no browser retorna as informações corretamente. Tem algum erro na forma de povoar o Combo? Abraços! Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Janeiro 10, 2010 Tenta assim: <?php include 'config.php'; $con = conectar(); //recebe resultado da função conectar mysql_select_db('testes', $con ); //função nativa do PHP que faz a conexão ao Banco de Daods MySQL /** * função que devolve em formato JSON os dados do cliente */ function retorna( $valor ) { $sql = "SELECT `idCliente`, `Razao` FROM `clientes` WHERE `Razao` LIKE '{$valor}%'"; $query = mysql_query( $sql )or die( mysql_error() ); $json = ' ['; if( mysql_num_rows( $query ) > 0 ) { while( $dados = mysql_fetch_assoc( $query ) ) { $json .= "{idCliente: '{$dados['idCliente']}', Razao: '{$dados['Razao']}}, ";//tava faltando essa vírgula aqui } } else $json .= '{Razao: não encontrado}'; $json .= ']'; return $json; } $valor = $_GET['Valor'];//o método getJSON só envia GET echo retorna( $valor ); ?> tinha algumas coisas como: Razao like '$_Post[Valor]%'"; que não fazem sentido nesse script.. certeza que 'funcionou' qndo você acessou diretamente ?? acessando diretamente seria: localhost/function_busca.php?Valor=a Compartilhar este post Link para o post Compartilhar em outros sites
Maneju 0 Denunciar post Postado Janeiro 10, 2010 Olá William, tudo bem? Foi mal, postei uma function_busca.php errada. Na correta esta linha está $sql="select idCliente, Razao from Clientes where Razao like '$id%'"; e funciona certo rodando a funtion no browser. só troquei o final como você sugeriu e coloquei aquela vírgula mas ainda não tenho o retorno dos dados selecionados... Vou pesquisar mais um pouco aqui, Abraços! Compartilhar este post Link para o post Compartilhar em outros sites
Maneju 0 Denunciar post Postado Janeiro 23, 2010 Resolvi, faltava uma aspas simples depois do campo razão: $json .= "{idCliente: '{$dados['idCliente']}', Razao: '{$dados['Razao']}'}";; Estou com um problema agora qdo tenho vários registros que começam com a(s) mesma(s) letra(s). Por exemplo, tenho este cadatro: 1) Altino 2) Alfredo 3) Almir 4) Manoel Para: 1) Altino 2) Alfredo 3) Almir só me retorna algo quando eu digitar a terceira letra que definirá exatamente um registro específico. Não estou tendo o retorno de vários registros com a mesma inicial. Para: 4) Manoel Como só tem ele que começa com "M", tenho a seleção já na primeira letra digitada. Oque pode ser? PS - debugando a function diretamente no browser e passando o valor "A" como parâmetro, me retorna todos os registros. Abraços! Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Janeiro 23, 2010 Mostre como ficou o teu WHERE `Razao` LIKE '{$valor}%'"; o % ali é o cara... Compartilhar este post Link para o post Compartilhar em outros sites
Maneju 0 Denunciar post Postado Janeiro 23, 2010 Razao like '$id%'"; Veja imagem debugando a function "diretamente" no browser: Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Janeiro 25, 2010 Atentou para o meu comentário nessa linha? $json .= "{idCliente: '{$dados['idCliente']}', Razao: '{$dados['Razao']}}, ";//tava faltando essa vírgula aqui a saída deveria ser: [{id: '6', Razao: 'Alfredo'}, {id: '8', Razao: 'Almir'}, .. entendeu? precisa separar com , dê um alert do retorno na função de callback no jQuery. Compartilhar este post Link para o post Compartilhar em outros sites