+4

Um sistema simples de banner rotativo em PHP/MySQL

criado por Rodrigo Romano Moreira em 29/09/2002 11:23pm
Ultimamente tenho notado em listas de discussão ou em fóruns sobre PHP, pessoas em busca de sistemas de banner rotativo. Esse artigo disponibiliza o código de um simples sistema de banner rotativo em MySQL. Ele é pequeno e fácil de entender.


Para começar crie uma tabela no MySQL com a seguinte estrutura :

CREATE TABLE banner (
   codigo int(11) NOT NULL auto_increment,
   url char(255),
   grafico char(255),
   exibicoes int(11),
   clicks int(11),
   maxexib int(11),
   data datetime,
   PRIMARY KEY (codigo)
);

Depois crie um arquivo com as suas configurações no MySQl , chamado config.php :

<?php
$host = "localhost"; // host do MySQL
$user = "root"; // id do usuario do MySQL
$pass = ""; // senha do usuario no MySQL
$database = "banner"; // database do usuario no MySQl
?>

Para inserir seus banner (a url da página alvo, a url da figura e o numero máximo de exibições), crie um arquivo insere.php com o seguinte conteúdo:

<?php
include("config.php");

if (isset($submit)) {
   $data = date("y:m:d h:i:s");
   $conn = mysql_connect($host, $user, $pass);
   mysql_select_db($database);
   $insere = "INSERT INTO banner (url, grafico, exibicoes, clicks, maxexib, data) 
   VALUES ('$link', '$imagem', 0, 0, '$max', '$data')";
   mysql_query($insere, $conn);
   mysql_close($conn);
?>

<input type="submit" value="Fechar" name="submit" onClick='javascript: self.close();'>
<?php
} else {
?>
<form method="POST" action="insere.php">
  <table align="center" border="1"  bordercolor="#000000" cellspacing="0" cellpadding="0">
    <tr>
      <td>
        <table border="0">
          <tr>
            <td colspan="2" bgcolor="#219CDE">
              <p align="center">Adicionar novo banner</td>
          </tr>
          <tr>
            <td>Link(Url):</td>
            <td width="50%"><input type="text" name="link" size="40"></td>
          </tr>
          <tr>
            <td>Imagem(Url):</td>
            <td width="50%"><input type="text" name="imagem" size="40"></td>
          </tr>
          <tr>
            <td>Número de exibições:</td>
            <td width="50%"><input type="text" name="max" size="40"></td>
          </tr>
          <tr>
            <td colspan="2">
              <p align="center"><input type="submit"
              value="Enviar" name="submit"></td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
</form>
<?php
}
?>

Para exibir os seus banners, você primeiro deve criar um arquivo chamado exibe.php com o seguinte conteúdo:

<?php
include("config.php");

$conn = mysql_connect($host, $user, $pass);
mysql_select_db($database);

// a clasula ORDER by RAND() é responsável pela rotação do banner.
// note que maxexib é igual a zero, ele não é exibido
$query = "SELECT * FROM banner WHERE maxexib > 0 ORDER by RAND() LIMIT 1";
$consulta = mysql_query($query, $conn);
$linha = mysql_fetch_row($consulta);

$linha[5] -= 1;
$linha[3] += 1;

// subtrai menos 1 ao campo maxexib
$update = "UPDATE banner SET maxexib=$linha[5] WHERE codigo='$linha[0]'";
mysql_query($update, $conn);

// adiciona mais 1 ao campo exibicoes
$update2 = "UPDATE banner SET exibicoes=$linha[3] WHERE codigo='$linha[0]'";
mysql_query($update2, $conn);

mysql_close($conn);

// imprime o banner ,que vai ser usado no javascript
echo "document.write(\"<a href=/banner/conta_click.php?id=$linha[0] target=_blank><img border=0 src=$linha[2] width=468 height=60></a>  \");";
?>

Após ter criado o arquivo exibe.php , crie uma javascript na página onde seus banners vão ser exibidos ,com a seguinte estrutura:

<SCRIPT LANGUAGE="JavaScript" SRC="http://www.suapagina.com/exibe.php"></SCRIPT>

Um pequeno exemplo: Vamos dizer que o exibe.php tem esse caminho em sua página, www.romano.com.br/exibe.php (infelizmente, não existe essa página). Para inserir o javascript no html é só fazer isso:

<html>
<head>
<title>Teste do banner</title>
</head>
<body>
<p>Esse é seu banner </p>
<SCRIPT LANGUAGE="JavaScript" SRC="http://www.romano.com.br/exibe.php"></SCRIPT>
</body>
</html>

Para registrar os clicks em seus banners e redirecionar para a página alvo, crie um arquivo chamado conta_click.php com seguinte con
teúdo:

<?php
include("config.php");

$conn = mysql_connect($host, $user, $pass);
mysql_select_db($database);

$query = "SELECT * FROM banner WHERE codigo=$id LIMIT 1";
$consulta = mysql_query($query, $conn);
$linha = mysql_fetch_row($consulta);

$linha[4] += 1;

// adiciona mais 1 ao campo clicks
$update = "UPDATE banner SET clicks=$linha[4] WHERE codigo='$linha[0]'";
mysql_query($update, $conn);

mysql_close($conn);

// redireciona para página alvo do banner
header("Location: $linha[1]");
?>

Para encerrar vamos criar um script para administrar seus banners com nome de admin.php. Lá você obterá as seguintes informações: Código do banner, estatísticas de exibições, se o banner está ativo (maxexib maior que 0), data de criação e a opção de remover(ou criar) banners. O código do admin.php é o seguinte:

<input type="submit" value="Inserir novo Banner" name="submit" onClick='javascript: window.open("insere.php","","width=450,heigth=100,toolbar=no");'>
<?php
include("config.php");

$conn = mysql_connect($host, $user, $pass);
mysql_select_db($database);

if (isset($submit)) {
   $delete = "DELETE FROM banner WHERE codigo = $id";
   mysql_query($delete, $conn);
}

$query = "SELECT * FROM banner ORDER by codigo ASC";
$consulta = mysql_query($query, $conn);

while ($linha = mysql_fetch_row($consulta)) {
?>
<p> </p>
<table border="1" bordercolor="#000000" cellspacing="0" cellpadding="0">
  <tr>
    <td width="100%">
      <p align="left">Código : <?php echo $linha[0]; ?>
      <p>Link : <a href="<?php echo $linha[1]; ?>"><?php echo $linha[1]; ?> </a></p>
      <p>Imagem :<img border="0" src="<?php echo $linha[2]; ?>" width="468" height="60"></p>
      <p>Exibições :<?php echo $linha[3]; ?></p>
      <p>Clicks :<?php echo $linha[4]; ?> </p>
      <p>Porcentagem(Clicks por exibições) : 
      <?php echo round(($linha[4]/$linha[3])*100,2); ?>%</p>
      Data  de criação :<?php echo $linha[6]; ?>
      <p>Status :<?php if ($linha[5] != 0) { ?>Ativo<?php } else { ?>Inativo<?php } ?></p>
      <form method="POST" action="admin.php?id=<?php echo $linha[0]; ?>">
         <center>
         <input type="submit" value="Remover" name="submit">
         </center>
      </form>
    </td>
  </tr>
</table>
<?php
}
mysql_close($conn);
?>

Rodrigo Romano Moreira

Comentários:

Mostrando 1 - 10 de 30 comentários
Celio Ricardo disse:
<SCRIPT LANGUAGE="JavaScript" SRC="http://www.suapagina.com/exibe.php"></SCRIPT>

O script acima da um erro e não carrega os banners

Para funcionar coloque um include 'exibe.php'; ou um iframe
<iframe src='http://nome do site.com/banner/exibe.php' scrolling='no' frameborder='0' width=150 height='200' marginheight='0' marginwidth='0'></iframe>
Irá funcionar corretamente.
Está dando um erro no arquivo conta_click.php
basta adicionar '' no id $id = $_GET[id];
ficando assim $id = $_GET['id'];
18/08/2010 2:33am (~14 anos atrás)

Igor Diniz disse:
ta aí o código do install funciona :)

<instalar.php>
<?php
/*
<instalar.php>
cria as tabelas no servidor MySQL.
</instalar.php>
*/
include("configi.php");
$instala = @mysql_query("
CREATE TABLE banner (
codigo int(11) NOT NULL auto_increment,
url char(255),
grafico char(255),
exibicoes int(11),
clicks int(11),
maxexib int(11),
data datetime,
PRIMARY KEY (codigo)
)
");
if($instala){ ?><title>SISTEMA DE BANNER - INSTALA&Ccedil;&Atilde;O</title>
<p><font face="Arial"><font size="4">SISTEMA DE BANNERS &gt;&gt; Instalando...</font></font></p>
<p align="left"><font face="Arial" size="2">Criação da tabela... <font color="#008000">SUCESSO!<br>
</font>
Agora, <a href="admin.php">clique aqui</a> e entre na administração,
com login e senha setados no config.php.</font></p>
<p align="right">&nbsp;</p>
<?php
}
else {
$erro = mysql_error();
$erro = str_replace("No Database Selected","001: O banco de dados não foi selecionado.",$erro);
$erro = str_replace("Table 'banners' already exists","002: A tabela já foi criada!",$erro);
?>
<p><font face="Arial"><font face="Arial"><font size="4">SISTEMA DE BANNERS
</font>
</font><font size="4">&gt;&gt; Instalando...</font>
</font></p>
<p align="left"><font face="Arial" size="2">Criação da tabela... <font color="#FF0000">FALHA</font><font color="#FF0000">!</font><font color="#008000"><br>
<BR></font>
Motivo:<br>
</font><font face="Courier New" size="2"><?=$erro?></font></p>
<p align="right">&nbsp;</p>
<?php
}
?>
<p align="right"><a href="http://infostrike.org"><font color="#000000" size="1" face="Arial, Helvetica, sans-serif">INSTALA&Ccedil;&Atilde;O
BY IGOR DINIZ
</font></a></p>
</instalar.php>

ta ai!!! mas como eu resolvo o problema das exibições tipo eu coloco 10 exibições e enquanto num aparece dez vezes ele num troca rsrs....
10/07/2006 7:48am (~18 anos atrás)

Tomaz disse:
Estava dando alguns problemas com o redirecionamento onde o erro constava como do "mysql_fetch_row" da pagina conta_click.php... para solucionar basta adicionar a linha:

$id = $_GET[id];

o codigo da página corrigida segue abaixo:

<?php
include("config.php");

$conn = mysql_connect($host, $user, $pass);
mysql_select_db($database);

//pega o id do banner
$id = $_GET[id];

$query = "SELECT * FROM banner WHERE codigo=$id LIMIT 1";
$consulta = mysql_query($query, $conn);
$linha = mysql_fetch_row($consulta);

$linha[4] += 1;

// adiciona mais 1 ao campo clicks
$update = "UPDATE banner SET clicks=$linha[4] WHERE codigo='$linha[0]'";
mysql_query($update, $conn);

mysql_close($conn);

// redireciona para página alvo do banner
echo "<meta http-equiv='refresh' content='0;URL=$linha[1]'>";
?>
04/01/2006 5:27am (~19 anos atrás)

Michel Gomes disse:
Sim Flávio claro !!

Infelismente uma junção de falta de tempo com problemas pessoais ainda não consegui fazer uma nova versão desse Script e colocar aqui pra a galera !!

Na verdade o que eu fiz foi criar um novo campo, "tipo" na hora do cadastro seleciono por uma combo box o tipo do arquivo GIF (que serve pra PNG,JPG,etc...) ou SWF (Flash).

Isso é jogado no banco de dados que na hora da exibição verifica o campo "tipo" e dependendo dele da a saida de dados diferente se imagem normal <img scr blabla> se for flash <object blablabla>.

Bom é isso, abraços ....
18/07/2005 7:51pm (~19 anos atrás)

Michel, como vc consegui colocar banners em flash? Rola de vc falar o que fez?

Grande abraço.

Flávio Leonardo
12/07/2005 11:36am (~19 anos atrás)

Michel Gomes disse:
Ae pessoal...consegui o que queria !! uhehue, com base nesse script, fiz outro com a opção de cadastrar tanto flash quantogif !!

Dps que melhorar ele todo colocoai pro pessoal !!

Abs
10/06/2005 12:15am (~19 anos atrás)

Michel Gomes disse:
Fala galera beleza ?

Tipo consegui mudando no código resolver alguns problemas que tava acontecendo e meio que personalizando ele da melhor forma pra mim, tipo com relação ao redirecionamento dêem uma olhada se na hora de cadastrar vcs não estão apenas colocando www.nomedosite.com, a forma correta de se colocar é com HTTP, http://www.nomedosite.com.br, foi assim que resolvi o meu problema de redirecionamento, dps colocando fixo o http:// por via de código !!

Outra coisa é o número de visualizações no meu caso isso não seria necessário, então tirei a linha :

$update = "UPDATE banner SET maxexib=$linha[5] WHERE codigo='$linha[0]'";
mysql_query($update, $conn);

Do exibir.php e ficou tudo de boa !!

A única coisa que ta pegando e a não possibilidade de cadastrar banners em flash, pelo menos eu não consegui !!

Se alguém puder ajudar nesse ponto !!

Espero de resto ter ajudado o pessoal ai !!

Abs
09/06/2005 6:41pm (~19 anos atrás)

Gostei de seu script.. legal... mas poderia ser melhorado como por exemplo: cada banner ter seu máximo de vizualizações e quando esse número for alcançado o banner ser DESATIVADO... =).. depois colocarei um script de banner rotativo aqui
23/05/2005 8:16pm (~19 anos atrás)

Este script funcionou muito bem comigo.
Agora como faço para usar um arquivo do flash no lugar de uma imagem?
25/08/2004 7:48am (~20 anos atrás)

Fernando disse:
Gostaria de saber como faço pra rotaciornar os banners em outras dimensoes ??? []s
02/05/2004 2:52am (~20 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)