zzamov

Este sitio no utiliza cookies para los visitantes.

Información a usuarios registrados y comentaristas AQUI.

Contador fácil php mysql

zzamov »

Como siempre, una feliz idea me hace estudiar … y compartir.
Necesito un contador de visitas para una página (o varias) y los códigos que veo no me gustan o no me sirven.
Lo primero es crear una base de datos y/o una tabla llamada «contador» en el servidor en la que creo los campos:

Empezamos el PHPconectando con la base de datos

if(!($conexion = mysql_connect('localhost', 'usuario_base_datos', 'contraseña_base_datos')))
die("Error: No se pudo conectar.");
if(!mysql_select_db('nombre_base_datos', $conexion))
die("Error: No existe la base de datos");

Seguimos con algunas variables que necesitaremos

$dom='miweb';//max. 10 caracteres
$email='webmaster@miweb.es';//sólo necesario como remitente
$ip=VerIp();//ahora vemos la función
$nav=$_SERVER['HTTP_USER_AGENT'];//navegador del visitante
function VerIp(){
   if ($_SERVER) {
      if($_SERVER["HTTP_X_FORWARDED_FOR"]){
         $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
      }elseif ( $_SERVER["HTTP_CLIENT_IP"]){
         $realip = $_SERVER["HTTP_CLIENT_IP"];
      }else $realip = $_SERVER["REMOTE_ADDR"];
   }else{
      if(getenv('HTTP_X_FORWARDED_FOR')){
         $realip = getenv( 'HTTP_X_FORWARDED_FOR' );
      }elseif( getenv( 'HTTP_CLIENT_IP' ) ) {
         $realip = getenv( 'HTTP_CLIENT_IP' );
      }else $realip = getenv( 'REMOTE_ADDR' );
   }
   return $realip;
}

Ahora la consulta clave

$q1=mysql_query("SELECT count(*) FROM contador WHERE 
dom='$dom'
AND ip='$ip' 
AND NOW() <= DATE_ADD(fecha, INTERVAL 3 HOUR)
AND nav='$nav'");

He decidido que 3 horas es un tiempo adecuado para registrar una nueva visita para mi gusto.

Ahora comprobamos si en esas 3 horas ese navegador desde esa ip ha estado y si no es así añadimos un registro en la tabla.

$r1=mysql_fetch_array($q1);
if($r1[0] < 1)	mysql_query("INSERT INTO contador (dom,ip,nav) VALUES ('".$dom."', '".$ip."', '".$nav."')");


Lo que necesitábamos, el contador es esto

$q2=mysql_query("SELECT count(*) FROM contador WHERE dom='$dom'");
$r2=mysql_fetch_array($q2);
$visitas = $r2[0];


y lo insertaremos en el archivo que queramos con

<?php echo 'Visitas: '.$visitas; ?>

Ahora yo he decidido que cuando llegue la visita 300 me mande un correo electrónico y actualizo el valor "env" a "1" para saber que ya me lo ha enviado.

if(intval($visitas)%300==0){
   $q3=mysql_query("SELECT count(*) FROM contador WHERE
      dom='$dom' AND env='0' ORDER BY fecha ASC,ip ASC,nav ASC");
   $r3=mysql_fetch_array($q3);
   if($r3[0] > 0){
      $mensaje = '
<html>
<head>
  <title>300 visitas nuevas de '.$dom.'</title>
</head>
<body>
  <p>300 visitas nuevas de '.$dom.'</p>
  <table>
    <tr>
      <th>Fecha</th><th>IP</th><th>Navegador</th>
    </tr>';
    $q4=mysql_query("SELECT fecha,ip,nav FROM contador WHERE
       dom='$dom' AND env='0' ORDER BY fecha ASC,ip ASC,nav ASC");
          while($r4=mysql_fetch_array($q4)){
             $mensaje.= '
                <tr><td>'.$r4['fecha'].'</td>
                <td>'.$r4['ip'].'</td>
                <td>'.$r4['nav'].'</td></tr>';
          }
          $mensaje.= '
  </table>
</body>
</html>';
        $cabeceras  = 'MIME-Version: 1.0' . "\r\n";
        $cabeceras .= 'Content-type: text/html; charset=utf-8' . "\r\n";
        $cabeceras .= 'From: '.$dom.' <'.$email.'>' . "\r\n";
        mail ( 'miemail@gmail.com' , '300 visitas nuevas en '.$dom , $mensaje , $cabeceras );
        mysql_query("UPDATE contador SET env='1' WHERE dom='$dom' AND env='0'");
   }	
}

Etiquetas: , , ,

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *