10

Banners Aleatórios

Posted by Ana Claudia on fev 1, 2009 in HTML, Mysql, PHP

Banners são anúncios, que geralmente são exibidos no topo, mas podem ser exibidos em qualquer outro lugar da tela. Eles podem ser exibidos numa ordem pré-definida ou simplesmente não ter uma ordem, que será o demosntrado neste post. Uma boa prática é contabilizar o número de vezes que o banner foi mostrado (views) e quantas vezes ele foi clicado (clicks) para se definir se o banner está atingindo as metas estabelecidas para ele. Neste post irei demostrar todo o processo de gravação das informações do banner e imagens até a exibição do banner e a contagem de views e clicks.
O primeiro passo é criar uma pasta onde você irá organizar as imagens de seus banners. A minha pasta eu dei o nome de banner_img. Em seguida, crie em seu banco de dados uma tabela chamada banner, que guardará as informações do banner:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE banner(
 banner_id INT(4) NOT NULL auto_increment,
 banner_nome VARCHAR(64) DEFAULT NULL,
 banner_url VARCHAR(255) DEFAULT NULL,
 banner_imagem VARCHAR(100) DEFAULT NULL,
 banner_texto_html TEXT,
 impressoes_expira int(5) DEFAULT '0',
 banner_data_expira DATETIME DEFAULT NULL,
 banner_data_agendada DATETIME DEFAULT NULL,
 banner_data_adicionada DATETIME DEFAULT NULL,
 banner_data_status DATETIME DEFAULT NULL,
 banner_status TINYINT(3)  DEFAULT NULL,
 PRIMARY KEY(banner_id)
);

Em seguida vamos criar a tabela banner_historico, que guardará as informações de views e clicks.

1
2
3
4
5
6
7
8
CREATE TABLE banner_historico(
 banner_id_historico int(10) NOT NULL auto_increment,
 banner_id int(4) default NULL,
 banner_view int(10) default NULL,
 banner_click  int(10) default NULL,
 banner_data_historico DATETIME default NULL,
 PRIMARY KEY (banner_id_historico)
);

Em seguida devemos criar o arquivo que fará a conexão com o Mysql e com o banco de dados respectivamente. Ele será incluido nas páginas PHP que necessitam fazer as operações no Mysql, como selecionar, inserir e atualizar as tabelas.
conexao.php

1
2
3
4
5
6
7
8
9
10
11
<?
     $server   = "localhost"; //nome do servidor Mysql, geralmente Localhost
     $user     = "root";      //nome do usuario Mysql
     $password = "123";       //senha do usuario
     $bd       = "banners";    //nome do banco de dados onde esta a tabela
 
    //Conectando ao Mysql
    $conn = mysql_connect($server,$user,$password);
   //Conctando ao banco de dados
   mysql_select_db($bd,$conn);
?>

A seguir, vamos criar o formulário onde serão colocados os dados para posterior gravação na tabela banner.
banner_cadastro.php

1
2
3
4
5
6
7
8
9
10
<form id="frm_banner" method="post" action="banner_cadastrar.php"  enctype="multipart/form-data">
 <p>Nome: <input name="banner_nome" type="text" size="50" /></p>
 <p>Link: <input name="banner_url" type="text" size="50" /> <p>
 <p>Imagem: <input name="banner_imagem" type="file" size="50" ></p>
 <p>Texto HTML<br /><textarea name="banner_texto_html" cols="50" rows="5"></textarea></p>
 <p>Agendado para: <input name="banner_data_agendada" type="text" size="10" maxlength="10" /> dd/mm/aaaa</p>
 <p>Expira em:<input name="banner_data_expira" type="text" size="10" maxlength="10" /> ou após <br />
    <input name="impressoes_expira" type="text" size="4" />impressões</p>
 <p><input name="btn_salvar" type="submit" value="Salvar" /></p>
</form>

Verificando o formulário acima já podemos perceber como o banner irá se comportar. Temos os campos “Imagem” e “Texto HTML”, onde o primeiro irá exibir a imagem do banner, e o segundo irá criar um banner em HTML. Apenas um destes campos devem ser preenchidos, mas caso os dois sejam preenchidos um deles deve ter prioridade de visualização. No meu caso escolhi o texto html para ser exibido, como você pode acompanhar mais adiante. O campo “Agendado para” permite agendar uma data para começar a exibir o banner. O campo “Expira em” define uma data para terminar de exibir o banner, bem como o campo seguinte, que define quantas vezes o banner deve ser mostrados até que ele pare de ser exibido.

banner_cadastrar.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?
   require_once("conexao.php");
   $banner_nome  = $_REQUEST["banner_nome"];
   $banner_url	 = $_REQUEST["banner_url"];
   $banner_imagem = $_FILES["banner_imagem"];
   $banner_texto_html = $_REQUEST["banner_texto_html"];
   $banner_data_agendada = $_REQUEST["banner_data_agendada"];
   $banner_data_expira = $_REQUEST["banner_data_expira"];  	     
   $impressoes_expira = $_REQUEST["impressoes_expira"];
 
   if(empty($expira_impressoes)) $expira_impressoes = 0;
 
   //1. Cadatrar o banner na tabela
   $SQL = "INSERT INTO banner SET 
   banner_nome='$banner_nome',banner_url='$banner_url',   
   banner_texto_html='$banner_texto_html',
  impressoes_expira='$impressoes_expira',banner_status='1',
   banner_data_adicionada = NOW(),banner_data_status=NOW()";
 
   //só insere a data_agendada se a a variavel não estiver vazia
   if(!empty($banner_data_agendada)) 
     $SQL .= ", banner_data_agendada = '".retornaData($banner_data_agendada)."'";
 
   if(!empty($banner_data_expira))
     $SQL .= ", banner_data_expira = '".retornaData($banner_data_expira)."'";
 
    $result = mysql_query($SQL,$conn) or die(mysql_error());
    //Código seguencial do banner recém cadastrado; 
    $banner_id = mysql_insert_id($conn); 
 
   //2. Cadatrar o histórico do banner
   $SQL = "INSERT INTO banner_historico SET
   banner_id = '$banner_id',
   banner_view  = '0',
   banner_click = '0'";
   $result = mysql_query($SQL,$conn) or die(mysql_error());
 
   //3. Inserir Imagem do Banner  (se houver)
   if(!empty($banner_imagem["name"]))
   {
     $ext   = strtolower(substr($banner_imagem["name"],-4));
     $name = substr($banner_imagem["name"],0,strlen($banner_imagem["name"])-4)."_".$banner_id;
     $banner_imagem_arq  = $name.$ext;
 
     if(!copy($banner_imagem["tmp_name"],"banner_img/".$banner_imagem_arq))
     {
      echo "Aconteceu um erro durante o envio da imagem ".$banner_imagem["error"]."<br />";
      exit();
     }
     else
    {
       //Atualiza a tabela de banner para com o nome do arquivo a imagem
       $SQL = "UPDATE banner SET banner_imagem='$banner_imagem_arq' 
       WHERE   banner_id='$banner_id'";
       $result = mysql_query($SQL,$conn) or die(mysql_error());
    }
  }
  header("location: banner_cadastro.php");
 
  function retornaData($data)
  {
      return implode("-",array_reverse(explode("/",$data)));
  }
?>

No código acima vamos inserir efetivamente as informações do banner na tabela (linhas 14 a 27). Os campos banner_data_agendada e banner_data_expira só serão gravados na tabela, caso os mesmos não estejam vazios. O campo expira_impressoes guardará o número de impressões que serão feitas deste banner até que este não seja mais visualizado, cada vez que o banner é visualizado, é subtraido uma impressão deste campo. Na linha 29, será pego o código de Identificação (ID) do registro recém inserido na tabela banner, para que possamos inserir seu histórico na tabela banner_historico e a informação da imagem, se existir, na tabela banner.
Nas linhas 33 a 37, será inserido o histórico do banner, ou seja os clicks e views do banner. Como ainda não existem essas informações, os campos banner_view e banner_click serão gravados com 0.
A partir da linha 40 até 57, é feita o upload da imagem do banner e a atualização da tabela banner para guardar o nome do arguivo gerado. Esse código só será executado caso tenha sido escolhido uma imagem no formulário. Nas linhas 42 a 44 eu personalizei o nome do arquivo para inserir o ID do registro após o nome do arquivo, para que não haja problemas de sobreposição de arquivos. Logo após o cadastro do banner, a página será redirecionada novamente para o formulário de cadastro do banner.
Nas linhas 60 a 63, há a funçao retornaData, que irá converter data do formato dd/mm/aaaa (dia/mes/ano) para o formato aaaa-mm-ddd (ano-mês-dia), que é o formato que o Mysql compreende. Para visualizar a ordem aleatória dos banner, recomendo que se cadastre 5 ou
mais banners para teste.

Agora vamos ver como os banners serão exibidos na tela no código a seguir:
mostra_banner.php – parte 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 <?
   require_once("conexao.php");
   $SQL = "SELECT b.banner_id,b.banner_nome, b.banner_url,b.banner_imagem,b.banner_texto_html
   FROM banner b
   INNER JOIN banner_historico bh  ON  b.banner_id = bh.banner_id
   WHERE banner_status = '1'
   AND ((impressoes_expira - banner_view) > 0 OR banner_data_expira < NOW())
   AND (banner_data_agendada >= NOW() OR banner_data_agendada IS NULL)
   ORDER BY RAND() LIMIT 1";
   $rs = mysql_query($SQL,$conn) or die(mysql_error());
 
   while($banner = mysql_fetch_array($rs))
   {
      //1. Verificar tipo (HTML tem prioridade)
      if(!empty($banner["banner_texto_html"]))
        $conteudo = $banner["banner_texto_html"];
      else if(!empty($banner["banner_imagem"]))
      {
          $conteudo = "<img src='banner_img/".$banner["banner_imagem"]."' alt='".$banner["banner_nome"]."'
          border='0'  id='img_banner' />";
      }
      $link = "<a href='conta_click_banner.php?banner_id=".$banner["banner_id"].
     "&amp;url=".$banner["banner_url"]."'>".$conteudo."</a>";
   }
   echo "<div id='banner'>$link</div>\n";
?>

Na query acima (linhas 3 a 9), será exibido somente os banners ativos (linha 6), ou seja, qualquer coisa com status diferente de 1 será ignorada. Nas linhas 7 e 8 será feito as verificações necessárias para a visualização do banner (data e número de impressões). A “mágica” da visualização não seguencial está na função que é o reposnsável por embaralhar os registros da tabela banner. Como só queremos que seja exibido um banner por vez, a instrução LIMIT se encarrega disso, onde 1 é o numero de registros a ser exibidos. Em seguida é criado o link e exibido o banner(linhas 12 a 25) , lembrando que o texto HTML tem prioridade sobre a imagem.

Agora vamos contablilizar a view do banner e guardar a informação na tabela banner_historico.Obs: Essa parte deve ser colocada antes do fechar o “while”
mostra_banner.php – parte 2

22
23
24
25
26
27
28
29
<?
    //2. Cadastrar impressão
    $SQL = "UPDATE banner_historico SET
    banner_view           = banner_view + 1,
    banner_data_historico = NOW()
    WHERE banner_id = '".$banner["banner_id"]."'";
    $result = mysql_query($SQL) or die(mysql_error());
?>

No código acima, podemos perceber na query, na linha 25, que o campos banner_view foi acrescentado 1 a ele. Na linha 26, o campo banner_data_historico atualiza a data que a modificação foi feita, ou seja, a data que foi feita a última visualização do banner.

E por último, mas não mais importante, vamos contablizar o click feito pelo usuário no banner.
conta_click_banner.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
   require_once("conexao.php");
   $banner_id   = $_GET["banner_id"];
   $url         = $_GET["url"];
   if(strpos($url,"http://") === false)
     $url = "http://". $url;
 
   //Cadastrar clique
   $SQL = "UPDATE banner_historico SET banner_click = banner_click + 1 WHERE   banner_id = '$banner_id'";
   $result = mysql_query($SQL) or die(mysql_error());
 
   //Redirecionar para o link do banner
   header("location: $url");
?>

O que fizemos no código acima foi, acrescentar mais uma click ao campo banner_click do banner( linha 9) e a seguir redirecionamos para o link do banner (linha 13).
E aqui termino meu tutorial sobre banners aleatórios. Uma dica que eu deixo é colocar na tabela um campo para cadastro de tamanho do banner, para que seja possivel ter um banner com tamanho dinâmico.
Aproveitando a oportunidade gostaria que sugerissem assuntos para os posts seguintes para que esse blog para a melhoria contínua deste blog.

 
2

Quem está online no meu site?

Posted by Ana Claudia on nov 9, 2008 in Mysql, PHP

Há algum tempo precisei criar um script em php para saber quem estava online (também conhecido como “Who’s online”) no momento num determinado site. Achei (infelizmente) o script em inglês e por isso motivo compartilho meus conhecimentos com vocês.
Nosso script fará 3 coisas:

  • Verificar se o visitante já está registrado
  • Se vai inserir um novo visitante ou atualizar um já existente
  • Remover todos os visitantes antigos que não estão mais online.

A primeira coisa que você deve fazer é criar uma tabela no seu banco de dados Mysql. Eu nomei minha tabela de usuarios_online com a seguinte estrutura:

1
2
3
4
5
6
7
8
9
CREATE TABLE usuarios_online (
  usuarios_online_id int(10) unsigned NOT NULL auto_increment,
  sessao_id varchar(128) default NULL,
  ip_address varchar(16) default NULL,
  hora_entrada varchar(14) default NULL,
  ultima_atividade varchar(14) default NULL,
  ultima_pagina_url varchar(255) default NULL,
  PRIMARY KEY  (usuarios_online_id)
);

Em seguida criamos o código da página whos_online que vai fazer todas as verificações necessárias

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?
include("conexao.php"); // Aqui você deve incluir a sua conexão com o banco de dados
function whos_online()
{
  //Pega os dados do visitante
   $session_id           = session_id();
   $ip_address          = $_SERVER['REMOTE_ADDR'];
   $ultima_pagina_url = $_SERVER['SCRIPT_NAME'];
   $hora_atual         = time();
   $xx_min_atras      = ($hora_atual - 900);
 
//Remove entradas que expiraram
   mysql_query("DELETE FROM usuarios_online WHERE hora_ultimo_click < '$xx_min_atras'") or die(mysql_error());
 
//Verifica se o visitante está online através da função session_id que verifica o id da sessão.
$rs = mysql_query("SELECT COUNT(*) as count FROM usuarios_online WHERE sessao_id = ' ".$session_id." ' ") or die(mysql_error());
if mysql_num_rows($rs) > 0) 
{
  $count = mysql_result($rs,0,0);
  if($count > 0) // Se o visitante já existir, atualiza seus dados na tabela
  {
      $sql= "UPDATE usuarios_online SET
      ip_address        = '$ip_address',
      hora_ultimo_click = '$hora_atual',
      ultima_pagina_url = '$ultima_pagina_url'
     WHERE sessao_id='$session_id'";
  }
  else // Se não, insere os dados do novo visitante
  {
       $sql= "INSERT INTO usuarios_online(
        clientes_id,
        nome_completo,
        ip_address,
        hora_ultimo_click,
        ultima_pagina_url,
        sessao_id,
        hora_entrada
        ) VALUES (
       '$clientes_id',
       '$nome_completo',
       '$ip_address',
       '$hora_atual',
       '$ultima_pagina_url',
       '$session_id',
       '$hora_atual'
       )";
     }
 
     mysql_query($sql);
}
whos_online(); // Chama a função whos_online()
?>

Para que o código acima seja executado, basta chamar a função na página em que deseja verificar quantos usuários estão online. O código está bem comentado e acho que não precisa de mais explicações. É importante salientar que um visitante é considerado um novo visitante a cada visita do site, ou seja, enquanto o navegador está aberto.
Agora a última coisa que precisamos é mostrar numa página no nosso controle quais são os usuários que estão online. Agora eu crio no meu painel de controle a página whos_online_listar.php para listar todos os visitantes que estão online no momento.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?
 include("conexao.php"); // Novamente  você deve incluir a sua conexão com o banco de dados
 
$rs = mysql_query("SELECT  usuarios_online_id, ip_address,hora_entrada,
 hora_ultimo_click
 FROM  usuarios_online
 ORDER BY hora_ultimo_click DESC"); // Organizamos a hora do ultimo click do visitante em ordem decrescente.
?>
<table border="1">;
  <tr>
    <td>Online</td>
     <td>ID</td>
     <td>Endereço IP</td>
     <td.Entrada</td>
    <td>Último Click</td>
  </tr>
<?
 while($linha = mysql_fetch_array($rs))
{
     echo "<tr>\n";
     echo " <td>".gmdate('H:i:s',$tempo_online)."</td>\n";
     echo " <td>". $linha["usuarios_online_id"]."</td>\n";
     echo " <td>". $linha["ip_address"]."</td>\n";
     echo " <td>". date('H:i:s',$linha["hora_entrada"])."</td>\n";
     echo " <td>". date('H:i:s',$linha["hora_ultimo_click"])."</td>\n";
     echo "</tr>\n";
}
?>
</table>

Por hoje é só pessoal. Espero que a dica seja tão útil para vocês como foi para mim. Até a próxima :)

Tags:, ,

 
14

Como instalar Php 5+ Mysql + IIS+ PhpMyAdmin

Posted by Ana Claudia on jun 22, 2008 in IIS, Instalação, Mysql, PHP

Dando continuidade sobre o Post anterior, vou demonstrar como configurar o PHP com IIS.

1. Baixando os arquivos

IIS
Você encontrará o IIS no seu CD de Instalação do Windows, mas adiante veremos como configurá-lo.
PHP 5
http://br2.php.net/get/php-5.2.6-Win32.zip/from/br.php.net/mirror
Mysql 5
http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.51b-win32.zip/from
/pick?file=Downloads/MySQL-5.0/mysql-5.0.51b-win32.zip&mirror=pick#mirrors

PhpMyAdmin
http://prdownloads.sourceforge.net/phpmyadmin/
phpMyAdmin-2.11.6-all-languages-utf-8-only.zip?download

2. Instalando o Mysql

Assim como no artigo anterior, a instalação do Mysql é a mesma, é só seguir os passos nas famosas telas de Next > Next e Finish.

3. Instalando o IIS

Antes de instalarmos o IIS, veremos verificar se ele já está instalado na máquina. Para isso vá clique no Menu Iniciar > Configurações > Painel de Controle > Adicionar ou Remover programas > Adicionar/remover Componentes do Windows. Uma lista de componentes do Windows será listada. Se a opção Internet Information Services (IIS) estiver marcada, seu IIS já está instalado, e você pode seguir para o passo 4. Se não você precisa marcar a opção do IIS e clicar em Avançar. Siga as instruções que seguem. Tenha o Cd do Windows por perto por que será pedido durante o processo de instalação. Após a conclusão da instalação, feche as janelas abertas e vá para o Explorer. Entre na pasta C: e localize a pasta Inetpub/wwwroot. Está será por padrão a pasta onde você deve salvar seus scripts, mas ela pode ser mudada no IIS, mas não vou entrar em detalhes neste artigo. As páginas devem ser abertas no navegados digitando http://localhost/nomedoarquivo.php onde nomedoarquivo é o nome do seu arquivo PHP.

4. Instalando o PHP

Primeiro, crie uma pasta php dentro do c: e descompacte o arquivo zipado do PHP dentro desta pasta. Ainda dentro da pasta php, renomeia o arquivo php.ini-dist para php.ini somente. Depois copie e cole este arquivo em C:\WINDOWS. Aproveite e copie e cole os arquivos os arquivos php5ts.dll e libmysql.dll para a pasta C:\WINDOWS\system32.

5. Configurando o IIS com o PHP

Primeiro vá para Painel de Controle > Sistema > Avançado > Variáveis de Ambiente. Em Variáveis do sistema, encontre a variável Path de duplo clique a adicione o seguinte ao final da linha:
;C:\php5

Depois abra o IIS (Menu Iniciar > Configurações > Painel de Controle > Ferramentas Administrativas > Internet Information Services) vá abrindo as abas até chegar a Site da Web padrão.
IIS

Em seguida clique com o botão direito sobre “Site da Web padrão” e clique sobre Propriedades. Abra a aba Filtro ISAPI clique em “Adicionar” e Adicione os seguintes valores:
Nome do filtro: PHP
Executável: C:\php\php5isapi.dll

Filtro Isapi
Agora abra a aba diretório base, localize “Permissões de execução” e escolha a opção “Somente scripts”.
Diretório Base.

Ainda nesta aba, clique no botão configuração e selecione a aba Mapeamentos na próxima tela. Marque a opção “Armazenar em cachê aplicativos ISAPI”. Em seguida clique no botão “Adicionar”. Adicione os seguintes valores:
Executável: C:\php\php5isapi.dll
Extensão: .php
Mapeamentos

6. Configurando o PHP com Mysql

Abra o arquivo php.ini que você copiou para C:\WINDOWS e localize
extension_dir = “./”
que deve estar na linha 461 ou próximo e altere para
extension_dir = “c:/php/ext/”

Em seguida procure por ; cgi.force_redirect = 0 e tire o ; para descomentar esta linha.
Também descomente ;extension=php_mysql.dll que deve estar na linha 625 para que a extensão Mysql seja utilizada no PHP.
O último passo para verificarmos se o IIS reconheceu o PHP e as extensões foram devidamente instaladas é criar um arquivo de teste. Abra o bloco de notas ou seu editor de texto preferido e digite o seguinte comando:
< ? phpinfo(); ?>
Salve o arquivo como phpinfo.php na pasta C:\Inetpub\wwwroot. Abra este arquivo no navegador digitando http://localhost/phpinfo.php na barra de endereços, uma tela como esta será exibida:
Informações do PHP

Ela contém as informações do PHP como versão, servidor, extensões, entre outras informações do PHP e do servidor utilizado. Se todas as extensões que você descomentou foram instaladas, elas devem aparecer nesta tela.

7. Configurando o Phpmyadmin

Descompacte a pasta zipada dentro de C:\InetPub\wwwroot e renomeia a pasta para um nome mais fácil de ser lembrado, como por exemplo mysql. Assim, sempre que quiser abrir o mysql através do PhpMyAdmin digite no seu navegador http://localhost/mysql caso mysql seja o nome que você escolheu para sua pasta.

Bom assim acaba meus artigos sobre instalação de PHP e servidores. Escolher qual é o melhor só depende das suas necessidades. No trabalho, utilizo o IIS porque trabalho bastante com ASP e PHP e é mais conveniente para eu ter um servidor que rode os dois simultaneamente. Já em casa, quando faço meus freelas, eu prefiro o Apache, uma vez que a maioria dos meus trabalhos é em PHP além disso ele possui funções nativas que só funcionam com Apache. Uma outra opção é ter os dois servidores, mas isso exige que se pare um para utilizar o outro, ou definir portas diferentes para cada servidor (por padrão, ambos utilizam a porta 80). Bom, fica dada a dica agora é só escolher o servido de sua preferência e mãos a obra!

Copyright © 2010 Ana Claudia. All Rights Reserved.
Theme by Lorelei Web Design.