Jump to content
gilmarfp

[Resolvido] como preencher vários campos através de um Select

Recommended Posts

Olá pessoal, sou novo em Php e estou tentando desenvolver uma pagina de pedido, será algo mais ou menos assim: quano eu selecionar no menu select o nome do cliente, os outros campos de texto no formulário serão preenchidos como o endereço, tel, bairro, cidade do cliente selecionado, será que poderiam me ajudar? se puder me mandar um exemplo ficarei grato.

Share this post


Link to post
Share on other sites

O Ajax só vai fazer o preenchimento sem o refresh. Eu fiz este exemplo bem rapidinho, mas acho que dá pra entender a lógica.

 

<form name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']?>" >
<select name="cliente">
<option value="id">Nome do Cliente</option>
<?php 
// aqui dentro você coloca o código para preencher os dados do cliente 
?>
</select>
<?php 
if (!isset($_POST['cliente'])) 
{
echo '<input type="submit" name="buscar" value="Buscar Cliente"></form>';
} 
else
{
$sql = 'SELECT * FROM tabela WHERE id_cliente = '.$_POST['cliente'];
$qry = mysql_query($sql);
$row = mysql_fetch_assoc($qry);
       // aqui é onde vai imprimir o restante dos dados do cliente
echo '<input type="text" name="Nome" value="'.$row['nome'].'">
<input type="submit" name="enviar" value="Enviar"></form>';	
}
?>

 

Na primeira execução, ele vai exibir somente o select. Quando selecionar e clicar em buscar, vai enviar o dado daquele select para a mesma página, que vai imprimir os campos com o as informações do cliente.

 

Ali eu fiz algumas coisas que não se faz, tipo não verificar se existe $row['nome'], jogar o valor do $_POST direto na query, mas é só pra você ter uma idéia.

 

Carlos Eduardo

Share this post


Link to post
Share on other sites

Bom, cara, primeiramente você vai precisar de um banco de dados. Recomendo o MYSQL porque é mais adaptado ao PHP. Depois, nesse banco você cria uma tabela chamada "clientes". Ela deve conter o campo ID e esse campo deve ser único para cada pessoa. O mysql insere automaticamente um id diferente pra cada cliente. Depois, você pode colocar quantos campos quiser, tipo endereço, bairro, telefone, mail, tudo o que você quiser. Após isso você precisa ir na página php e fazer uma consulta. Ou seja, você seleciona o cliente do menu e então ele preenche de acordo com o id. Por exemplo:

Temos um menu com 3 clientes.

 

Vinícius - ID= 3

César - ID= 102

Maria - ID= 41

 

Pra qualquer cliente que você selecionar ele vai buscar as informações e preencher automaticamente a página, a partir dos dados do banco mysql.

Share this post


Link to post
Share on other sites

ele vai buscar as informações e preencher automaticamente a página, a partir dos dados do banco mysql.

 

Como assim? Automaticamente? Sem usar Ajax, não rola. Veja que no meu exemplo, tem que estar tudo na mesma página e só funciona clicando no botão.

 

Carlos Eduardo

Share this post


Link to post
Share on other sites

Carlos Tem como colocar um exemplo do codigo pra exibir o nome do cliente?é que eu usei o dream weaver pra fazer os nomes dos clientes aparecerem no select e o mesmo gera um codigo muito grande que não consegui inserir naquele espaço reservado.

Edited by William Bruno
Remover quote desnecessário

Share this post


Link to post
Share on other sites

No exemplo ali de cima já imprime o nome. Veja.

 

echo '<input type="text" name="Nome" value="'.$row['nome'].'">

Se você quiser fazer isto usando as ferramentas do Dreamweaver, posso mover para o fórum correspondente, que o pessoal de lá vai poder ajudar melhor.

 

Carlos Eduardo

Share this post


Link to post
Share on other sites

dei uma olhada no seu exemplo funcionando, e é bem legal, porem copiei o código e fiz a tabela segundo o sql que estava disponivel porem no meu computador não fucionou, será que fiz algo de errado?

Share this post


Link to post
Share on other sites

segui o exemplo acima porem não consegui fazer funcionar, ele até aparece os dois cadastros,porem não preenche os outros 2 campos fica aparecendo carregando e não sai disso

Share this post


Link to post
Share on other sites

Como está o seu código?

 

Carlos Eduardo

 

fiz igual ao exemplo do nosso amigo acima,era exatamente isso que eu queria, está funcionando em http://www.wbruno.com.br/scripts/combo-preenche-input.php porem segui os exemplos e aqui não funcionou

 

criei uma pagina com o nome de function.php

<?php
        $con = mysql_connect('localhost', 'root', '');
        mysql_select_db('banco', $con);

        /**
         * função que retorna o select
         */
        function montaSelect()
        {
                $sql = "SELECT `idCliente`, `nome` FROM `cliente` ";
                $query = mysql_query( $sql );

                if( mysql_num_rows( $query ) > 0 )
                {
                        while( $dados = mysql_fetch_assoc( $query ) )
                        {
                                $opt .= '<option value="'.$dados['idCliente'].'">'.$dados['nome'].'</option>';
                        }
                }
                else
                        $opt = '<option value="0">Nenhum cliente cadastrado</option>';

                return $opt;
        }

        /**
         * função que devolve em formato JSON os dados do cliente
         */
        function retorna( $id=null )
        {
                $id = (int)$id;

                $sql = "SELECT * FROM `cliente` ";
                if( $id != null )
                        $sql .= "WHERE `idCliente` = {$id} ";
                $query = mysql_query( $sql );

                //$json = 'var dados = ';
                $json .= ' [';  
                if( mysql_num_rows( $query ) > 0 )
                {
                        while( $dados = mysql_fetch_assoc( $query ) )
                        {
                                $json .= "{endereco: '{$dados['endereco']}', telefone: '{$dados['telefone']}'}";;
                        }
                }
                else
                        $json = 'endereco: não encontrado';

                $json .= ']';
                //$jston .= ';';

                return $json;
        }

/* só se for enviado o parâmetro, que devolve o combo */
if( isset($_GET['idCliente']) )
{
        echo retorna( $_GET['idCliente'] );
}
?>

e outra com o nome pagina.php

<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>
Edited by William Bruno
Adicionar [code]

Share this post


Link to post
Share on other sites

segui o exemplo acima porem não consegui fazer funcionar, ele até aparece os dois cadastros,porem não preenche os outros 2 campos fica aparecendo carregando e não sai disso

 

Que 'outros dos 2 campos'?

você não modificou nada do meu código original.

 

Criou o banco de dados? as tabelas estão lá ?

 

Acesse diretamente a página:

function.inc.php?idCliente=1

 

e veja se aparece algum erro, ou o retorno jSON como esperado.

Dessa forma:

http://www.wbruno.com.br/scripts/combo-preenche-input-function.php?idCliente=1

 

você lembrou de fazer download da biblioteca jQuery?

Share this post


Link to post
Share on other sites

na verdade não me expressei direito usei o seu código, baixei o jquery, as tabelas fiz tudo segundo o seu exemplo , porém aqui não funcionou, eu seleciono o nome do cliente e não preenche os campos endereço e telefone

Edited by William Bruno
Remover quote desnecessário

Share this post


Link to post
Share on other sites

Faça o procedimento abaixo:

Acesse diretamente a página:

function.inc.php?idCliente=1

 

e veja se aparece algum erro, ou o retorno jSON como esperado.

Dessa forma:

http://www.wbruno.com.br/scripts/combo-preenche-input-function.php?idCliente=1

 

Informe o resultado.

Deverá aparecer o objeto jSON ou um erros do php. Reveja a 'instalação', pois o script funciona.

Share this post


Link to post
Share on other sites

apareceu esta mensagem: Notice: Undefined variable: json in C:\wamp\www\projeto teste\function.php on line 39

[{endereco: 'Rua dos Bobos, n 0', telefone: '6666-6669'}]

Share this post


Link to post
Share on other sites

Tá, troca esse bloco aqui:

//$json = 'var dados = ';
                $json .= ' [';  
                if( mysql_num_rows( $query ) > 0 )
                {
                        while( $dados = mysql_fetch_assoc( $query ) )
                        {
                                $json .= "{endereco: '{$dados['endereco']}', telefone: '{$dados['telefone']}'}";;
                        }
                }
                else
                        $json = 'endereco: não encontrado';

                $json .= ']';
                //$jston .= ';';
por:

$json = ' [';  
				if( mysql_num_rows( $query ) > 0 )
				{
					$dados = mysql_fetch_assoc( $query );
					$json .= "{endereco: '{$dados['endereco']}', telefone: '{$dados['telefone']}'}";
				}
				else
					$json = 'endereco: não encontrado';

				$json .= ']';

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.