Conheça o Plugfeed | » Início » Programação » PHP » Contador de visitas (MySQL)
Conheça o Plugfeed | » Início » Programação » PHP » Contador de visitas (MySQL) -->
 
Avaliação: | Publicado em: 17/07/2007
Contador de visitas (MySQL)
Eduardo Stuart Cursando S.I. , trabalha como programador e webdesigner.
Contador de visitas (MySQL)

Meu primeiro artigo aqui no plugmasters, espero que ajude alguem :)

O que vamos fazer?
Um simples contador de visitas que utiliza MySQL.

Como funciona?
O sistema pega a data atual e o ip do visitante, após pegar esses dados ele verifica se os mesmo ja forma inseridos na tabela. (Verifica a data e o ip / Compara data atual + ip visitante com todos os registros da tabela)

- Criei uma classe chamada "visita", nela possui as funções:
    visita();
       Funciona como construtor, pega o ip do visitante e a data atual e armazena nas variaveis $ip e $data;
    conectar();
       Conexão com o banco
    verificaVisitante();
       Essa função faz as comparações, verifica se ja visitou. Caso não tenha visitado, insere novo registro.
    imprime();
       Seleciona todos os registros da tabela e imprime na tela

A tabela:

CREATE TABLE `visitas` (
`id` INT(50) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`ip` VARCHAR(11) NOT NULL,
`data` VARCHAR(10) DEFAULT '00/00/0000' NOT NULL
) TYPE = MYISAM;

O código:
<?php
/*
 *    contador de visitas
 *    @Date:    17-07-07
 *    @Filename:    contador.class.php
 **/
class visita
{
    /*
     * variaveis
     **/
     
    //Dados necessarios para verificacao  de visitantes
    var $ip; //armazena o ip do usuario
    var $data; //armazena a data atual

    //Dados necessarios para conexao com db   
    var $hostdb = "localhost";
    var $userdb = "root";
    var $passdb = "";
    var $namedb = "banco";

    //Nome da tabela
    var $tabVisitas = "visitas";
   
    /*
     * construtor
     **/
    function visita($ip)
    {
        //armazena na variavel 'ip' o ip do visitante atual
        $this->ip=$ip;
        //Pega a data atual
        $this->data=date("d/m/Y");
    }
       
    /*
     * conexao com banco
     **/
    function conectar()
    {
        $link= mysql_connect($this->hostdb,$this->userdb,$this->passdb)or die(mysql_error());
        mysql_select_db($this->namedb,$link)or die(mysql_error());
    }   

   
    /*
     * verifica se o usuario ja visitou
     **/
    function verificaVisitante()
    {   
        //Chama a funcao de conexao com db
        $this->conectar();
        /* Seleciona por ip e data  */
        $sql = mysql_query("SELECT ip,data
                            FROM ".$this->tabVisitas."
                            WHERE ip='".$this->ip."' AND data='".$this->data."'")or die(mysql_error());
        /* Verifica se a selecao feita existe, caso nao exista insere novo */
        if(!mysql_num_rows($sql)>0)
            $insereVisita = mysql_query("INSERT INTO ".$this->tabVisitas."
                                        (id,ip,data)
                                        VALUES
                                        ('','".$this->ip."','".$this->data."')");
        //else print("Ja visitou");
    }
    /*
     * imprime numero de visitas
     **/
    function imprime()
    {
        //Chama conexao;
        $this->conectar();
        //Seleciona todos
        $sql = mysql_query("SELECT * FROM ".$this->tabVisitas);
        //Conta quantos foram selecionados
        $total= mysql_num_rows($sql);
        //Imprime numero de visitas (registros na tabela)
        print("Visitas: ".$total);
    }
}
//'Chama' a classe visita e ja pega o ip do visitante
$visita = new visita($_SERVER['REMOTE_ADDR']);
//Chama a funcao verificaVisitante();
//Ela verifica se por ip e data se o usuario ja visitou
$visita->verificaVisitante();
//Imprime o total de visitas (total de registros na tabela)
$visita->imprime();
?>

Está bem comentado, acho que não preciso dizer mais nada...
Caso tenha alguma duvida é só comentar ;)
ou entrar em contato
eduardo@eduardostuart.com

Bom uso! :)
http://blog.eduardostuart.com | http://www.eduardostuart.com
Arquivos anexos ao artigo
Artigos relacionados
Este artigo é a parte 1 de 2 da seguinte série:
  1. Contador de visitas (MySQL)
  2. Contador de visitas com Ajax

Tu é bom msm em rs..
Teus scripts são manerinhus..

Se tiver msn me add ae queria trocar umas idéais ctg... rikz.top@hotmail.com

=D
Júlio Marques <alegria.virtual@hotmail.com>
Eu gostei da matéria, peguei o código, mais não entendi muito bem como é que faz o contador.


Muito bom!!! Aprendi a fezer um contador com essa matéria!
e ai kamarada queria uam ajuda como cloko o contador no frontpage?
nao consiqui colok
add meu msn cj_paulistas@hotmail.com
se n for comodo ..pq eu nao consiqui clok o contador na minha pagina
Muito bom, porém na hora de criar a tabela visitas no mysql, no IP ao invez de colocar VARCHAR(11), cria ele como VARCHAR(15), pq tem ips maiores, e ele conta os pontos :) - só uma sugestão pra funcionar a parte que grava o IP e nao deixa adicionar mais uma vez no contador, fica bem mais firme pra saber realmente quantas pessoas entraram... abraço
Cara é o que eu to precisando,
instalei mas não consigo fazer a conecção com mysql. Criei um bd chamado banco e usuario root

preciso de fazer mais alguma coisa no mysql ?
//armazena na variavel 'ip' o ip do visitante atual
this->ip=ip;

Oq ser isso? Onde você definiu a variável ip?

Fora isso tá ok... Mas pode melhorar!
Eliandro Baldo <eliandrobaldo@hotmail.com>
parabens, funcionou q uma belaza. estava atras d um codigo assim faz tempo, obrigado
Cara.. parabéns... muito show este tuto. Mas tem que fazer como o Jason disse... poe varchar 15 senão não funciona direito... do resto, SHOW!
esse arquivo foi otimo mais ñ ajudou em nda
q loko cara me add no msn ai...

sei um pouco de actions tbm...
Vinicius Oliveira <voc2009@hotmail.com>
Amigo, usei o seu script em um website de cliente e funcionou perfeitamente. Só há um pequeno detalhe: Ele não está barrando o IP, então eu configurei meu banco de dados a tabela IP como UNIQUE, só assim ele contou visita única por IP... deixo essa dica para outras pessoas que usarem seu script, também colocarem no banco de dados o atributo UNIQUE para a tabela IP. Espero que isso ajude pelo menos por enquanto, até encontrar onde ta o erro do barramento. Abraços e parabéns!








Um produto Detetive.net