Ir para conteúdo

Arquivado

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

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.

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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?

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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>

Compartilhar este post


Link para o post
Compartilhar em outros 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?

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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'}]

Compartilhar este post


Link para o post
Compartilhar em outros 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 .= ']';

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.