Ir para conteúdo

Arquivado

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

marcilio9590

Problema preencher campos apos selecionar select com AJAX

Recommended Posts

Pessoal meu problema é o seguinte, tenho um select que é populado com valores de um banco de dados mysql, ao escolher uma opção eu quero que alguns campos do formulario sejam preenchidos automaticamente com as informações referentes a minha escolha no select. a lista com os dados do banco aparecem no select so que ao escolher nada é preenchido fica apenas carregando.

 

index.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('script.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>
  

script.php

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

// idCliente= id         

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

                if( mysql_num_rows( $query ) > 0 )
                {
                        while( $dados = mysql_fetch_assoc( $query ) )
                        {
                                $opt .= '<option value="'.$dados['id'].'">'.$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 motorista ";
                if( $id != null )
                        $sql .= "WHERE `id` = {$id} ";
                $query = mysql_query($sql);

                //$json = 'var dados = ';
                $json .= ' [';  
                if(mysql_num_rows($query) > 0 )
                {
                        while($dados = mysql_fetch_assoc($query))
                        {
                                $json .= "{endereco: '{$dados['nome']}', telefone: '{$dados['cpf']}' }";;
                        }
                }
                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'] );
}
?> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aperta Ctrl + Shift + J no Firefox e veja o que aparece no console de erros.

Além disso, acesse diretamente, pelo browser:

 

function.php?idCliente=1

 

e veja se aparece um JSON ou erros php. Se aparecem erros, corrija.

 

 

ps: script do meu blog :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

é sim cara, esse script foi do seu blog valeu pelas suas contribuições.

quando acesso direto pelo navegador aparece este erro.

Notice: Undefined variable: json in C:\xampp\htdocs\preencher\script.php on line 41
[{endereco: 'X', telefone: 'X' }]


corrigi o notice só e como já era esperado ele continua com o mesmo problema, seleciono o dado no select e ele preenche os campos apenas com carregando e não com os dados relacionados ao que eu selecionei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E o que aparece agora no console de erros ?

 

Ctrl + Shift + J no Firefox. Abra essa aba e veja. Depois mude o select e veja.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara consegui fazer tudo funcionar mais apareceu um novo problema, quando submeto o formulario com os dados os campos que foram preenchido automaticamente com ajax apresentam o seguinte erro:

Notice: Undefined index: combus_abas in C:\xampp\htdocs\sisatweb\classCadastro.php on line 143

 

todos os 3 esse mesmo erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai o erro é entre o teu php e o teu html.

Veja o atributo name dos inputs:

 

name="endereco"

name="telefone"

name="nome"

Compartilhar este post


Link para o post
Compartilhar em outros sites

foi a primeira coisa que fui conferir o name está correto. o incrivel que esses notice aparece apenas nos inputs que foram preenchidos com ajax.


é como se o meu input nao existisse, acho que esses dados nao vou poder pegar por posto de alguma maneira pelo name ele nao pega, como faço para pegar diretamente do ajax de sem ser pelo name?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ei Marcilio tudo bem?

 

Cara tenho uma sugestão para você não precisar fazer a requisição no json.

 

No teu select você já pode passar os dados do motorista, por exemplo:

function montaSelect() {
    $sql = "SELECT `id`, `nome`, `endereco`, `telefone` FROM motorista ";
    $query = mysql_query($sql);

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

    return $opt;
}

E quando der o change no jquery você pega esses dados pelo .attr, ex:

$("select[name='nome']").change(function () {
    $("input[name='endereco']").val($('option:selected', this).attr('endereco'));
    $("input[name='telefone']").val($('option:selected', this).attr('telefone'));
});

Assim fica bacana pois não precisa fazer a requisição e como são somente outros dois dados também não vai influenciar na performance, só não tenho certeza se o $('option:selected', this).attr('endereco') vai pegar desse jeito, estou acostumado a utilizar com ids.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

é como se o meu input nao existisse, acho que esses dados nao vou poder pegar por posto de alguma maneira pelo name ele nao pega, como faço para pegar diretamente do ajax de sem ser pelo name?

essa sua percepção está errada.

Poste aqui o script php que recebe e o html.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma ajuda aqui Bruno, tenho essa parte que funciona muito bem mesmo, porém agora eu troquei todo o código do sistema para mysqli, mas quando tentei alterar ele para mysqli ele não funcionou, talvez por eu ainda ter todo domínio do mysqli ainda. Outro ponto, mesmo se eu deixar como está no mysql_ e trocar para UTF ele não carrega os valores, somente se eu deixar em ANSI

Realmente estou tendo dificuldade na conversão dele para mysqli.

<?php
include "dbconfig.php"; //inclui o arquivo de conexão
header("Content-Type: text/html; charset=ISO-8859-1",true);
        /**
         * função que retorna o select
         */
        function montaSelect()
        {
                $sql = "SELECT Id, categoria FROM estrutura ORDER BY Id";
                $query = mysql_query( $sql );
                
                if( mysql_num_rows( $query ) > 0 )
                {
                        while( $dados = mysql_fetch_assoc( $query ) )
                        {
                                $opt .= '<option value="'.$dados['Id'].'">'.$dados['categoria'].'</option>';
                        }
                }
                else
                        $opt = '<option value="0">Nenhum curso 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 estrutura ";
                if( $id != null )
                        $sql .= "WHERE Id = {$id} ";
                $query = mysql_query( $sql );
        
                //$json = 'var dados = ';
                $json .= ' [';  
                if( mysql_num_rows( $query ) > 0 )
                {
                        while( $dados = mysql_fetch_assoc( $query ) )
                        {
                                $json .= "{
						Id: '{$dados['Id']}', 
						valor: '{$dados['valor']}', 
						categoria: '{$dados['categoria']}'
						}";;
                        }
                }
                else
                        $json = 'curso: não encontrado';
                        
                $json .= ']';
                //$jston .= ';';
                
                return $json;
        }
        
        
/* só se for enviado o parâmetro, que devolve o combo */
if( isset($_GET['Id']) )
{
        echo retorna( $_GET['Id'] );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só para deixar aqui, a mudança que fiz para mysqli, mas não sei se está correto

<?php
include "dbconfig.php"; //inclui o arquivo de conexão
header("Content-Type: text/html; charset=ISO-8859-1",true);
        /**
         * função que retorna o select
         */
        function montaSelect()
        {
                $sql = "SELECT Id, categoria FROM estrutura ORDER BY Id";
                $query = $sqli->query($sql);
                
                if( mysqli_num_rows( $query ) > 0 )
                {
                        while ($dados = $query->fetch_assoc()) {
                        {
                                $opt .= '<option value="'.$dados['Id'].'">'.$dados['categoria'].'</option>';
                        }
                }
                else
                        $opt = '<option value="0">Nenhum curso 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 estrutura ";
                if( $id != null )
                        $sql .= "WHERE Id = {$id} ";
                $query = $sqli->query($sql);
        
                //$json = 'var dados = ';
                $json .= ' [';  
                if( mysqli_num_rows( $query ) > 0 )
                {
                        while ($dados = $query->fetch_assoc()) {
                        {
                                $json .= "{
					Id: '{$dados['Id']}', 
					valor: '{$dados['valor']}', 
					categoria: '{$dados['categoria']}'
					}";;
                        }
                }
                else
                        $json = 'curso: não encontrado';
                        
                $json .= ']';
                //$jston .= ';';
                
                return $json;
        }
        
        
/* só se for enviado o parâmetro, que devolve o combo */
if( isset($_GET['Id']) )
{
        echo retorna( $_GET['Id'] );
}

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.