Foros del Web » Programando para Internet » PHP »

Conteo por visitas

Estas en el tema de Conteo por visitas en el foro de PHP en Foros del Web. saludos muchachos.... una pregunta... como puedo hacer q en mi ficha de productos se cuente cuantas visitas ha tenido el mismo... q campo debo agregar ...
  #1 (permalink)  
Antiguo 13/06/2008, 10:27
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
Conteo por visitas

saludos muchachos....
una pregunta... como puedo hacer q en mi ficha de productos se cuente cuantas visitas ha tenido el mismo...
q campo debo agregar a la base de datos y q debo agregar a la ficha para q el mismo me cuenta la cantidad de visitas recibidas eso si q cada ip lo cuente 1 vez cada 24 horas

Gracias
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #2 (permalink)  
Antiguo 13/06/2008, 11:04
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: Conteo por visitas

Hola

yo estoy ahora trabajando en un tema como ese, por ahora tengo dos tablas de la BD,
fechas_con y contador_con

en fechas_con hay

id_fecha primarykey autoincrement

fecha (date)

y en contador_con

id_visita primarykey autoincrement
ip char
fecha (date)
web_ref (char) para almacenar de donde me viene la visita
pagina_vista char donde almaceno la pagina visitada
id_fecha (int)


Luego para mostrar los resultados, hago un while a la tabla fechas_con para sacar las fechas y dentro de ese WHILE hago otro con la tabla contador_con para sacar las visitas por cada dia,

Hay que mejorarlo, pero te puede orientar bastante, y ademas ahora le estoy implementando que me haga una grafica con el numero de visitas que hago con un tipo de consulta SQL COUNT(*) que me da el numero de IP´s distintas quie he tenido en el dia

Te dejo la funcion cuenta_visita

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
    }




function 
cuenta_visita (){

        
$ip Saber_Ip();//obtengo ip
        
$fecha =  date("Y-m-d");
        
$hora date("H:i:s");
        
//$ref = gethostbyaddr($ip); //Obtiene el host de esa IP
        
$ref $_SERVER['HTTP_REFERER']; //web de referencia
        
$vista $_SERVER['PHP_SELF'];//cojo la pagina visitada
        

                                 //busco si existe la fecha de hoy
                
$query1 " SELECT * FROM fechas_con ORDER BY fecha DESC";
        
$result1 mysql_query($query1) or die( mysql_error () );
        
$row1 mysql_fetch_array ($result1);
        
$id_fecha $row1['id_fecha'];
        
        if ( 
$fecha == $row1['fecha']){ //si la fecha ya esta en la base inserto la visita

            
                           
$query 'INSERT INTO contador_con (ip, fecha,web_ref,pagina_vista, id_fecha)
                VALUES (\''
.$ip.'\',\''.$hora.'\',\''.$ref.'\',\''.$vista.'\',\''.$id_fecha.'\')';
                
                                                               
$result mysql_query($query) or die("error de insert1");
                
            }else{  
//si la fecha no esta en la base inserto fecha y visita
                
                
                
$query2 'INSERT INTO fechas_con (fecha)
                VALUE (\''
.$fecha.'\')';
                
$result2 mysql_query($query2) or die("error de insert2");
                
                
                
//busco la id_visita para insertarla en la otra tabla
                
$query3 " SELECT id_fecha FROM fechas_con WHERE fecha = '$fecha'";
                
$result3 mysql_query($query3) or die("error de select query3");
                
$row3 mysql_fetch_array ($result3);
                
$id_fecha $row3['id_fecha'];
                
                
                
//inserto la visita
                
$query 'INSERT INTO contador_con (ip, fecha,web_ref,pagina_vista, id_fecha)
                VALUES (\''
.$ip.'\',\''.$hora.'\',\''.$ref.'\',\''.$vista.'\',\''.$id_fecha.'\')';
                
$result5 mysql_query($query) or die("error de insert4");
                
                    
            
                 }

               } 

Última edición por jaronu; 13/06/2008 a las 11:12
  #3 (permalink)  
Antiguo 13/06/2008, 12:00
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
Respuesta: Conteo por visitas

fijate, yo tngo es un listado de productos y mi cliente desea q en la pagina se vea cuantas visitas tiene cada producto... pero no se como hacerlo =/
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #4 (permalink)  
Antiguo 13/06/2008, 12:03
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
Respuesta: Conteo por visitas

por lo q veo lo q haces es obtner los datos del servidor visitante y lo insertas en una tabla.. relacionandola con la otra tabla q tienes...

o sea yo en mi tabla de productos extraeria el id del producto y lo insertaria en mi tabla de conteo cada vez q se de un click???

y luego como imprimo esos resultados para un total?
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #5 (permalink)  
Antiguo 13/06/2008, 12:29
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: Conteo por visitas

Mas o menos, conforme lo vayas haciendo seguro que encontraras el mejor camino para hacerlo, pero esa es la idea

Un saludo
  #6 (permalink)  
Antiguo 13/06/2008, 12:33
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
Respuesta: Conteo por visitas

gracias brother vamos a ver como lo adapto :)
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #7 (permalink)  
Antiguo 13/06/2008, 12:34
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: Conteo por visitas

asi mas o menos


Código PHP:
$_pagi_sql "SELECT   * FROM fechas_con ORDER BY fecha DESC";  
$_pagi_result mysql_query($_pagi_sql $conexion) or die ( mysql_error() );  
 

  


$datos = array(); 
//Leemos y escribimos los registros de la página actual
while($row mysql_fetch_array($_pagi_result)){


echo 
"<table width=100% class='Estilo7'><tr bgcolor= #c3c3c3>";
echo 
"<b>Fecha : </b>";
$fecha explode ("-",$row[fecha]);

echo 
$fecha[2]."-".$fecha[1]."-".$fecha[0];
echo
"<br>";
echo
"<br>";
echo 
"</tr>";



$sql "SELECT   * FROM contador_con WHERE id_fecha = '$row[id_fecha]' ORDER BY fecha  DESC";  
$result mysql_query($sql $conexion) or die ( mysql_error() ); 


$sql4 "SELECT ip,COUNT(*)  FROM contador_con WHERE id_fecha = '$row[id_fecha]' GROUP BY ip"
echo 
"<tr>";
$res2mysql_query($sql4) or die (mysql_error()); 
$fila2 mysql_num_rows($res2);
//$fila3 = mysql_fetch_assoc ($res2);
 

$datos[] = $fila2


echo 
"<b>numero de vistantes : </b>";

echo 
$fila2;

echo 
"</tr>";

echo 
"<tr bgcolor= #cccccc>";
$visitas_tot mysql_num_rows ($result);
echo 
"<b>Total paginas vistas: </b>";
echo 
$visitas_tot;



echo 
"</tr>";

echo 
"<table  width=100% class='Estilo7'>";  
  echo 
"<tbody id='encabezado'>";//comienza el encabezado de las tablas
  
echo "<tr>";
  echo 
"<td bgcolor='#FF0000'<div align='center'><b>IP</b></div></td>";
  echo 
"<td bgcolor='#FF0000'<div align='center'><b>W. REF</b></div></td>";
  echo 
"<td bgcolor='#FF0000'<div align='center'><b>P. VISTA</b></div></td>";
  echo 
"<td bgcolor='#FF0000'<div align='center'><b>HORA</b></div></td>";
  echo 
"</tr>";
  echo 
" </tbody>";
 


while(
$row2 mysql_fetch_array($result)){
echo 
"<tbody id='contenido' >";
    echo 
"<tr bgcolor= #cccccc>";
        echo 
"<td width=13%>";
            
            echo 
$row2[ip]; 
        echo 
"</td>";
        echo 
"<td width=67%>";
            
//echo substr('abcdef', 6);  // bcd
            
$referencia $row2[web_ref];
            echo 
substr($referencia,7); 
        echo 
"</td>";
        echo 
"<td width=14%>";
            
$pagina_vist $row2[pagina_vista];
            echo  
substr($pagina_vist,10);
        echo 
"</td>";
        echo 
"<td width=6%>";
                
                echo 
$row2[fecha]; 
        echo 
"</td>";
    echo 
"</tr>";
echo 
"</tbody>";


echo 
"</tr>";




echo 
"</table>";
echo 
"<br>";
echo 
"<br>";


}
echo 
"<br>";
echo 
"<br>"
no le puse comentarios pero seguro sabes como va
  #8 (permalink)  
Antiguo 13/06/2008, 12:36
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: Conteo por visitas

Edito, no se porque entraron dos post iguales, borro este
  #9 (permalink)  
Antiguo 13/06/2008, 12:42
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
Respuesta: Conteo por visitas

tengo una duda... tu lo estas adaptando a un contador por fechas no se algo asi... yo necesito adaptarlo a una tabla de productos...
q debo insertar en la tabla productos???
el ip????
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #10 (permalink)  
Antiguo 13/06/2008, 12:48
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: Conteo por visitas

el ip es la unica menera que tendras para contar el numero de visitantes de un pruducto en un dia, no decias un sistema de conteo 24 horas, hay que distinguir entre los visitantes y una manera es con la ip

tendras que insertar la ip y relacionada con la tabla fecha
para pòder mostrar que productos visitan los usuarios por fecha
  #11 (permalink)  
Antiguo 13/06/2008, 12:52
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: Conteo por visitas

si la ip solo la dejas insertar una vez cada 24 hora, que pasa si el usuario por la mañana visita un producto y por la tarde lo vuelve ha hacer, serian dos visitas al producto del mismo usuario pero a distintas horas
  #12 (permalink)  
Antiguo 13/06/2008, 12:54
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
Respuesta: Conteo por visitas

si exacto ... ya entiendo.. es decir q necesito las dos tablas q tu hiciste puesto a q la fecha me definira si existe o no el ip en esa fecha...
perfecto ya entiendo... entonces yo deberia insertar q ? para relacionarlo a la tabla de productos... el id del productos en alguna tabla o algo en la tabla de productos algun campo de las otras???
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #13 (permalink)  
Antiguo 13/06/2008, 13:13
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: Conteo por visitas

bueno, en realidad, para hecerlo por productos, como tu quieres hacer, habras de relacionar 3 tablas

tabla fecha
id_fecha
fecha

tabla productos
id_producto
.
.
.
.

tabla visitas
id_visita
ip
id_fecha
id_producto
hora (si te hace falta, controlarias las horas de mas visitas)

seria una cosa asi, MySQL no es algo sencillo, son BD relacioneles y eso lo hacen muy bien relacionar datos de varias tablas, relaciones de uno a muchos , de muchos a muchos u de muchos a uno, te recomendaria te revisases algun manual de MySQL
para entender mejor a relacionar tablas, es dificil de explicar en un post

Un saludo
  #14 (permalink)  
Antiguo 13/06/2008, 13:19
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 7 meses
Puntos: 28
Respuesta: Conteo por visitas

peeeeeeeerfect solo queria saber eso q me pusiste de las tablas... gracias man!!!
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
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:05.