Contador de impresiones de página con Bases de Datos (Básico)

 
Un contador de impresiones de página, puede ser muy útil para llevar un control de la "popularidad" de nuestra web o de alguna parte de ella. A continuación mostramos como hacer un pequeño contador con bases de datos.

Este script muestra como hacer un contador de la forma más sencilla. A partir de aquí se pueden añadir varias implementaciones en BD y complicar el código para que muestre datos como fechas, IP´s, usuarios únicos, usuarios por día, estadísticas y un larguísimo etcétera.

Primero, debemos de crear una tabla como la siguiente:

CREATE TABLE `IMPRESIONES` (
    `ID` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
    `CONTADOR` BIGINT DEFAULT '0' NOT NULL ,
    `DESCRIPCION` VARCHAR(250) NOT NULL ,
    UNIQUE (`ID`)
);


Donde "id" es el campo autonumerico, "contador" será incrementado cada vez que se llame a la función "IncrementarContador" y el campo descripción lo usaremos para saber que página o grupo de ellas contaremos.

Se debe insertar una fila, por cada página o grupo de ellas de las que queramos contar sus visitas, por ejemplo:

INSERT INTO IMPRESIONES ( ID, DESCRIPCION)
VALUES
(1, 'Contador de la index'),
(2, 'Contador de los artículos'),
(3, 'Contador página Noticias');


Fijarse en que no inicializamos el campo "CONTADOR", ya que por defecto se inicializa a 0.

Por supuesto se podría añadir más filas de la misma forma que las demás, añadiendo al final (antes del ";") (N, 'TEXTO'), donde "N" sería el numero identificativo (debe ser siempre diferente, sino la consulta debería dar error), y "TEXTO" sería la descripción que querríamos darle.

esto generaría una tabla parecida a la siguiente:

IDCONTADORDESCRIPCIÓN
10Contador de la index
20Contador de los artículos
30Contador página Noticias


Una vez tenemos la tabla en bases de datos, viene el código del PHP, lo mejor sería que se añadiese en un archivo único y que este sea llamado desde los ficheros en que queremos llevar una contabilidad de las impresiones, por ejemplo si el fichero se llamase impresiones.php, el código que quedaría desde la página "llamadora" sería de una forma parecida a esto:

<?php

    include ("/direccion_en_tu_servidor/carpetas/impresiones.php");
    
    // Contamos una nueva visita en este caso de la index
    IncrementarContador(CONT_INDEX);
    
    // Si queremos mostrar las veces que ha sido vista una página, en este caso la index.
    echo "<br />Esta página ha sido vista ".iMostrarContador(CONT_INDEX)." veces.<br />";

?>


Las funciones que encargadas de la "contabilidad" (recomendadas en un archivo externo) serían como sigue.


Código:
<?php

error_reporting(0);

include ($_SERVER["DOCUMENT_ROOT"]."/comunes/includes/databasesinc.php");

//Copyright © McAnam.com

    // Creamos defines para cada tipo de contador
    // Estos deben coincidir con el campo "ID" de la tabla que hemos creado "IMPRESIONES"
    define ("CONT_INDEX", 1);
    define ("CONT_ARTICULOS", 2);
    define ("CONT_NOTICIAS", 3);
    
    
    function IncrementarContador ($iIdentificador) {
        
        // Llamamos a la función asignada para conectarse al servidor de BD
        // Ejemplo en: http://www.mcanam.com/articulos/PHP.php?id=13
        $lincador = conectarse();

        
        // Incrementamos el contador
        $sentencia = mysql_query("UPDATE IMPRESIONES SET CONTADOR = CONTADOR + 1 WHERE ID = ".intval($iIdentificador), $lincador);
        
        // Comprobación de errores
        
        if (!$sentencia){
            
            // La sentencia pasada a la BD es incorrecta, comprobar que exsite la tabla y que el parametro pasado existe
            echo ("<b>Error en el contador (incrementar), sentencia incorrecta</b><br />");
            die();
            
        } else if (mysql_affected_rows($lincador) == 0) {
                
            // El parametro identificador no se ha encontrado en la tabla
            echo ("<b>Error en el contador (incrementar), parametro incorrecto ($iIdentificador)</b><br />");
            die();
                
        } else if (mysql_affected_rows($lincador) > 1) {
                
            // La tabla tiene un identificador único "ID" con un valor repetido
            echo ("<b>Error en el contador (incrementar), error en la estructura de la tabla</b><br />");
            die();
                
        }
        
        // Liberamos memoria
        mysql_close($lincador);
        
        
        
    }
    
    
    function iMostrarContador($iIdentificador)
    {
        
        // Llamamos a la función asignada para conectarse al servidor
        // Ejemplo en: http://www.mcanam.com/articulos/PHP.php?id=13
        $lincador=conectarse();

        // Buscamos el contador
        $sentencia = mysql_query("SELECT CONTADOR FROM IMPRESIONES WHERE ID = ".intval($iIdentificador), $lincador);
        
        // Comprobación de errores
        
        if (!$sentencia){
            
            // La sentencia pasada a la BD es incorrecta, comprobar que exsite la tabla y que el parametro pasado existe
            echo ("<b>Error en el contador (mostrar), sentencia incorrecta</b><br />");
            die();
            
        } else if (mysql_num_rows($sentencia) == 0) {
                
            // El parametro identificador no se ha encontrado en la tabla
            echo ("<b>Error en el contador (mostrar), parametro incorrecto ($iIdentificador)</b><br />");
            die();
                
        } else if (mysql_num_rows($sentencia) > 1) {
                
            // La tabla tiene un identificador único "ID" con un valor repetido
            echo ("<b>Error en el contador (mostrar), error en la estructura de la tabla</b><br />");
            die();
                
        }else{
            
            // Si llega aquí, todo ha ido correctamente.
            
            $iResultado = mysql_fetch_assoc($sentencia);
            
            // Liberamos memoria
            mysql_free_result($sentencia);
            mysql_close($lincador);
            
            return $iResultado ["CONTADOR"];
            
        }
        
    }
  
    
?>

Links relacionados:
Conectarse a una Base de Datos MySQL
Saber si una tabla de una BD existe
Ejecutar sentencias SQL a un array bidimensional
Funciones de conexión a bases de datos (ASP)
Recoger datos del sistema en JavaScript (color, fuentes disponibles, etc.)
Conocer datos del usuario


Para cualquier duda, consulta, sugerencia, opinión, colaboración, etc; no dude en ponerse en contacto con nosotros

Copyright © 2002-2017 [McAnam]. Reservados todos los derechos.
www.mcanam.com