
09/01/2003 - Sessões em ASP.NET
07/06/2004 - Boleto Bancário em PHP ou ASP
09/01/2003 - Como arredondar os cantos de uma foto
20/01/2003 - Quanto custa um click?
09/01/2003 - Criar um Recordset
04/05/2005 - Tratamento de CPF e CNPJ
04/05/2005 - Centralizar usando CSS
21/01/2003 - Fireworks VS Photoshop
06/11/2006 - Como bloquear o evento disparado pela tecla Print Screen
08/04/2006 - Oracle Database 10g Release 2
11/04/2006 - Curriculo 10
17/05/2004 - Como fazer e modificar calendários
07/12/2003 - Action Script 2.0 ( Primeira Parte )
09/01/2003 - Como simular objetos 3D simples
Leituras: 19494 - Fábio Berbert de Paula
Introdução
Quando resolvi lançar uma versão mais robusta do Viva o Linux, umas das primeiras coisas em que pensei foi num sistema de banners rotativos. Uma vez lançado o site, acreditava que em pouco tempo já teriam se firmado algumas parcerias para troca ou venda de banners e para não me limitar a apenas um banner fixo nas páginas, um esquema de rotatividade seria necessário.
Sendo assim, segui a seguinte lógica de raciocínio: se tenho dois banners e um acabou de ser exibido, a próxima pageview do site deve mostrar o segundo banner. Eventualmente o parceiro/cliente pode querer estatísticas, então tenho que saber quantas vezes o banner foi exibido e quantas vezes foi clicado.
Ao analisar o estudo de caso decidi que o melhor esquema para a solução seria a utilização de programas PHP armazenando dados sobre o banner em tabelas do MySQL. Nas próximas páginas vamos descobrir como o sistema funciona na prática.Criando a tabela banner no MySQL
Após análise, eis a lista do que achei que seria necessário armazenar em banco de dados:
Logo podemos chegar à seguinte estrutura para nossa tabela, batizada de banner:
- Imagem do banner
- URL do site
- Número de pageviews (exibições)
- Número de cliques (visitas)
- Texto alternativo (propriedade alt da tag img)
- Se o banner está habilitado ou não
+--------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+----------------+
| codigo | int(11) | | PRI | NULL | auto_increment |
| url | varchar(80) | | | | |
| foto | varchar(50) | | | | |
| hits | int(11) | YES | | 0 | |
| clicks | int(11) | YES | | 0 | |
| alt | varchar(80) | YES | | NULL | |
| ativo | enum('0','1') | YES | | 0 | |
+--------+---------------+------+-----+---------+----------------+E a seguir o código SQL usado para criá-la no MySQL:
CREATE TABLE banner (
codigo int(11) NOT NULL auto_increment,
url varchar(80) NOT NULL default '',
foto varchar(50) NOT NULL default '',
hits int(11) default '0',
clicks int(11) default '0',
alt varchar(80) default NULL,
ativo enum('0','1') default '0',
PRIMARY KEY (codigo)
) TYPE=MyISAMExecute a cláusula acima no prompt do seu MySQL e zé fini, vamos à implementação do sistema. :)
Cadastrando um banner no sistema
O processo de cadastramento de banner no sistema exige dois passos.
- Cópia da imagem do banner para o diretório de imagens
- Inserção do registro do banner no MySQL
Cópia da imagem do banner para o diretório de imagens
Supondo que o diretório que escolhi para ser meu repositório de banners chama-se ./imagens/banners/ e meu primeiro banner possui uma imagem chamada banner01.gif, basta copiar a imagem sugerida para o diretório escolhido.
Inserção do registro do banner no MySQL
Uma vez que sabemos o nome da imagem do banner, podemos inserir um registro usando a seguinte cláusula SQL:INSERT INTO banner (url, foto, alt, ativo) VALUES ('http://www.agatetepe.com.br', 'banner01.gif', 'O seu site de tutoriais', '1')
A linha acima vai cadastrar um banner para o site www.agatetepe.com.br, divulgado pela imagem banner01.gif, com o texto "O seu site de tutoriais" e ativo (1). O número de hits e de clicks são inicializados por padrão com o valor 0 (zero).Exibindo o banner e contabilizando os pageviews
Agora que já alimentamos nosso banco de dados com os banners, vamos adicionar código PHP para buscar os dados e exibi-los no browser do usuário.
Neste exemplo vamos criar uma página index.php com apenas o banner como conteúdo. Quando você for usar este código, pode adicionar o resto do conteúdo da página misturado com o código a seguir naturalmente.<? /*
Estou partindo do princípio que você possui uma variável $con que é um
link identificador com sua conexão com o banco de dados, retornada pela
função mysql_connect(). */
// capturar banner
$query = "SELECT codigo, foto, alt, hits FROM banner
WHERE ativo='1'
ORDER BY hits LIMIT 1";
list ($banner_codigo, $banner_foto, $banner_alt, $banner_hits) = mysql_fetch_array(mysql_query($query,$con));
$banner_hits++;
// atualizar hits do banner
$update = "UPDATE banner SET hits=$banner_hits WHERE codigo=$banner_codigo";
mysql_query($update,$con);
echo "<a href='verBanner.php?codigo=$banner_codigo' alt='$banner_alt'><img src='./imagens/banners/$banner_foto' border=0></a>";
?>Notaram o detalhe do código acima ? O link para o banner aponta para um segundo script, o verBanner.php, que será o responsável pela contabilização do número de cliques no banner e em seguida pelo redirecionamento para a página em questão. Lembre-se que a variável hits corresponde ao número de pageviews do banner e não ao número de vezes que ele foi clicado.
Contabilizando o número de cliques e redirecionando para a URL
Por fim, o programa verBanner.php, que recebe como parâmetro o código do banner na tabela do MySQL, contabiliza o clique e redireciona o browser para a URL relacionada.
/*
Estou partindo do princípio que você possui uma variável $con que é um
link identificador com sua conexão com o banco de dados, retornada pela
função mysql_connect(). */
// recebe codigo do banner
$query = "SELECT clicks, url FROM banner WHERE codigo=$codigo";
list ($clicks, $url) = mysql_fetch_array(mysql_query($query,$con));
$clicks++;
$update = "UPDATE banner SET clicks=$clicks WHERE codigo=$codigo";
mysql_query($update,$con);
header("Location: $url"); // redirecionar p/ url Ficou claro pessoal ? Espero que esse artigo possa vir a ser útil à alguém. Vou ficando por aqui, have fun !!!
Atenciosamente,
Fábio Berbert de Paula
fabio@vivaolinux.com.br