Ana Claudia

Programação e Design Web

Eu e o livros

posted by Ana Claudia On maio - 22 - 2009 1 COMMENT

Fugindo um pouco a linha de tutoriais dos meus posts, vou falar um pouco sobre um dos meus maiores hábitos: a leitura.

1. Eu sempre estou sempre com um livro ou revista na mochila, ficar sem ler é deprimente para mim.
2. Tenho costume de ler no ônibus.
3. Tenho uma mini estante de livros que eu realmente amo, organizo meus livros por assunto e tamanho, e ai daquele que me tire da ordem.
4. Leio de tudo um pouco, até os livros mais chatos eu leio (ou tento ler).
5. Sou muito chata com livros, odeio livros rabiscados
6. Aprendi a gostar de ler no ensino médio, quando era obrigada a ler os livros para a escola.
7. Me livrar de livros é estritamente difícil, pois os considero como verdadeiros tesouros.
8. Li todos os livros do Harry Potter em menos de uma semana cada.
9. Gosto de ler livros técnicos de informática em PDF (Veja o site http://www.pdfchm.com/, tem muitos bons livros em inglês lá).
10. Sebo foi a melhor invenção da face da terra, ótimos livros com preços melhores ainda.
11. Organizei meus livros num cadastro no meu computador (fiz isso recentemente)
12. Qualquer conversa paralela me distrai o que me faz desistir de ler o que eu estava lendo naquele momento.
13. Tenho livros novinhos que comprei por impulso e ainda não consegui começar a ler.

Categories: Pessoal, leitura, livro, pdf, revista

Banners Aleatórios

posted by Ana Claudia On fevereiro - 1 - 2009 9 COMMENTS

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.

Categories: HTML, Mysql, PHP

Quem está online no meu site?

posted by Ana Claudia On novembro - 9 - 2008 1 COMMENT

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 :)

Categories: Mysql, PHP
Tags: , ,

Comentários Recentes

  • Hugo: conseguir peço desculpas pra vc an
  • Hugo: podemos falar no msn se vc poder é
  • Hugo: vc quer todos os codigos? ou basta
  • Hugo: cara ana claudia estou adorando aqu
  • Ana Claudia: Gente havia um erro no script,no ar
  • Hugo: certo relamente errei feio salvei o