Ir para conteúdo

POWERED BY:

Arquivado

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

inezboldrin

Formulário usando autocomplete

Recommended Posts

Olá galera! Estou estudando php, e tenho que fazer um projeto de um formulário com autocomplete + php + ajax + mysql.

E consiste em criar um formulário que vai buscar a matrícula do cliente no banco de dados e preencher as informações nos devidos campos. E com pesquisas na internet, consegui desenvolver o código, mas ele não está buscando as informações e preenchendo os campos.

esse é o arquivo function.php

<?php
 
include_once ('conecta_mysql.inc');

function retorna( $MATRIC, $db )
{
    $sql = "SELECT `DTADM`, `NOMSOCDEP`, `TIPOSOC`, `DTNASC`
      FROM `DBWEBCAD` WHERE `MATRIC` = '{$MATRIC}' ";
 
    $query = $db->query( $sql );
 
    $arr = Array();
    if( $query->num_rows )
    {
        while( $dados = $query->fetch_object() )
        {
            $arr['DTADM'] = $dados->cDadm;
            $arr['NOMSOCDEP'] = $dados->tNome;
            $arr['TIPOSOC'] = $dados->tSoc;
            $arr['DTNASC'] = $dados->tNasc;
        }
    }
    else
        $arr['tNome'] = 'Não encontrado';
 
    return json_encode( $arr );
}
 

if( isset($_GET['MATRIC']) )
{
    $db = new mysqli('localhost', 'inezb', '514943', 'clientes');
    echo retorna( filter ( $_GET['MATRIC'] ), $db );
}
 
function filter( $var ){
    return $var;
}
 
?>

autoComplete.php (Esse arquivo lista as matrículas referentes aos clientes)

<?php
$host="localhost";
$username="inezb"; 
$password="514943";  
$db_name="clientes"; 
 
 
$con = mysql_connect($host,$username,$password)   or die(mysql_error());
mysql_select_db($db_name, $con)  or die(mysql_error());
 
$q = strtolower($_GET["q"]);
if (!$q) return;
 
$sql = "select DISTINCT MATRIC from DBWEBCAD where MATRIC LIKE '%$q%'";
$rsd = mysql_query($sql);
while($rs = mysql_fetch_array($rsd)) {
$cmat = $rs['MATRIC'];
$cname = $rs ['NOMSCODEP'];
echo "$cmat\n", "$cname\n";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
Tente detalhar mais o problema...

Aparece alguma mensagem de erro?

Até que ponto funciona corretamente?

O que acontece quando você digita algo no campo? Não filtra pelo texto digitado, não aparece nada no autocomplete, ou que?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Tente detalhar mais o problema...
Aparece alguma mensagem de erro?
Até que ponto funciona corretamente?
O que acontece quando você digita algo no campo? Não filtra pelo texto digitado, não aparece nada no autocomplete, ou que?

Esse arquivo aí, não está funcionando. E eu não consigo saber onde está o erro. Única coisa que funciona é um outro arquivo que consegue buscar a matrícula e listar todas conforme vai sendo digitado o número.

Compartilhar este post


Link para o post
Compartilhar em outros sites
ini_set('display_errors', true);
error_reporting(E_ALL);

coloca no início do seu código e ve se aparece algum erro agora

Console vazio, não apresenta nenhum erro. Editei o código e acrescentei o código em que é listado a matrícula do cliente, no qual funciona perfeitamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Inez, tudo bem ?

Vamos tentar debugar todo o script por partes. Primeiro, como já deve ser de seu conhecimento, sempre fazer o básico, que é verificar se está chegando valor no $_GET['MATRIC']. Notei que sua função filter não está fazendo nada a não ser retornar o próprio valor do get, esse é o primeiro passo.

Segundo passo:

Após verificar se o valor chega no GET, vamos ver se ele está sendo passado para a função retorna. Notei uma inconsistência em seu ELSE, pois estava sem indicação de término da ocorrência. teste da forma que vou te passar e diga o que retorna:

<?php
 
include_once ('conecta_mysql.inc');

function retorna( $MATRIC, $db )
{
    $sql = "SELECT `DTADM`, `NOMSOCDEP`, `TIPOSOC`, `DTNASC`
      FROM `DBWEBCAD` WHERE `MATRIC` = $MATRIC ";

      print $MATRIC.'<br><br>';
      print $sql.'<br><Br>';
 
    $query = $db->query( $sql );
 
    $arr = Array();
    if( $query->num_rows )
    {
        while( $dados = $query->fetch_object() )
        {
            $arr['DTADM'] = $dados->cDadm;
            $arr['NOMSOCDEP'] = $dados->tNome;
            $arr['TIPOSOC'] = $dados->tSoc;
            $arr['DTNASC'] = $dados->tNasc;
        }
    }else{
        $arr['tNome'] = 'Não encontrado';
    }
 
    print '<pre>';
    print_r($arr);
    //return json_encode( $arr );
}
 

if( isset($_GET['MATRIC']) )
{
    $db = new mysqli('localhost', 'inezb', '514943', 'clientes');
    retorna( $_GET['MATRIC'] ), $db );
}
 
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Inez, tudo bem ?

Vamos tentar debugar todo o script por partes. Primeiro, como já deve ser de seu conhecimento, sempre fazer o básico, que é verificar se está chegando valor no $_GET['MATRIC']. Notei que sua função filter não está fazendo nada a não ser retornar o próprio valor do get, esse é o primeiro passo.

Segundo passo:

Após verificar se o valor chega no GET, vamos ver se ele está sendo passado para a função retorna. Notei uma inconsistência em seu ELSE, pois estava sem indicação de término da ocorrência. teste da forma que vou te passar e diga o que retorna:

<?php
 
include_once ('conecta_mysql.inc');

function retorna( $MATRIC, $db )
{
    $sql = "SELECT `DTADM`, `NOMSOCDEP`, `TIPOSOC`, `DTNASC`
      FROM `DBWEBCAD` WHERE `MATRIC` = $MATRIC ";

      print $MATRIC.'<br><br>';
      print $sql.'<br><Br>';
 
    $query = $db->query( $sql );
 
    $arr = Array();
    if( $query->num_rows )
    {
        while( $dados = $query->fetch_object() )
        {
            $arr['DTADM'] = $dados->cDadm;
            $arr['NOMSOCDEP'] = $dados->tNome;
            $arr['TIPOSOC'] = $dados->tSoc;
            $arr['DTNASC'] = $dados->tNasc;
        }
    }else{
        $arr['tNome'] = 'Não encontrado';
    }
 
    print '<pre>';
    print_r($arr);
    //return json_encode( $arr );
}
 

if( isset($_GET['MATRIC']) )
{
    $db = new mysqli('localhost', 'inezb', '514943', 'clientes');
    retorna( $_GET['MATRIC'] ), $db );
}
 
?>

O console continua sem retornar nada.

O código autoComplete.php que eu coloquei na minha pergunta, ele funciona bem buscando a matrícula, mas o funcion.php que deveria buscar as informações não retorna nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esqueça o console, acesse à página diretamente com um GET, exemplo:

http://localhost/retorna.php?MATRIC=xxx

Que ele vai exibir os dados. Se estiver tudo OK com essa página então o teu problema está no ajax/jquery

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alaerte, fiz isso. Carregou a página normal.
Acho que o problema está no desenvolvimento do function.php, pois o autoComplete.php funciona para buscar as matrículas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então o problema não está aí. O que tem na página function.php ?

O código que busca a matrícula dos clientes. Ele funciona quando eu digito algum número que contém na matrícula.

ild1yw_th.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Inez você precisa ser mais clara, eu não estou mais te entendendo...

Ok, vamos lá...

Tenho um formulário no qual eu gostaria que através da matrícula/carteira do cliente, os demais dados fossem preenchidos automaticamente (data de admissão, nome, data de nascimento, tipo de cliente).

Na página function.php contém o desenvolvimento do código que ao digitar um número, vai listando as matrículas. (EX: Se eu digitar 500, ele vai listar todas as matrículas que contém 500).

O outro arquivo, eu estou tentando fazer com que ao clicar na matrícula desejada, ele preencha os campos com as informações salvas no banco dados. Mas eu sou iniciante nessa área, e sei pouco de java, ajax.. E eu li que eu preciso desenvolver em java, ajax para fazer esse autocomplete.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hummm agora sim. Vamos lá.

JAVA é uma outra linguagem de programação. A que você se refere é JavaScript/Ajax ou jQuery. Você vai precisar de jquery, que nada mais é do que um framework JavaScript para manipular a biblioteca... e PHP. Neste caso vou te passar um tutorial de como proceder, da uma estudada que você vai entender, é em vídeo.

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hummm agora sim. Vamos lá.

JAVA é uma outra linguagem de programação. A que você se refere é JavaScript/Ajax ou jQuery. Você vai precisar de jquery, que nada mais é do que um framework JavaScript para manipular a biblioteca... e PHP. Neste caso vou te passar um tutorial de como proceder, da uma estudada que você vai entender, é em vídeo.

Abraço.

Alarte, essa aula me ajudou e muito! Que inclusive vou começar a estudar através desses vídeos.

Eu fiz igual está no vídeo, não adaptei nenhum campo, justamente para ver se iria funcionar perfeitamente. E funcionou.

Mas estou tendo um probleminha de validação, quando digito o código, ele aparece a critica "Por favor, digite um código!", mesmo havendo código no campo.

Eu poderia colocar o print dessa mensagem aqui?

Muito obrigada pela sua ajuda, ela veio na hora certa! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque à parte do código onde você valida essa ação

Como eu disse, fiz igual ao dele para conferir se funcionaria direitinho. Mas a crítica mesmo quando digita o código aparece.

completar.php

<!DOCTYPE html>
<heml>
<head>
<meta charset="utf-8" />
<title>AJAX</title>
<style type="text/css">
label (display:inline=table; width:60px;)
</style>
 
<script type="text/javascript">
function completar_campos () {
document.getElementById("loading").style.display ="block";
var con_consulta;
if (window.XMLHttpRequest) {
con_consulta = new XMLHttpRequest ();
} else {
con_consulta = new ActiveXObject ("Microsoft.XMLHTTP");
}
con_consulta.onreadystatechange = function (){
if(con_consulta.readyState == 4 && con_consulta.status == 200) {
document.getElementById("dados_essenciais").innerHTML = con_consulta.responseText;
document.getElementById("loading").style.display = "none";
}
}
var cli_codigo = document. getElementById("cli_codigo").value;
 
con_consulta.open("GET", "processar.php?cli_codigo="+cli_codigo, true);
con_consulta.send(null);
 
}
</script>
</head>
<body>
<label>Código:</label> <input type="text" value="" onblur="completar_campos();" id="cli_codigo" /></br>
 
<img src="loading.gif" id="loading" style="display:none" />
 
<div id="dados_essenciais">
<label>Nome: </label> <input type="text" value="" name="cli_nome" /> <br>
<label>Cidade: </label> <input type="text" value name="cli_cidade" /> <br>
<label>Idade: </label> <input type="text" value="" name="cli_idade"/> <br>
<label>Endereço: </label> <input type="text" value="" name="cli_endereco" /> <br>
</div>
 
<input type="submit" value="Enviar" />
 
 
</body>
</html>
 
processar.php

<?php
include ("conecta.php");
 
$seleciona_dados = mysql_query("SELECT * FROM clientes WHERE cli_codigo = '".$_GET['cli_codigo']."'");
$lin_recupera_dados = mysql_num_rows ($seleciona_dados);
$lin_dado_cli = mysql_fetch_array ($seleciona_dados);
 
if($lin_recupera_dados == 0) { 
echo '
Por favor, preencha o código!<br/>
<label>Nome:</label> <input type="text" value="'.$lin_dado_cli['cli_nome'].'" name="cli_nome" /></br>
<label>Cidade:</label> <input type="text" value="'.$lin_dado_cli['cli_cidade'].'" name="cli_cidade"/></br>
<label>Idade:</label> <input type="text" value="'.$lin_dado_cli['cli_idade'].'" name="cli_idade"/></br>
<label>Endereço:</label> <input type="text" value="'.$lin_dado_cli['cli_endereco'].'" name="cli_endereco"/></br>
 
';
}else{ 
 
echo '
<label>Nome:</label> <input type="text" value="'.$lin_dado_cli['cli_nome'].'" name="cli_nome" /></br>
<label>Cidade:</label> <input type="text" value="'.$lin_dado_cli['cli_cidade'].'" name="cli_cidade"/></br>
<label>Idade:</label> <input type="text" value="'.$lin_dado_cli['cli_idade'].'" name="cli_idade" /></br>
<label>Endereço:</label> <input type="text" value="'.$lin_dado_cli['cli_endereco'].'" name="cli_endereco" /></br>
';
 
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Inez, bom dia ! então, na verdade ele mostra esse resultado caso o código digitado não seja encontrado no banco de dados. Mais à lógica está correta. É só uma questão de tratamento de retorno. O texto correto para aquele trecho do código seria "Resultado não encontrado" ou qualquer outro que te agrade. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Inez, bom dia ! então, na verdade ele mostra esse resultado caso o código digitado não seja encontrado no banco de dados. Mais à lógica está correta. É só uma questão de tratamento de retorno. O texto correto para aquele trecho do código seria "Resultado não encontrado" ou qualquer outro que te agrade. ;)

Eu cadastrei outros códigos dentro do banco de dados, e do mesmo jeito todos apresentam essa mensagem :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu já te mostrei, você vai precisar debugar o script pra saber se o código realmente está chegando até a página responsável por fazer a query, provavelmente ele não está chegando. Procure por tutoriais mais novos, há uma grande quantidade deles espalhados por aí e estude.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso.

      Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa.
       
      Minha dúvida, que preciso muito entender:
      - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo.
       
      tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação.

      Preciso de ajuda.

      Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ?

      tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias.

      Alguns do amigo tem algum vídeo, leitura explicando essa parte ?

      Grato,

      Cesar.
×

Informação importante

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