[Update 29/04/2015]
O XAJAX está obsoleto. Veja a versão deste artigo utilizando JQuery, clicando aqui.
Olá pessoal. Farei esse artigo a pedido de uma sugestão e também por ser um assunto bem interessante e interativo. Veremos como atualizar um div de segundos em segundos, ou seja, a cada N segundos iremos colocar um valor em uma DIV. Bom, vamos lá.
Clique aqui para ver o projeto pronto
Irei utilizar como exemplo uma página que exibe frases sortidas (que estão no banco de dados) a cada 10 segundos. Para buscar os dados no banco a cada atualização utilizarei o framework XAJAX, por isso recomendo que você de uma olhada nesse artigo (caso não conheça o framework): Desenvolvimento interativo com o Framework XAJAX.
1. Banco de dados
Primeiramente vamos criar nossa tabela no banco de dados e inserir algumas frases:
CREATE TABLE IF NOT EXISTS `frases` ( `id` int(11) NOT NULL AUTO_INCREMENT, `frase` varchar(255) NOT NULL, `autor` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; INSERT INTO `frases` (`id`, `frase`, `autor`) VALUES (1, '"Os homens erram, os grandes homens confessam que erraram."', 'Voltaire'), (2, '"O que sabemos é uma gota, o que ignoramos é um oceano."', 'Isaac newton'), (3, '"Penso, logo existo."', 'René Descartes'), (4, '"Educai as crianças, para que não seja necessário punir os adultos."', 'Pitágoras'), (5, '"Todo o homem é culpado do bem que não fez."', 'Voltaire'), (6, '"A natureza fez o homem feliz e bom, mas a sociedade deprava-o e torna-o miserável."', 'Jean Jacques Rosseau');
Criamos uma tabela com três campos: a id da frase¹, a frase² e o autor da frase³.
2. PHP/XAJAX
Agora nós precisamos criar a função XAJAX responsável pela busca das frases no banco de dados:
<?php // Conexão com o banco de dados $conn = mysql_connect("localhost", "usuario", "senha"); $db = mysql_select_db("banco", $conn); // Incluindo a biblioteca do xajax require_once("xajax/xajax_core/xajax.inc.php"); // Instanciamos a classe $xajax = new xajax(); // Registramos a função atualizar() $xajax->registerFunction("atualizar"); // Criamos a função atualizar(), que será responsável por atualizar a div function atualizar() { //Instância do objeto de resposta do Ajax $objResponse = new xajaxResponse(); // Buscamos uma frase $query = mysql_query("SELECT * FROM frases"); // Verificamos o número de frases $numFrases = mysql_num_rows($query); // Sorteamos uma frase $sortido = rand(0, $numFrases - 1); // Frase sortida $frase = mysql_result($query, $sortido, 1); // Autor da frase sortida $autor = mysql_result($query, $sortido, 2); // Construimos a resposta $resposta = "<i>" . $frase . "</i><br />" . $autor; // Colocamos a frase e seu respectivo autor na div $objResponse->assign("frase", "innerHTML", $resposta); // Devolve a resposta para a página return $objResponse; } // Função para processar as requisições (indispensável) $xajax->processRequest(); ?>
Legal. Agora vamos construir a base de nossa página, que deve conter a div com id igual a “frase”, pois a resposta do XAJAX será devolvida nessa div:
<html> <head> <title>Frases sortidas: Atualizar DIV de segundos em segundos com PHP/XAJAX</title> </head> <body onload="xajax_atualizar()"> <h1>Frases sortidas</h1> <div id="frase"></div> </body> </html>
Perceba que no código acima, na tag body, chamamos a função xajax_atualizar() no evento onload, ou seja, quando carregar a página, se isso não for feito, a página terá de esperar 10 segundos para chamar a função e a frase não apareceria no início.
O framework XAJAX requer a impressão do código javascript, sendo assim, chamamos a seguinte no cabeçalho (head):
<?php // Método para que seje gerado as funções javascript do XAJAX $xajax->printJavascript("xajax/"); ?>
E finalmente iremos utilizar a função javascript que vai fazer o trabalho de atualizar a div para nós:
<script language="javascript" type="text/javascript"> // Chamamos a função criada com XAJAX a cada 10 segundos setInterval("xajax_atualizar()", 10000); </script>
No código javascript acima nós utilizamos a função setInterval() que chama alguma função em um determinado intervalo de tempo (em milésimos); No nosso caso, iremos chamar a função atualizar() criada com XAJAX, ou seja, xajax_atualizar() a cada 10000 milésimos, ou seja, 10 segundos.
Bom então nosso projeto fica da seguinte maneira:
<?php // Conexão com o banco de dados $conn = mysql_connect("localhost", "usuario", "senha"); $db = mysql_select_db("banco", $conn); // Incluindo a biblioteca do xajax require_once("xajax/xajax_core/xajax.inc.php"); // Instanciamos a classe $xajax = new xajax(); // Registramos a função atualizar() $xajax->registerFunction("atualizar"); // Criamos a função atualizar(), que será responsável por atualizar a div function atualizar() { //Instância do objeto de resposta do Ajax $objResponse = new xajaxResponse(); // Buscamos uma frase $query = mysql_query("SELECT * FROM frases"); // Verificamos o número de frases $numFrases = mysql_num_rows($query); // Sorteamos uma frase $sortido = rand(0, $numFrases - 1); // Frase sortida $frase = mysql_result($query, $sortido, 1); // Autor da frase sortida $autor = mysql_result($query, $sortido, 2); // Construimos a resposta $resposta = "<i>" . $frase . "</i><br />" . $autor; // Colocamos a frase e seu respectivo autor na div $objResponse->assign("frase", "innerHTML", $resposta); // Devolve a resposta para a página return $objResponse; } // Função para processar as requisições (indispensável) $xajax->processRequest(); ?> <html> <head> <title>Frases sortidas: Atualizar DIV de segundos em segundos com PHP/XAJAX</title> <?php // Método para que seje gerado as funções javascript do XAJAX $xajax->printJavascript("xajax/"); ?> <script language="javascript" type="text/javascript"> // Chamamos a função criada com XAJAX a cada 10 segundos setInterval("xajax_atualizar()", 10000); </script> </head> <body onload="xajax_atualizar()"> <h1>Frases sortidas</h1> <div id="frase"></div> </body> </html>
Clique aqui para fazer download do projeto
Bom pessoal, espero que vocês tenham entendido e que esse artigo possa ser útil a você. Qualquer dúvida entre em contato através de email ou comentário.
Abraços.