Foros del Web » Programando para Internet » PHP »

Guardar clicks e ip y borrar a diario...

Estas en el tema de Guardar clicks e ip y borrar a diario... en el foro de PHP en Foros del Web. Saludos estoy creando una aplicacion en la cual el usuario debe invitar personas a nuestra web, me gustaría poder hacer que se cuente solo una ...
  #1 (permalink)  
Antiguo 19/07/2009, 04:27
Avatar de TxT
TxT
 
Fecha de Ingreso: junio-2008
Ubicación: Canada
Mensajes: 272
Antigüedad: 15 años, 10 meses
Puntos: 2
Pregunta Guardar clicks e ip y borrar a diario...

Saludos estoy creando una aplicacion en la cual el usuario debe invitar personas a nuestra web, me gustaría poder hacer que se cuente solo una vez el click por ip en la base de datos por dia.

Es decir si es la misma ip y es ya despues de 24 horas, entonces se puede volver a contar, sino no aumenta el contador.

Gracias por la ayuda!
  #2 (permalink)  
Antiguo 19/07/2009, 15:34
Avatar de thesixhalcon  
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid (España)
Mensajes: 55
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Guardar clicks e ip y borrar a diario...

Lo que quieres hacer, debe estar acompañado por un script programado en PHP o ASP, por ejemplo. Una vez hecho, debes contar en tu servidor con CRON Jobs, así podrás ejecutar un script para que borre la tabla de la base de datos. Simplemente tendrás que poner algo así (en este caso en PHP):
limpiartabla.php
Código PHP:
<?php
include("database.php"); // Aqui la configuracion de la conexion a tu bbdd
mysql_query("TRUNCATE TABLE registroipsyclicks;");
exit;
?>
Dicho cronjob, tendrás que programarlo para que ejecute un script parecido a éste a las 00:00 de cada día, así tendrás nuevos clicks a las 24h.

El resto del script lo puedes hacer con una query que contenga un SELECT para obtener los datos como la IP, y para saber cuantos registros tienes, puedes utilizar la funcion que proporciona MySQL, COUNT(). El resto es comparar con un if y ejecutar otra query con un INSERT para que "cuente un nuevo click".

Casi casi, te lo he dado hecho jeje. Espero que sepas aprovecharlo!
Un saludo!
__________________
Respondo a MP, si de verdad es necesario. No pidas que te den el código hecho, pide el método y aprende de él.
lowsession.com - ¡La noche es tuya!
  #3 (permalink)  
Antiguo 19/07/2009, 15:55
Avatar de Ronin46  
Fecha de Ingreso: junio-2009
Mensajes: 398
Antigüedad: 14 años, 9 meses
Puntos: 8
Respuesta: Guardar clicks e ip y borrar a diario...

Bueno, eso lo que haría sería borrar todo a las 00:00, pero si un usuario tiene un registro de las 23:58, hasta las 23:58 del día siguiente no se debiera borrar, al menos es lo que entiendo.

Yo creo que lo más fácil sería guardar en la BD, la IP y la hora en la que se produjo ese click, cuando vuelva a hacer click, ves que exista esa IP en la BD, si existe, ves que hayan pasado 24 horas desde la fecha que tienes guardada en la BD. Si han pasado 24 horas pues cuentas el click y actualizas la fecha, si no han pasado, pues no haces nada.
  #4 (permalink)  
Antiguo 19/07/2009, 17:07
Avatar de TxT
TxT
 
Fecha de Ingreso: junio-2008
Ubicación: Canada
Mensajes: 272
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Guardar clicks e ip y borrar a diario...

Exacto Ronin!!!

thesixalcon tambien pense en eso, pero el problema es que debe borrarse a la hora exacta en la que el registro se subio a la web.

Yo estube pensando en hacer una tabla que diga:

fecha | ip | usuario

Entonces que se registre la fecha exacta en la que el visitante de x ip dio click a x usuario. Y luego hacer vía CRON jobs que a cada segundo se ejecute asi que si detecta que pasaron 24 horas despues de ese click se borre.

Pero el problema es que creo que hacer eso haria que el bandwidth de mi web se valla muy rapido ya que se ejecuta el script cada segundo.

o no es asi?
  #5 (permalink)  
Antiguo 19/07/2009, 18:37
Avatar de thesixhalcon  
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid (España)
Mensajes: 55
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Guardar clicks e ip y borrar a diario...

Ok, me equivoqué pues. Puede que una solución sea la de hacer un query a ver si encuentra la IP en la bbdd y si existe, despues comprobar la fecha (formato DATETIME) y restar con la fecha actual
Código PHP:
<?php
/*
 * Google: "restar datetime php" -> 5º Resultado:
 * http://www.php-hispano.net/foros/PHP/30194
 */
function horas($t1$t2) {
// calcula la diferencia en horas entre dos marcas de tiempo (aaaa-mm-dd hh:mm:ss)
// t1 - marca inicial, t2 - marca final
// primero calculamos la diferencia en días
$fecha1 explode(" "$t1);
$fecha2 explode(" "$t2);

$fecha_inicial $fecha1[0];
$fecha_final $fecha2[0];
$s = (strtotime($fecha_final) - strtotime($fecha_inicial)) / 86400;

// ahora la diferencia en horas
$tiempo_inicial explode(":"$fecha1[1]);
$tiempo_final explode(":"$fecha2[1]);
$hora_final $tiempo_final[0];
$hora_inicial $tiempo_inicial[0];

// Se resta uno si tenemos menos de 24 horas de diferencia
if($hora_final >= $hora_inicial) {
$h $hora_final $hora_inicial;
} else {
$h = (24 $hora_inicial) + $hora_final;
$s $s 1;
}

$t 24 $s $h;
return 
$t;
}
$ip $_SERVER['REMOTE_ADDR'];
$query mysql_query("SELECT fechaclick FROM clicks WHERE ip='".$ip."';");

if(
mysql_num_rows() > 0) {
  
$row mysql_fetch_assoc($result);
  if(
horas($row["fechaclick"], date("Y-m-d h:i:s")) > 24) {
    
mysql_query("DELETE FROM clicks WHERE ip='".$ip."';"); // Esto es por si quieres borrar el registro antiguo. (y espero que se haga, si no, habrá conflicto y tendrás que implementar un método que complemente a este para que escoja el registro con la fecha más actual)
    
mysql_query("INSERT...");
  } else {
    echo 
"Ya has hecho click en menos de 24 horas";
  }
} else {
  
mysql_query("INSERT .....");
}

?>
Me he tomado la libertad de cambiarte los nombres de los campos de la tabla y el nombre de la tabla, pero supongo, sabrás a que se refiere cada uno.
Con ese código, creo que tu duda está resuelta. Espero que sepas apreciar el código hecho.

Un saludo!
__________________
Respondo a MP, si de verdad es necesario. No pidas que te den el código hecho, pide el método y aprende de él.
lowsession.com - ¡La noche es tuya!
  #6 (permalink)  
Antiguo 19/07/2009, 18:56
Avatar de TxT
TxT
 
Fecha de Ingreso: junio-2008
Ubicación: Canada
Mensajes: 272
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Guardar clicks e ip y borrar a diario...

Lo aprecio muchisimo, esta increible muchisimas gracias!

Lo comprendo a la perfeccion. Solo una cosita... la fecha que guardo la primera vez en la base de datos como debo ponerla? time() o es date('h':'d'...)

Y creo que con esto terminará mi duda.

Y esto lo pongo en un cron que se ejecutará cada segundo?
  #7 (permalink)  
Antiguo 19/07/2009, 19:01
Avatar de thesixhalcon  
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid (España)
Mensajes: 55
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Guardar clicks e ip y borrar a diario...

La fecha para introducir un registro... mira, simplemente usa la funcion NOW(), aqui un ejemplo:
Código PHP:
<?php
$query 
"INSERT INTO clicks (fechaclick) VALUES ( NOW() )";
?>
Un saludo!
__________________
Respondo a MP, si de verdad es necesario. No pidas que te den el código hecho, pide el método y aprende de él.
lowsession.com - ¡La noche es tuya!
  #8 (permalink)  
Antiguo 19/07/2009, 19:03
Avatar de TxT
TxT
 
Fecha de Ingreso: junio-2008
Ubicación: Canada
Mensajes: 272
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Guardar clicks e ip y borrar a diario...

Am no conocia esa forma de poner la fecha, gracias. Supongo que el field fecha debe ser en formato date verdad?

por cierto y esto lo ejecuto de un cron automatico cada segundo?
  #9 (permalink)  
Antiguo 19/07/2009, 19:07
Avatar de thesixhalcon  
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid (España)
Mensajes: 55
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Guardar clicks e ip y borrar a diario...

Si, el campo en la bbdd llamado "fechaclick" debe estar en formato DATETIME.
Con el codigo proporcionado no hace falta utilizar tareas CRON, se autogestiona solo.
Haz pruebas con él y nos cuentas si tienes alguna duda más ;)

Un saludo!
__________________
Respondo a MP, si de verdad es necesario. No pidas que te den el código hecho, pide el método y aprende de él.
lowsession.com - ¡La noche es tuya!
  #10 (permalink)  
Antiguo 19/07/2009, 19:10
Avatar de TxT
TxT
 
Fecha de Ingreso: junio-2008
Ubicación: Canada
Mensajes: 272
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Guardar clicks e ip y borrar a diario...

Em hay si que me perdí como eso?

No necesito llamar la funcion? no necesito hacerle nada solo subir el archivo, digamos, update.php y listo? sin nada mas que hacer? o.O
  #11 (permalink)  
Antiguo 19/07/2009, 19:14
Avatar de thesixhalcon  
Fecha de Ingreso: noviembre-2007
Ubicación: Madrid (España)
Mensajes: 55
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Guardar clicks e ip y borrar a diario...

Digamos que cuando hace un click, el usuario va hacia dicha página.
Ahora debes implementar el código según tus necesidades (en los casos que ofrezco el INSERT, son los casos de éxito, es decir, cuando han pasado más de 24 horas o no hay registro ninguno con esa IP).

El campo de la base de datos debe constar asi en la sentencia CREATE TABLE para tu tabla de MySQL:
Código:
`fechaclick` DATETIME
Un saludo!

PD: Revisando el post, supongo que debería ir en la sección de PHP! :P
__________________
Respondo a MP, si de verdad es necesario. No pidas que te den el código hecho, pide el método y aprende de él.
lowsession.com - ¡La noche es tuya!
  #12 (permalink)  
Antiguo 19/07/2009, 19:18
Avatar de TxT
TxT
 
Fecha de Ingreso: junio-2008
Ubicación: Canada
Mensajes: 272
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Guardar clicks e ip y borrar a diario...

Ahhh como no pensé en eso antes, al momento que alguien hace click se detecta su ip y la hora exacta en la que esta haciendo click, si hace mas de 24 horas solo a el le afecta.

Esta Super bien hecho!!

Muchisimas Gracias thesixhalcon!
  #13 (permalink)  
Antiguo 20/07/2009, 18:47
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Guardar clicks e ip y borrar a diario...

Por favor, no colocar código de programación en el foro de Bases de Datos.
Véase: http://www.forosdelweb.com/f21/funci...-datos-413499/

Para ello están las secciones respectivas a cada lenguaje de programación.
Translado el tema al foro de PHP.

Gracias por la comprensión.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #14 (permalink)  
Antiguo 22/07/2009, 20:09
Avatar de TxT
TxT
 
Fecha de Ingreso: junio-2008
Ubicación: Canada
Mensajes: 272
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Guardar clicks e ip y borrar a diario...

Tengo un problema... :S mismo si mi ip esta guardada sigo con poder subir los clicks ya hechos al usuario y ademas me sale este error en la web:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/a***/public_html/feed.php on line 46
Gracias por tu voto ahora maria tiene 11 clicks!

Tambien me di cuenta que en la base de datos borra la field que tiene la ip correspondiente y crea una nueva con la nueva fecha.. como deberia ser, el unico problema es ese error y pues que mismo si no han pasado 24 horas, se borra y re-crea con la nueva fecha y el click es contado!
__________________
<?PHP if( nuevo() ) {
echo 'Bienvenid@ a ForosDelWeb, seguro que tus dudas seran bien respondidas y que tu ayuda sera bien agradecida.';
} ?>

Última edición por TxT; 22/07/2009 a las 20:21
  #15 (permalink)  
Antiguo 04/09/2009, 19:08
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: Guardar clicks e ip y borrar a diario...

pregunto si el tipo que hace click esta detras de un proxy como le haces

no va funcionar yo uso esto par obtener la IP real:

Código PHP:
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' );
    }

saludos!!

si ya se NO revivir post antiguos pero me dio la gana de post
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 13:22.