Contador de visitas reales con PHP/MySQL

Por: Nelson Y. López Hidalgo

Un contador de visitas es una herramienta muy útil para saber el número de internautas que ingresan a nuestro sitio Web, ¿Para qué necesitamos esa información? Pues saber cuántas personas visitan nuestra Web es de mucha utilidad por ejemplo imagina si nuestro sitio web es visitado por muy poquitas personas, podríamos obtener muchas conclusiones con base a ese dato, conclusiones como las siguientes: el sitio web no es atractivo, está mal diseñado, no tiene información útil, entre muchas otras posibilidades. Que nos podrían poner a pensar sobre como reestructurar nuestro sitio de manera tal que el número de visitas aumenten.

Por otra parte si el número de visitas a nuestro sitio es alto eso nos da un parte de satisfacción indicándonos que nuestra Web es realmente útil y cumplió con los objetivos deseados al momento de su construcción.

Hay muchas formas de hacer un contador de visitas usando cookies, archivos, etc, en este artículo explicare una de esas formas, más precisamente como hacer un contador de visitas reales usando PHP y MySQL, este contador captura la ip del visitante la primera vez que ingresa al sitio y la almacena en la base de datos, si el visitante vuelve a ingresar por segunda vez en un tiempo menor a 5 horas no se contara el voto como nuevo, de lo contrario será contado, es decir si ingresa de nuevo después de 5 horas será sumado al contador.

Desarrollo del contador

Primero crearemos una tabla llamada contador en nuestra base de datos

CREATE TABLE contador (
    id int auto_increment,
    ip varchar(20) not null,
    num_votos varchar(30) default 0 not null,
    fecha datetime not null,
    PRIMARY KEY(id)
)

Creamos un archivo con la configuración de la base de datos llamado conf.php

<?php
$server="localhost";
$username="root";
$password="";
$dataBase="ejemplos";

$link=mysql_connect($server, $username, $password)
      or die("Problemas en la conexión: ".mysql_error());

$db=mysql_select_db($dataBase, $link)
        or die("Problemas al seleccionar la base de datos: ".mysql_error());
?>

Creamos el código del contador contador.php

<?php

//conf.php, archivo de configuración de la base de datos

include(‘conf.php’);

//IP DEL VISITANTE

$ip = $_SERVER[‘REMOTE_ADDR’];

/*Seleccionamos la ip, la diferencia en tiempo entre la fecha actual y la almacenada

* en la base de datos, con la función de mysql TIMEDIFF(fecha de inicio, fecha final)

*/

$sql="select ip, TIMEDIFF(NOW(), fecha), fecha, num_visitas from contador where ip=’$ip’";

//Ejecutamos la instrucción SQL

$rs=mysql_query($sql) or die("Problemas al ejecutar select SQL ".mysql_error());

/*Almacenados el resultado de la instrucción SQL en un arreglo asociativo con la función

mysql_fetch_array */

$fila=mysql_fetch_array($rs);

$tiempo=$fila[1]; //Diferencia entre fecha guardada y fecha actual

$num_visitas=$fila[3]; //Número de visitas

$horas_t=substr($tiempo,0,2); //Número de horas transcurridas

$tiemRes = 5; //Varible de tiempo en horas para restringir la visita

/*Contamos el número de registros obtenidos en la consulta anterior, si el numero

* obtenido es igual a cero es porque dicho visitante es nuevo en el sito

* entonces agregamos su ip a la base de datos junto con un 1 y la fecha actual */

if (mysql_num_rows($rs)==0)

{

$sql="insert into contador(ip, num_visitas, fecha) values(‘$ip’, 1, NOW())";

mysql_query($sql) or die("Problemas al ejecutar la insert SQL ".mysql_error());

}

/* Si el número de registros obtenidos es mayor a cero es porque dicho visitante ha vuelto a ingresar al

* sitio, y si su tiempo transcurrido es mayor a 5 horas desde la primera vez que ingreso

* entonces actualizamos su número de votos agregando sumando 1 al valor actual,

* tambien actualizamos la fecha de su ultimo ingreso a la fecha actual

* */

//Si la ip existe y han transcurrido 5hrs

elseif (mysql_num_rows($rs) > 0 && $horas_t > $tiemRes)

{

$sql="update contador set fecha=NOW(), num_visitas=’$num_visitas’+1 where ip=’$ip’";

mysql_query($sql) or die("Problemas al ejecutar update SQL ".mysql_error());

}

$sql="select SUM(num_visitas) from contador"; //Obtenemos la suma de todas las visitas

$rs=mysql_query($sql) or die("Problemas al ejecutar select SQL ".mysql_error());

$fila=mysql_fetch_array($rs); //Almacenanos el resultado de la consulta en un arreglo

$num_visitas=$fila[0]; //Número de visitas

mysql_close($link);

?>

Y por último creamos un archivo llamado visitas.php que será el que debemos incluir donde queramos mostrar el número de visitas

<?php

include(‘contador.php’);

echo $num_visitas;

?>

Descargar el ejemplo completo AQUI

Publicado el 16 junio 2010 en PHP. Añade a favoritos el enlace permanente. 12 comentarios.

  1. Como hacer que este contador sea real, me he dado cuenta que cuando ingresan de una intranet solo ingresa el IP del router, y quiere decir si ingresan 5 personas solo lo cuenta 1 gracias

  2. bien amigo muchisimas gracias este codigo esta muy bueno, pero como dice el comentario anterior como hacer en ese caso si se entra desde una intranet

  3. hola, estuve probando el codigo y me tira el siguiente error:

    “Problemas al ejecutar select SQL You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘.0.1’ at line 1”
    muchas gracias por la ayuda!!!

  4. me sale este error:

    Problemas al ejecutar select SQL You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘€™127.0.0.1” at line 1

  5. En la base de datos contador el campo num_votos debes ser cambiado por num_visitas, para que funciones correctamente. Ademas las comillas en las variables $ip y en los includes son incorrectas. debes cambiar ‘$ip’ por ‘$ip’

    y (‘conf.php’); por (‘conf.php’);

    Saludos
    Marco A. Sosa V.

  6. Eleazar Rojas

    cuando copian y pegan el código, todas las comillas simples quedan como si fueran acento frances, deben sustituirlas por comillas simples.

  7. Eleazar Rojas

    Excelente código, gracias por compartirlo…

  8. ¿Como hago para contar varias veces si en dicho pc entran varias personas?

  9. Hola buenas, mi duda es la siguiente.
    Tengo un contador de visitas en la web dividido en 3 contadores.

    Significa que cada vez que te registras debes de poner como qué te registras.

    Ej: visitante, comprador, ojeador.

    Necesito que una vez la gente se registre, el contador de visitas coja de la base de datos como te has registrado y lo añada al contador de visitas de la web, sin tener que añadirlo manualmente.

    Gracias, saludos

  10. El error es al crear la tabla, cambié el nopmbre de la columna “num_votos” por “num_visitas”

  11. jesus guadalupe coroenel

    tengo un problemas
    esto me manda
    Problemas al ejecutar select SQL Unknown column ‘num_visitas’ in ‘field list’

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: