Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Maneju

Alimentar SELECT pelo INPUT

Recommended Posts

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

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

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

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

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

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

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

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

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

Mostre como ficou o teu

WHERE `Razao` LIKE '{$valor}%'";
o % ali é o cara...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.