Ir para conteúdo

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 landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
×

Informação importante

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