Palavra:   

Revista PHP / AJAX

Eliano Estevam

Desenvolvedor Web, trabalhando atualmente na empresa VTI, www.vti.com.br. Cursando o curso de Sistemas de Iinformação na Universidade Integrada do Ceará. Experiência de 2 anos no desenvolvimento de sistemas na linguagem PHP com OO.

Listando dados com Ajax usando Prototype e PHP

Nessa artigo irei mostrar como listar dados de um banco de dados MySql usando Ajax com a Framework Javascript Prototype.

Prototype
é uma Framework Javascript que facilita o desenvolvimento de sistemas web dinâmicos.

Nesse artigo iremos realizar 5 etapas:
1- Criação do banco dados;
2- Fazer o download da Framework Javascript Prototype;
3- Criação da classe de conexão com o banco;
4- Criação dos arquivos que irá realizar a busca dos registros no banco.
5- Criação do arquivo que irá listar os registros;

ETAPA 1:
Nessa primeira etapa iremos realizar a criação do banco de dados. Utilizaremos como exemplo um banco, nomeado CLIENTE e uma tabela nomeada TBCLIENTE. A tabela irá conter os seguintes campos:
    - id
    - nome
    - email

Acesse o gerenciador de banco de dados PHPMYADMIN. No campo CRIAR NOVO BANCO DE DADOS digite Cliente e clique o botão CRIAR
:
Ainda no PHPMYADMIN clique a opção SQL. Digite os códigos abaixo e clique o botão EXECUTAR. Isso fará com que a tabela seja criada.

SQL
  1. CREATE TABLE IF NOT EXISTS `tbCliente` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `nome` varchar(50) NOT NULL,
  4. `email` varchar(50) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=latin1
www.revistaphp.com.br

Execute também as linhas abaixo para inserir alguns dados no banco.
SQL
  1. INSERT INTO tbCliente (nome, email) VALUES
  2. ('Cliente de Teste 1', 'cliente1@cliente.com.br'),
  3. ('Cliente de Teste 2', 'cliente2@cliente.com.br'),
  4. ('Cliente de Teste 3', 'cliente3@cliente.com.br'),
  5. ('Cliente de Teste 4', 'cliente4@cliente.com.br'),
  6. ('Cliente de Teste 5', 'cliente5@cliente.com.br'),
  7. ('Cliente de Teste 6', 'cliente6@cliente.com.br'),
  8. ('Cliente de Teste 7', 'cliente7@cliente.com.br'),
  9. ('Cliente de Teste 8', 'cliente8@cliente.com.br');
www.revistaphp.com.br
ETAPA 2:
Nessa etapa iremos realizar o download da Framework Javascript Prototype.
Inicialmente crie uma pasta no seu web server(APACHE ou ISS), diretório onde será colocado os arquivos do sistema. Por exemplo:
C:\Arquivos de programas\Apache Group\Apache2\htdocs\Cliente

Acesse o endereço http://www.prototypejs.org/download e baixe o arquivo prototype.js. Salve esse arquivo na pasta Cliente criada anteriormente.

ETAPA 3:
Iremos nessa etapa criar a classe de conexão com o banco de dados.
No diretório criado no web server, crie um diretório chamado db. Como mostra a imagem abaixo.


Crie nesse diretório um arquivo nomeado com db.php. Copie nesse arquivo as linhas abaixo. Observe o comentário em cada linha.
PHP
  1. <?php
  2. /*
  3. Classe para conexão em MySQL
  4. */
  5. class db{
  6.  
  7. // Host
  8. var $host = "localhost";
  9. // Usuário de conexão
  10. var $user = "root";
  11. // Senha para conexão
  12. var $pass = "";
  13. // Banco de dados
  14. var $db = "Cliente";
  15.  
  16. // Função para abrir o banco de dados
  17. function open()
  18. {
  19. // conecta o mysql
  20. $conn = mysql_connect($this->host,$this->user,$this->pass) or die ("<br><br><center>Problemas ao conectar no servidor: " . mysql_error() . "</center>");
  21. // seleciona o banco de dados
  22. mysql_select_db($this->db) or die ("<br><br><center>Problemas ao selecionar a base de dados do sistemas: " . mysql_error() . "</center>");
  23. return $conn;
  24. }
  25. //Função de fechamendo do banco
  26. function close($conn)
  27. {
  28. mysql_close($conn);
  29. }
  30. }
  31. ?>
www.revistaphp.com.br
ETAPA 4:
Nessa etapa iremos criar os arquivos que irá buscar os registros no banco. É necessário a criação de dois arquivos:
    - Cliente.php
    - Cliente.js

Iniciaremos pela criação do arquivo Cliente.php. Acesse o diretório criado no web server, no caso C:\Arquivos de programas\Apache Group\Apache2\htdocs\Cliente e crie o arquivo Cliente.php. Copie nesse arquivo as linhas abaixo. Observe o comentário em cada linha.
PHP
  1. <?php
  2.  
  3. // Importando a classe de conexão
  4. require_once("db/db.php");
  5.  
  6. // Instanciando a classe de conexão
  7. $db = new db();
  8. // Abrindo o banco de dados
  9. $con = $db->open();
  10. // Select, trazendo os dados da tabela de Cliente. O código $_POST['nome'] contém o valor da busca
  11. $sql = "SELECT * FROM tbCliente WHERE nome LIKE '%" . $_POST['nome'] . "%'";
  12. // Executa o sql
  13. $query = mysql_query($sql);
  14.  
  15. // Verificando se há registros
  16. if(mysql_num_rows($query)){
  17.  
  18. // Montando o XML com os registros do banco
  19. header("Content-type: application/xml charset=iso-8859-1");
  20. $xml="<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>";
  21.  
  22. $xml.="<dados>";
  23.  
  24. // Definindo as colunas da tabela de listagem dos registros
  25. $xml.= "<cabecalho>";
  26. $xml.= "<coluna>Código </coluna>";
  27. $xml.= "<coluna>Nome </coluna>";
  28. $xml.= "<coluna>email </coluna>";
  29. $xml.= "</cabecalho>";
  30.  
  31. // Montando o corpo da tabela
  32. while ($dados = mysql_fetch_array($query)){
  33. $xml.="<registro>";
  34. $xml.= "<item>".$dados['id']."</item>";
  35. $xml.= "<item>".$dados['nome']."</item>";
  36. $xml.= "<item>".$dados['email']."</item>";
  37. $xml.="</registro>";
  38. }
  39.  
  40.  
  41. //fim da tabela
  42. $xml.="</dados>";
  43. }else{
  44. header("Content-type: application/xml");
  45. $xml="<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>";
  46. }
  47.  
  48. // Retornando o XML com os registros do banco
  49. echo $xml;
  50.  
  51. // Fechando o banco
  52. $db->close($con);
  53. exit();
  54.  
  55. ?>
www.revistaphp.com.br
Iremos criar o arquivo Cliente.js. Acesse o diretório criado no web server, no caso C:\Arquivos de programas\Apache Group\Apache2\htdocs\Cliente e crie o arquivo Cliente.js. Copie nesse arquivo as linhas abaixo. Observe o comentário em cada linha.

Cliente.js
JS
  1. // Função de crição da tabela de listagem de clientes
  2. function createGrid(nome)
  3. {
  4. if(nome == null)
  5. nome = "";
  6.  
  7. var url = 'Cliente.php';
  8. var parametros = 'nome='+nome;
  9. var myAjax = new Ajax.Request( url, { method: 'post', parameters: parametros, onLoading: carregando, onComplete: escreve});
  10. }
  11. // Função de pesquisa
  12. function pesquisar() {
  13. // Passando como parâmetro o valor do campo pesq_nome do formulário de pesquisa
  14. createGrid( $("pesq_nome").value );
  15. }
  16. // Função de exibição de imagem de processamento
  17. function carregando()
  18. {
  19. $("msg").style.display="block";
  20. $("msg").innerHTML="<img src='ajax-loader.gif'>";
  21. }
  22. // Escreve a tabela de listagem de clientes
  23. function escreve(request)
  24. {
  25. $("msg").style.display="none";
  26.  
  27. var xmldoc=request.responseXML;
  28. var cabecalho = xmldoc.getElementsByTagName('cabecalho')[0];
  29.  
  30. if(cabecalho!=null) {
  31.  
  32. var coluna = cabecalho.getElementsByTagName('coluna');
  33. var tabela="<table width='100%' border='0'><tr bgcolor='#666666'>"
  34.  
  35. //cabecalho da tabela
  36. for(i=0;i<coluna.length;i++){
  37. tabela+="<td><b><font color='#FFFFFF'>"+coluna[i].firstChild.data+"</font></b></td>";
  38. }
  39. tabela+="</tr>"
  40. //corpo da tabela
  41. var registros = xmldoc.getElementsByTagName('registro');
  42.  
  43. for(i=0;i<registros.length;i++){
  44. var itens = registros[i].getElementsByTagName('item');
  45. tabela+="<tr id=linha"+i+" bgcolor='#DDDDDD'>";
  46. for(j=0;j<itens.length;j++){
  47. if(itens[j].firstChild==null){
  48. tabela+="<td></td>";
  49. }else{
  50. tabela+="<td>" + itens[j].firstChild.data + "</td>";
  51. }
  52. }
  53. tabela+="</tr>";
  54. }
  55. tabela+="</table>";
  56. $("listagem").innerHTML=tabela;
  57. tabela=null;
  58. }else{
  59. $("listagem").innerHTML="<div align='center'>Não há registros...</div>";
  60. }
  61. }
www.revistaphp.com.br
ETAPA 5:
Nessa etapa iremos criar o arquivo que irá listar os dados do banco em uma tabela. Acesse o diretório criado no web server, no caso C:\Arquivos de programas\Apache Group\Apache2\htdocs\Cliente e crie o arquivo Lista.php. Copie nesse arquivo as linhas abaixo. Observe o comentário em cada linha.

PHP
  1. <title>Listagem de Clientes</title>
  2. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  3. <!-- Importando a biblioteca javascript de clientes -->
  4. <script language="javascript" src="Cliente.js"></script>
  5. <!-- Importando a biblioteca javascript Prototype -->
  6. <script language="javascript" src="prototype.js"></script>
  7. </head>
  8.  
  9. <!-- Na inicialização da página é executada a função createGrid. Essa função cria a tabela de listagem com os dados do banco -->
  10. <body onLoad="javascript:createGrid();">
  11. <!-- Imagem de animação do processamento -->
  12. <div id='msg' style='display:none; position:absolute; left: 274px; top: 13px; width: 109px; height: 27px;'></div>
  13. <table width="100%" border="0">
  14. <!-- Formulário de pesquisa -->
  15. <form action="" method="post">
  16. Nome: <input type="text" id="pesq_nome" onKeyUp=”javascript: pesquisar (this.value);”>
  17. <input type="button" name="Button" value="Buscar" onClick="javascript:pesquisar();">
  18. </form>
  19. </td>
  20. </tr>
  21. <!-- Camada onde será mostrada a tabela de listagem -->
  22. <div id="listagem"></div>
  23. </td>
  24. </tr>
  25. </table>
  26. </body>
  27. </html>
www.revistaphp.com.br
Para finalizar, acesse o endereço http://www.fortalveiculos.com.br/ajax-loader.gif e baixe a imagem ajax-loader.gif. Salve a imagem no mesmo diretório dos arquivos do sistema.

Pronto, finalizamos. Acesse o endereço local, http://localhost/cliente/Lista.php, pelo browser e veja o resultado.

Visualize a demonstração no endereço:
http://www.fortalveiculos.com.br/Cliente/Lista.php

Abraços, e até o próximo artigo.

Opções de Interação

Comentários

Não funciona
Por: Janderson, 16/06/2010   16:44:46
Olha essa parte:

if(mysql_num_rows($query)){

Tem que comparar com algo! Porque o que é retornado é um número!

O certo é: if(mysql_num_rows($query)>1)

Fiz essa alteração mas mesmo assim nada funcionou.
Não funciona.
Por: Magno, 06/02/2010   08:48:08
O meu só aparece " Não há registro".
Me ajude, por favor?!
magno_brazil@hotmail.com
Ótimo
Por: Charles, 19/04/2009   13:55:23
Muito bom esse tutorial, consegui fazer o que precisava e ainda consegui adaptar para minha página, parabéns
Algo parecido
Por: marcelo, 28/11/2008   08:41:06
Ola amigo
entao eu queria aprender algo parecido, fiz uma loja virtual em ajax, so q quando lista os meus produtos do banco de dados fica um emcima do outro, quero aprender como lista-los de acordo com a layout q to fazendo q seria os produtos um do lado do outro no caso do meu?????
Não esta funfando..
Por: Alysson, 26/02/2008   08:10:59
Amigo Eliano, fiz conforme manda o figurino descrito pelo senhor, porém não tive sucesso na execução.

Na página Lista.php surge a seguinte mensagem: ""Não há registros..."", a conexão esta correta, tentei de outra forma mais ainda não tive sucesso.
poderia entrar em contato comigo para verificarmos esse pequeno problema. Desde já agradeço sua atenção.

alyssonbsb@gmail.com =D
o artigo é ótimo!!! Mas, não ta funcionando comigo
Por: Paulo, 29/01/2008   16:14:12
primeiro qdo digito um nome e mando pesquisar clicando no botão "buscar" ele não tem ação alguma, se digito um nome e dou "enter" ele chama a página cliente.php mas sempre da erro na primeira linha que tenha qualquer comando, no caso "require_once("db/db.php");"... para testar eliminei a linha e coloquei o código do db.php... sempre o mesmo erro, objeto inesperado... o que será que estou fazendo de errado, apenas copiei o código??
Muito bom!!!
Por: sandro, 08/12/2007   10:44:50
Bacana esse artigo, parabéns!
Nota 10!

[]s