PHP + Mysql : Usuários on-line e contador de Visitas.


Existem diversas maneiras de se construir um contador de visitas e o números de usuários online em PHP, alguns nem utilizam banco de dados, preferem arquivos txt, assim como também, existem também os que guardam o numero de IP do visitante. Vou apresentar neste Post o modelo que achei mais adequado ao meu projeto, e espero que possa ser útil ao projeto de vocês, então vamos lá.

O primeiro passo é criar no seu banco de dados as tabelas que iremos utilizar para fazer a contagem de usuários online e a quantidade de visitas que o site já teve.

A Primeira tabela recebe o nome de contador, terá um id como primary key auto_incremente e o campo visitas também int, que será incrementado através do código php.

CREATE TABLE contador (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  visitas INT(10) NULL,
  PRIMARY KEY(id)
);CREATE TABLE contador (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  visitas INT(10) NULL,
  PRIMARY KEY(id)
);


A segunda tabela tem o nome de usuários_online e seus campos são o id como primary key auto_increment, a sessão, que vai guardar o código de sessão do usuário no momento, o tempo guarda a data e horário em que ele permaneceu no site, e por fim o numero de IP do visitante.

CREATE TABLE usuarios_online (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  sessao TEXT NULL,
  tempo TIMESTAMP NULL,
  ip VARCHAR(15) NULL,
  PRIMARY KEY(id)
);


O segundo passo, é criar o arquivo de conexão com o banco de dados. Crie um arquivo de nome conn.php e nele insira nele o seguinte código:

<?   
                //primeiro você cria a variável e preenche o nome do seu servidor
                $servidor    = "localhost";
                //em seguida você preenche o nome do seu banco de dados
                $basedados   = "sitetestes";
                // seu usuario
                $utilizador  = "root";
                //sua senha
                $chavepass   = "";
                //utiliza o mysql_connect para fazer a conexão com o banco, caso algum dos dados esteja incorreto, será apresentado um erro.
                $conn = mysql_connect($servidor, $utilizador, $chavepass);
                if (!$conn)
                {
                die('Erro; ' . mysql_error());
                }
                mysql_select_db($basedados, $conn);
?>

Fique atento aos comentários acima das linhas.
Depois crie o arquivo php onde você deseja que irá aparecer a contagem de usuário online e visitantes, coloque o seguinte código
//inclue o arquivo de conexão com o banco de dados.
<? include("conn.php") ?>
<?
                //inicia a sessao
                session_start();
                $expira_em  = 5; //DEFINE EM MINUTOS A EXPIRAÇÃO DO ACESSO DO USUARIO
                $sessao   = session_id();
                $ip   = $_SERVER['REMOTE_ADDR'];
$tempo_on   = date('Y-m-d H:i:s');
                $tempo_fim  = date('Y-m-d H:i:s',mktime(date('H'),date('i') - $expira_em,date('s'),date('m'),date('d'),date('Y')));                                              
                //EXCLUI USUARIOS QUE ESTEJAM INATIVOS NO TEMPO DEFINIDO COMO EXPIRAÇÃO
                mysql_query("DELETE FROM usuarios_online WHERE tempo <= '$tempo_fim'");
                //SELECIONA USUARIO
                $sql = mysql_query("SELECT id FROM usuarios_online WHERE sessao='$sessao'");
                $total = mysql_num_rows($sql);
                if($total){
                                mysql_query("UPDATE usuarios_online SET tempo='$tempo_on' WHERE sessao='$sessao'");
                }else{
                                mysql_query("INSERT INTO usuarios_online(sessao,tempo,ip)VALUES('$sessao','$tempo_on','$ip')");
                                $sql_c = mysql_query("SELECT id FROM contador");
                               $total_c = mysql_num_rows($sql_c);
                                if($total_c){
                                               mysql_query("UPDATE contador SET visitas=visitas+1");
                                }else{
                                               mysql_query("INSERT INTO contador(visitas)VALUES(1)");
                               }
                }
                //ONLINES
                $sql_o = mysql_query("SELECT id FROM usuarios_online");
                $total_online = mysql_num_rows($sql_o);
                //VISITAS
                $sql_v = mysql_query("SELECT visitas FROM contador LIMIT 1");
                $d_v = mysql_fetch_object($sql_v);
                $total_visitas = $d_v->visitas;
                                              
                echo "<p><b style='color:#FFCCFF;'>Online Agora:</b>". $total_online ."</p>";
?>
// Optei por deixar os arquivos separados, ou seja, em divs diferentes, mas que não vem ao caso no momento.
<?php
//VISITAS
                $sql_v = mysql_query("SELECT visitas FROM contador LIMIT 1");
                $d_v = mysql_fetch_object($sql_v);
                $total_visitas = $d_v->visitas;
                              
                echo "<p><b style='color:#FFCCFF;'>Total de Visitas:</b>". $total_visitas ."</p>";
?>


Simples não é verdade? Caso queiram ver o resultado, basta visitar www.frtavares.com.br na sidebar estão os usuários online e visitantes.
Espero que tenham gostado e até a próxima.










Comentários

Postagens mais visitadas