Insertar un contador de visitas en tu Web con PHP

En este artículo vamos a ver como añadir un contador de visitas con PHP desde 0 con el objetivo de tener un control o contabilización de las visitas diarias en tu sitio Web.

El contador de visitas será transparente al usuario. Se tratará de insertar un código que nos permitirá tener un control de las visitas que recibimos en nuestra Web teniendo en cuenta el día y la dirección IP del usuario para evitar duplicaciones en el contador, es decir, que si un usuario entra por primera vez si que se contabilizará pero si entra por segunda o tercera vez el script no hará nada.

Necesitaremos añadir una nueva tabla en la base de datos para guardar los registros de visitas. La puedes llamar «visitas» por ejemplo.

Los campos importantes de esta tabla son la fecha y la IP. En el campo fecha se guardará la fecha actual de la visita y en el campo IP la dirección IP del usuario que nos visita.

Seguidamente deberemos incorporar el código que realiza la inserción de la visita en la base de datos en nuestro footer o header. Debes insertarlo en un lugar que se visualice en cualquier parte de tu Web, para que se ejecute cada vez que se acceda.

Antes de nada, deberás conectar con tu base de datos:

$con = mysql_connect("localhost", DB_USER, DB_PASSWORD);
mysql_select_db(DB_NAME, $con);

Seguidamente realizar la consulta e inserción:

$consulta_visita_real = "SELECT * FROM visitas WHERE fecha='$hoy' AND ip='".$_SERVER['REMOTE_ADDR']."'";
$rs_visita_real = mysql_query($consulta_visita_real, $con);
if (mysql_num_rows($rs_visita_real) == 0) {
   $hoy = date("Y-m-d");
   $insert_real = "INSERT INTO visitas (ip, fecha, num) VALUES ('".$_SERVER['REMOTE_ADDR']."', '$hoy', 1)";
   mysql_query($insert_real, $con);
}

Como vemos, lo que estamos haciendo es observar si el visitante que está en linea es la primera vez que nos visita hoy, si es así añadimos un nuevo registro, en caso contrario el script no hará nada.

Luego en otro archivo podemos visualizar con una tabla el número de visitas que se tienen cada día:

$query = mysql_query("SELECT DISTINCT(fecha) FROM visitas ORDER BY fecha DESC", $con);
if (mysql_num_rows($query) > 0) {
    echo '<table border="1" width="250px" cellpading="5px" cellspacing="5px">';
    echo '<tr><td>FECHA</td><td>VISITAS</td></tr>';
    while ($row = mysql_fetch_array($query)) {
        $current_date = $row['fecha'];
        $query_visitas = mysql_query("SELECT COUNT(*) as num FROM `visitas` WHERE fecha = '$current_date'", $con);
        $row_visits = mysql_fetch_array($query_visitas);
        echo '<tr><td>'.$current_date.'</td><td align="right">'.$row_visits['num'].'</td></tr>';
    }
    echo '</table>';
}

En el código anterior consultamos a la base de datos el número de visitas que se tienen a diario. Veremos algo como lo siguiente:

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(15 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

27 respuestas a “Insertar un contador de visitas en tu Web con PHP”

  1. david dice:

    $hoy = date(«Y-m-d»);
    $ip=$_SERVER[‘REMOTE_ADDR’];
    $revisar = mysqli_fetch_assoc(mysqli_query($con, «select id from visitas where fecha = ‘$hoy’ and ip=’$ip'»));
    if($revisar)
    {
    $id=$revisar[‘id’];
    mysqli_query($con,»UPDATE visitas SET numero = numero+1 WHERE id=’$id'»);
    }
    else
    {
    $sqli = «INSERT INTO visitas(ip, fecha) VALUES (‘$ip’,’$hoy’)»;
    mysqli_query($con,$sqli);
    }

    tome el ejemplo original y de cristian, lo hice de esta forma yo al insertar no agrego el numero =1 porque cuando hice la bd por default es 1

  2. Muy buen post, sobre todo porque la explicación es entendible y valiosa para todos quienes quieran aprender más sobre esto
    Saludos
    Nico

  3. javier dice:

    Funcionar funciona, pero lo de no mandar un registro nuevo si la ip a repetido el mismo dia no funciona…
    acabo de instalarlo, he cambiado 2 o 3 veces de pagina dentro de la misma web, y me ha reescrito tantas veces como he cambiado. y mi ip es fija.
    asi no son visitas reales, lo que esta contando, son clicks

  4. Christian Lara dice:

    Hola Jose aguilar acabo de implementar tu solcuion en mi stio web y funciona perfecto, la unica observacion que puedo aportar es que mediante esta instruccion adicional que coloca aca podemos monitorear cuantas veces ese mismo usuario ha visitado el sitio web:
    else{
    $rw=mysqli_fetch_array($rs_visita_real);
    $id_visitante=intval($rw[‘id_visita’]);
    $num=intval($rw[‘num’]);
    $num=$num+1;
    $update_visita=»UPDATE visitas SET num = ‘.$num.’ WHERE `visitas`.`id_visita` = «.$id_visitante;
    mysqli_query($con,$update_visita);
    }
    CONTRA:Lo malo que estara siempre escribiendo en la base cuando se haga una visita sea nueva o vieja,
    PRO: Nos puede servir como indicativo de si estan volviendo a visitar el sitio y cuantas veces, agregando un par de lineas mas podremos saber inclusive que paginas estan visitando.

    Informacion adicional: $_SERVER[‘REMOTE_ADDR’] con esto obtenemos la IP por el cual estan saliendo los request osea me di cuenta que al final ese codigo logra obtener el IP del router en el que estamos conectados varios dispositivos en la casa pero no los logra detectar a los disposivos si no a la ip del router, sabes su hay alguna manera de obtener todos los ips de los dispositivos?

  5. jejejejejeje hay que reconocer que el amigo jose aguilar hace las cosas tam simples que cuesta creer que funcionen hasta que pruebas y es cierto…

    te felicito amigo, más claro y facil no se puede…

  6. Ignacio dice:

    Bueno el artículo y muy claro le felicito, todo sale bien solo que registra varias veces al actualizar la página.
    Jose cómo se podría arreglar, el código es bien simple y funciona
    gracias.

  7. Hola me sale el siguiente error:
    Notice: Undefined variable: hoy in header.php on line 209

  8. Milthon dice:

    Hola buenas noches quisiera poner esto en wordpress como podría hacerlo??

    • Jose Aguilar dice:

      Hola buenos días,

      Deberá modificar su wordpress añadiendo esta nueva tabla de visitas y por ejemplo en footer.php o en el functions.php hacer la función que registra las visitas.

      Saludos

  9. Miguel Angel dice:

    Buenas, perdon por la ignorancia, pero ese codigo donde tengo que insertarlo? yo pegué las tres partes del codigo en un archivo .php y lo agregué a mi index mediante include()… por lo visto lo hice mal porque me salto error en todas las lineas… Gracias por la ayuda!

    • Jose Aguilar dice:

      Hola buenas tardes, no se debe poner todo en un mismo archivo. En el artículo estoy comentando todos los pasos.

  10. Mauro dice:

    Hola me podrías explicar o dar un ejemplo de como hacer para q´ no agregue una visita más actualizando la pagina?,. por más que tenga la misma IP gracias.

    • Jose Aguilar dice:

      Hola en principio en el siguiente código implícito en el artículo ya se está controlando el caso que comentas:

      $consulta_visita_real = «SELECT * FROM visitas WHERE fecha=’$hoy’ AND ip='».$_SERVER[‘REMOTE_ADDR’].»‘»;
      $rs_visita_real = mysql_query($consulta_visita_real, $con);
      if (mysql_num_rows($rs_visita_real) == 0) {
      $hoy = date(«Y-m-d»);
      $insert_real = «INSERT INTO visitas (ip, fecha, num) VALUES (‘».$_SERVER[‘REMOTE_ADDR’].»‘, ‘$hoy’, 1)»;
      mysql_query($insert_real, $con);
      }

      Primero estamos haciendo una consulta para revisar si en el día de hoy la ip del visitante ya está registrada en la tabla.

      Saludos

  11. Deimer dice:

    Esta interesante el sistema de visitas, sin embargo, debo decir que cada que se recarga la pagina cuenta como visita. asi sea el mismo ip. al menos eso es lo que ocurre en mi localhost

    • Jose Aguilar dice:

      Eso se puede controlar creando una tabla extra para registrar las ip y condicionar la inserción en la tabla de visitas solo si no existe su ip en el día.

    • ruben dice:

      capaz te realize eso pero seria por fecha.. si haces por ip.. solamente 1 vez va a contar tu visita por mas que entres todos los dias.. ya que eso se guardo en tu base de datos.. para mi funciona super bien

      • Jose Aguilar dice:

        si, me refería a eso. Tener una tabla extra con:

        id_visita
        ip
        fecha

        En esta tabla solo registrarás si la ip no está en la fecha de hoy.

        Saludos

  12. Pedro dice:

    el mas fácil que he visto para copiar y pegar practicamente

  13. Pedro dice:

    esta genial!!

  14. Gustavo dice:

    Por favor sabrás, donde es recomendable colocar un contador en una tienda elaborada con oscommerce?

  15. Kal Smith dice:

    Estimado, esta demasiado bueno el contador, lo que si me queda una duda, como se puede hacer para capturar la url que esta mostrando el navegador ??

    Saludos !

  16. Iris dice:

    Felicitaciones por su portal, excelente información me ha servido mucho, es una manera de mejorar notablemente nuestra web y tener un mejor control.

  17. Pedro dice:

    FUNCIONA!!
    Muy chulo , te falta creo un update num para evitar tanto registro

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ver más sobre