Foros del Web » Programando para Internet » PHP »

Contador de visitas

Estas en el tema de Contador de visitas en el foro de PHP en Foros del Web. Se que hay montones de codigos y que esta muy hablado en el foro pero no encuentro ningun codigo que comprenda y que pueda aprovechar ...
  #1 (permalink)  
Antiguo 26/06/2008, 15:21
Avatar de Aimarejada  
Fecha de Ingreso: abril-2006
Mensajes: 207
Antigüedad: 18 años, 7 meses
Puntos: 0
Contador de visitas

Se que hay montones de codigos y que esta muy hablado en el foro pero no encuentro ningun codigo que comprenda y que pueda aprovechar asi que a ver si alguien me puede hechar una mano.

Como va a ser un contador para articulos, noticias etc necesito tener registros para todos estos contenidos por lo que necesito un campo id para identificar a que articulo o noticia pertenece, un campo total donde guardar las visitas totales y por ultimo un ips_usadas donde guardar las ips.

Para obtener la ip del visitante utilizo una función sacada del foro que es esta:

Código PHP:
function Saber_IP(){
        if(
getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")){
                 
$ip getenv("HTTP_CLIENT_IP");
        }
           elseif(
getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")){
               
$ip getenv("HTTP_X_FORWARDED_FOR");
           }
           elseif(
getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")){
               
$ip getenv("REMOTE_ADDR");
           }
           elseif(isset(
$_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")){

               
$ip $_SERVER['REMOTE_ADDR'];
           }
           else {
               
$ip "Unknown";
           }
          return 
$ip;
    } 
Luego necesito leer el ips_usadas y supongo que meterlo en un array el cual tengo que recorrer y comparar con $ip para saber si cuenta la visita o no. La dificultad es que no se como guardar eso en un array y luego hacer la comparación.

Tambien esta el tema de que tendre que separar la ips con algun caracter que luego a la hora de meterlo en el array habra que decirle algo para que mire ese caracter y sepa separar cada ip.
  #2 (permalink)  
Antiguo 27/06/2008, 02:14
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 20 años
Puntos: 48
Respuesta: Contador de visitas

Puedes usar serialize() (www.php.net/serialize) para pasar el array PHP a una cadena almacenable en la BD, y luego con unserialize() (www.php.net/unserialize) volver a pasarlo a un array y poder usar las funciones de manejo de arrays.
  #3 (permalink)  
Antiguo 27/06/2008, 05:09
Avatar de Aimarejada  
Fecha de Ingreso: abril-2006
Mensajes: 207
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Contador de visitas

Gacias he probado utilizando parte de un ocidigo que utiliaba esas funciones y lo he estado modificando para adaptarlo a lo que yo queria pero no me funciona por que no guarda nada en la base de datos.

La ip que sale de la función saberip la meto en la variable $ip haciendo $ip = Saber_Ip(); y luego hago un echo para saber si lo hace bien.


Código PHP:

//Hago una consulta para goger los datos correspondientes y luego utilizo el unserialize

$con mysql_query("SELECT ips FROM lecturas WHERE id_contenido = '"$res["id"] . "'")or die(" Error: ".mysql_error());
$numeros mysql_fetch_assoc($con);
$checkIP unserialize($numeros['ips']);


((
is_array($checkIP)) ? array_push($checkIP,$ip_num) : $checkIP=array($ip_num));
$insertarip=serialize($checkIP);


$visita=mysql_num_rows(mysql_query("SELECT ips FROM lecturas WHERE ips LIKE '%".$ip."%' AND id_contenido = '"$res["id"] . "'"));
if(!
$visita) {     


    if ((
$ip == $ip_num)) { 
        
$update "UPDATE lecturas SET ips='".$insertarip."' WHERE id_contenido = '"$res["id"] . "'";
        
$res mysql_query($update);        
    } 
  #4 (permalink)  
Antiguo 27/06/2008, 05:20
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 20 años
Puntos: 48
Respuesta: Contador de visitas

Código PHP:
$visita=mysql_num_rows(mysql_query("SELECT ips FROM lecturas WHERE ips LIKE '%".$ip."%' AND id_contenido = '"$res["id"] . "'")); 
Esa consulta para ver si la ip esta en el registro no tiene sentido ahora que se usan arrays serializados. Tendrias que usar in_array() con la ip y el array unserializado. Si no esta, añadirla, serializar el array y guardalo.
Código PHP:
((is_array($checkIP)) ? array_push($checkIP,$ip_num) : $checkIP=array($ip_num)); 
¿De donde sale $ip_num? ¿No seria $ip?
  #5 (permalink)  
Antiguo 27/06/2008, 05:54
Avatar de Aimarejada  
Fecha de Ingreso: abril-2006
Mensajes: 207
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Contador de visitas

Asi deberia de funcionar y no tengo que poner tanto codigo que yo creo que sobraba pero debo de tener alguna sintaxis mal a la hora de hacer el array.

Código PHP:
$con=mysql_query("SELECT ips FROM lecturas WHERE id_contenido = '"$res["id"] . "'"); 
$visita=mysql_fetch_array($con);  

if(
in_array($ip,$visita)) {       

 
        
$update "UPDATE lecturas SET ips='".$ip."' WHERE id_contenido = '"$res["id"] . "'";
        
$res mysql_query($update);        
     


ip_num vendria de $ip_num = preg_replace("/[^0-9\.]/","",$_REQUEST['t']); pero como es un codigo que cogi y adapte pues tampoco controlo mucho lo que hace.

Última edición por Aimarejada; 27/06/2008 a las 06:56
  #6 (permalink)  
Antiguo 28/06/2008, 12:26
Avatar de Aimarejada  
Fecha de Ingreso: abril-2006
Mensajes: 207
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Contador de visitas

Hoy estuve probando de formas diferentes y consegui que me funcionara a medias haciendolo asi:


Código PHP:
$visita=mysql_num_rows(mysql_query("UPDATE lecturas SET ips='".$ip."' WHERE id_contenido =1")); 
  
echo 
" contenido " $visita;

if(!
$visita) {       

         
$update "UPDATE lecturas SET ips='".$ip."' WHERE id_contenido =1";
        
$res4 mysql_query($update);
     

El problema es que solo me guarda una ip y cada vez que se ejecuta me machaca en el campo la ip que habia antes, es decir que no me va guardando las ips en el mismo campo sino que machaca la que ya habia si habia alghuna guardada.
  #7 (permalink)  
Antiguo 12/07/2008, 06:47
Avatar de Aimarejada  
Fecha de Ingreso: abril-2006
Mensajes: 207
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Contador de visitas

Al final consegui que me funcionara y ahora lo meti dentro de una función para poder llamarla cuando quiera, la forma de llamarla y pasarle los datos lo hago asi guardarlectura($_GET[articulo],$ip); pero no consigo que me guade nada.

El guardarlectura($_GET[articulo],$ip); haciendo un echo de esas dos variables me muestra que han cogido bien los valores pero luego la función no guarda nada el la bd.

Código PHP:
    function guardarlectura($id,$ip){
        
$conexion=conectar();
        
        
$con=mysqli_query($conexion,"SELECT COUNT(*) AS total FROM visitas WHERE id del contenido = '"$id "' AND ip de los visitantes= '".$ip."' GROUP BY id");
        
$res=mysqli_fetch_row($con);
        
        if(
$res["total"]==0) {       
             
$guardar "INSERT INTO visitas (id del contenido,ip de los visitantes) VALUES ('"$id "','"$ip ."')";
            
$lecutras mysql_query($guardar);     
        }            
        return 
$res;
    } 
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:12.