PHP
Pesquisa dinâmica com Ajax, Banco de Dados e PHP
No artigo de hoje vamos aprender a utilizar uma poderosa ferramenta para pesquisa dinâmica sem reload de páginas para seus relatórios, buscas no site e etc.
Há muitas hipóteses de pesquisa ou busca de dados, basta adequar o projeto a sua necessidade, pois o conceito será o mesmo sobre Ajax e BD.
Bem iniciamos nosso projeto criando nosso Banco de Dados para realizar a pesquisa através do formulário. Para exemplo criei um BD chamado pesquisa, e uma tabela chamada cliente com alguns registros, lembrando que os nomes são opcionais, pois você pode dar os nomes que quiser.
CREATE DATABASE pesquisa; USE pesquisa; CREATE TABLE IF NOT EXISTS `cliente` ( `idCliente` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(200) COLLATE utf8_unicode_ci NOT NULL, `email` varchar(200) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`idCliente`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Criado nosso BD e nossa tabela vamos inserir alguns registros para exemplo:
INSERT INTO `cliente` (`idCliente`, `nome`, `email`) VALUES (1, 'Leonardo Martins', 'leo.piracaia@hotmail.com'), (2, 'Joaquim Silva', 'joa@hotmail.com'), (3, 'Ana Carvalho', 'ana@hotmail.com'), (4, 'Everton José', 'everton@hotmail.com');
Pronto já temos nosso BD criado para pesquisa, vamos a nossa página HTML agora.
Em nossa página HTML é muito importante não esquecer de fazer o download do Jquery para nosso Ajax funcionar.
- O Ajax está na biblioteca Jquery e no exemplo a seguir utilizaremos a biblioteca 2.x, para baixa-la acesse //jquery.com/download/ e clique no link Download the uncompressed, development jQuery 2.1.1 .
- Se você não conhece manipulação básica de Jquery, por favor, acesse o artigo Efeitos de Animação em Jquery, ela te ajudará com as noções básicas de comando e estrutura javascript para o uso de Jquery.
Feito seu download inclua ele no head de seu site assim:
<script type="text/javascript" src="js/jquery-2.1.0.js"></script>
Feito isso vamos criar nosso código em JavaScript, no caso, a chamada Ajax.
<script type="text/javascript"> $(document).ready(function(){ //Aqui a ativa a imagem de load function loading_show(){ $('#loading').html("<img src='img/loading.gif'/>").fadeIn('fast'); } //Aqui desativa a imagem de loading function loading_hide(){ $('#loading').fadeOut('fast'); } // aqui a função ajax que busca os dados em outra pagina do tipo html, não é json function load_dados(valores, page, div) { $.ajax ({ type: 'POST', dataType: 'html', url: page, beforeSend: function(){//Chama o loading antes do carregamento loading_show(); }, data: valores, success: function(msg) { loading_hide(); var data = msg; $(div).html(data).fadeIn(); } }); } //Aqui eu chamo o metodo de load pela primeira vez sem parametros para pode exibir todos load_dados(null, 'pesquisa.php', '#MostraPesq'); //Aqui uso o evento key up para começar a pesquisar, se valor for maior q 0 ele faz a pesquisa $('#pesquisaCliente').keyup(function(){ var valores = $('#form_pesquisa').serialize()//o serialize retorna uma string pronta para ser enviada //pegando o valor do campo #pesquisaCliente var $parametro = $(this).val(); if($parametro.length >= 1) { load_dados(valores, 'pesquisa.php', '#MostraPesq'); }else { load_dados(null, 'pesquisa.php', '#MostraPesq'); } }); }); </script>
Perceba que esse script vai ser chamado assim que a página ser carregada e logo chamando nossa função load_dados(), na qual mostraremos todos os registros da tabela cliente sem filtro ainda, esse parâmetro pode ser modificado de acordo com sua necessidade, mostrando registros ou não ou já mostrando algum registro especifico quando a página for carregada.
//primeiro parâmetro seria o valor digitado no form, como ainda não //digitamos nada, passamos null como valor, pois assim ele retornará todos //os registro da tabela cliente. //segundo parâmetro é a página onde será feita a pesquisa, é a página para //onde vamos mandar os dados digitados no form //terceiro parâmetro é a div que será mostrada o resultado da pesquisa //retornado pela página que enviamos os dados load_dados(null, 'pesquisa.php', '#MostraPesq');
Nosso HTML ficara dessa maneira.
<center> <article> <form name="form_pesquisa" id="form_pesquisa" method="post" action=""> <fieldset> <legend>Digite o nome a pesquisar</legend> <div class="input-prepend"> <span class="add-on"><i class="icon-search"></i></span> <input type="text" name="pesquisaCliente" id="pesquisaCliente" value="" tabindex="1" placeholder="Pesquisar cliente..." /> </div> </fieldset> </form> <div id="contentLoading"> <div id="loading"></div> </div> <section class="jumbotron"> <div id="MostraPesq"></div> </section> </article> </center>
Lembrando que o name do input pesquisaCliente quando modificado para outro nome, tem que ser modificado em todos os lugares, se não haverá erros.
Através do nosso evento keyup no input pesquisaCliente, a cada tecla digitada, ou algum valor que você determinará no if de quantidade de caracteres, ele fará uma pesquisa ao banco de dados verificando se existe algum registro que você digitou como parâmetro em nossa página pesquisa.php, pois nela será onde iremos fazer acesso ao nosso banco de dados e retornar o resultado de nossa pesquisa se houve sucesso ou não.
Nossa página pesquisa.php ficará assim:
<?php //recebemos nosso parâmetro vindo do form $parametro = isset($_POST['pesquisaCliente']) ? $_POST['pesquisaCliente'] : null; $msg = ""; //começamos a concatenar nossa tabela $msg .="<table class='table table-hover'>"; $msg .=" <thead>"; $msg .=" <tr>"; $msg .=" <th>#</th>"; $msg .=" <th>Nome:</th>"; $msg .=" <th>E-mail:</th>"; $msg .=" </tr>"; $msg .=" </thead>"; $msg .=" <tbody>"; //requerimos a classe de conexão require_once('class/Conexao.class.php'); try { $pdo = new Conexao(); $resultado = $pdo->select("SELECT * FROM cliente WHERE nome LIKE '$parametro%' ORDER BY nome ASC"); $pdo->desconectar(); }catch (PDOException $e){ echo $e->getMessage(); } //resgata os dados na tabela if(count($resultado)){ foreach ($resultado as $res) { $msg .=" <tr>"; $msg .=" <td>".$res['idCliente']."</td>"; $msg .=" <td>".$res['nome']."</td>"; $msg .=" <td>".$res['email']."</td>"; $msg .=" </tr>"; } }else{ $msg = ""; $msg .="Nenhum resultado foi encontrado..."; } $msg .=" </tbody>"; $msg .="</table>"; //retorna a msg concatenada echo $msg; ?>
Primeiro de tudo e mais importante, é primeira linha onde vamos receber nosso parâmetro vindo do form, importante que os nomes estejam certos para passagem correta de valores. Feito isso começamos a montar nossa tabela em uma variável concatenando ela, depois fazemos nossa conexão com nosso BD e verificamos se na tabela cliente existe um registro que tenha aquele parâmetro recebido, se existir ele resgata os valores da tabela do BD e add na tabela do HTML, caso não haja resultado, exibe uma mensagem de que não houve resultado na busca.
Alguns conceitos sobre classe, banco de dados não foram citados aqui pois o foco deste artigo não é esse, mas se houver dúvidas sobre o assunto acesse nossos artigos e leia um pouco a respeito e se precisar se aprofunde mais sua pesquisa para um bom entendimento.
Para baixar o exemplo funcional completo clique Aqui....
Dúvidas, críticas ou sugestões comentem abaixo, e bons estudos !!!
Gigasystems Login:
Informe seu e-mail abaixo para continuar!
XVeja Também:
Artigos Relacionados a categoria: PHP
Cotações para compra e venda de Moedas estrangeiras com PHP
27 July de 2016
Gerenciador de dependências Composer
14 January de 2016
Erro ao acessar um arquivo externo com o comando file_get_content
04 November de 2015
Baixando anexo do email no servidor com IMAP e PHP
27 August de 2015
Olá, deixe seu comentário para Pesquisa dinâmica com Ajax, Banco de Dados e PHP
Shimon Covitch
Mais estou tendo dificuldade em adpta-lo com meu código... como faço para substituir o input pelo select option no html como meu bloco de pesquisa.
Shimon Covitch
Mais tenho uma dúvida!
Olá pessoal! como faço isso substituindo o ""
para
Ana Carvalho
Everton José
...
pergunto isso para um outro sistema
Hans Designer
Segue abaixo:
if(isset($_POST['pesquisaCliente'])):
//recebemos nosso parâmetro vindo do form
$parametro = isset($_POST['pesquisaCliente']) ? $_POST['pesquisaCliente'] : null;
$msg = "";
//começamos a concatenar nossa tabela
$msg .="";
$msg .=" ";
$msg .=" ";
$msg .=" #";
$msg .=" Nome:";
$msg .=" E-mail:";
$msg .=" ";
$msg .=" ";
$msg .=" ";
//requerimos a classe de conexão
require_once('class/Conexao.class.php');
try {
$pdo = new Conexao();
$resultado = $pdo->select("SELECT * FROM cliente WHERE nome LIKE '$parametro%' ORDER BY nome ASC");
$pdo->desconectar();
}catch (PDOException $e){
echo $e->getMessage();
}
//resgata os dados na tabela
if(count($resultado)){
foreach ($resultado as $res) {
$msg .=" ";
$msg .=" ".$res['idCliente']."";
$msg .=" ".$res['nome']."";
$msg .=" ".$res['email']."";
$msg .=" ";
}
}else{
$msg = "";
$msg .="Nenhum resultado foi encontrado...";
}
$msg .=" ";
$msg .="";
//retorna a msg concatenada
echo $msg;
endif;
myguel abreu
João Rafael
lauri lourenco
Rodrigo Lima
Marcos Martins
Sim, você deve alterar para o nome do seu Banco Dados, senão ele não vai encontrar.
Rafaela Mania
Walter Quintela
Segui seu tutorial e deu tudo certinho, agradeço imensamente por sua colaboração.
Na hipótese de ter outro campo na tabela , "cidade", por exemplo, como eu faria para envia o nome da "cidade" , que seria capturado em um formulário hidden na página index e enviado junto com a pesquisa para página pesquisa.php para fazer o filtro no SELECT ?
gabriel moraes
gostaria de saber, como eu faria para acrescentar um botão logo apos tabela de e-mail. com algum tipo de opçao como por exemplo ver telefone?
Leonardo Martins
Ola Gabriel, que bom que gostou, para realizar esse procedimento é simples, basta adicionar mais uma TD na tabela e dentro dela seu botão, veja abaixo algo que possa te ajudar:
<td><span class="btn btn-default fa fa-envelop">Telefone</td>
Emerson Ribeiro
israel ruiz
Elvis Roberto da Silva
Leonardo Araujo
Sabe me informar onde posso encontrar um ótimo material sobre AJAX? E se puder me enviar vou agradecer demais. sleonardo.araujo95@gmail.com
Agradeço desde já.
ff ggg
Walter
Leonardo Martins
Qualquer dúvida estamos dispostos a ajudá-lo e bons estudos!
Marcos
Jefferson michel
Preciso que não mostre o dados da tabela logo de cara, preciso que mostre o dado pesquisado somente quando usuario apertar o ENTER. Me ajuda PF
Leonardo Martins
Ernesto
Leonardo Martins
Sobre sua dúvida é o seguinte a variável $uid você cria ela dentro for que ira verificar todas as mensagens em imap_num_msg, certo ? Ai essa variável é criada e ela representa o ID da mensagem na sua caixa de email, ou seja, você vai conseguir marcar como lido seu email através desse ID, e você obtém ele dessa maneira ---> $uid = imap_uid($mbox,$m); assim você além de controlar qual mensagem está manipulando na hora do evento, você também pode guarda-la em seu BD por algum motivo que venha utilizar, ou somente para registro ! Espero que tenha ficado claro, qualquer dúvida pergunte e tentaremos lhe ajudar!
André
Leonardo Martins
Jhony
Leonardo Martins
Henrique F Santos
Leonardo Martins
Saulo
mariana