PHP - Contador de visitas modificar el tiempo

   
Vista:

Contador de visitas modificar el tiempo

Publicado por Unexes (124 intervenciones) el 12/04/2015 14:29:27
Hola veréis tengo este código que funciona bien pero tengo un problema que no se solucionar y es el siguiente.

Me registra la visita de una misma IP una vez trascurridas 5 horas y lo que necesito es que me lo registre pasados 15 minutos y no he conseguido hacerlo, al final pongo lo que he intentado y no funciona, a ver si me podéis ayudar, gracias. .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
 
include('conf.php');
 
$ip = $_SERVER['REMOTE_ADDR'];
 
$sql="select ip, TIMEDIFF(NOW(), fecha), fecha, num_visitas from contador where ip='$ip'";
$rs=mysql_query($sql) or die("Problemas al ejecutar select SQL ".mysql_error());
 
$fila=mysql_fetch_array($rs);
$tiempo=$fila[1]; //Diferencia entre fecha guardada y fecha actual
$num_visitas=$fila[3]; //Número de visitas
$horas_t=substr($tiempo,0,2); //Número de horas transcurridas
$tiemRes = 5; //Varible de tiempo en horas para restringir la visita
 
if (mysql_num_rows($rs)==0)
{
$sql="insert into contador(ip, num_visitas, fecha) values('$ip', 1, NOW())";
mysql_query($sql) or die("Problemas al ejecutar la insert SQL ".mysql_error());
}
 
//Si la ip existe y han transcurrido 5hrs
elseif (mysql_num_rows($rs) > 0 && $horas_t > $tiemRes)
{
$sql="update contador set fecha=NOW(), num_visitas=’$num_visitas’+1 where ip=’$ip’";
mysql_query($sql) or die("Problemas al ejecutar update SQL ".mysql_error());
}
$sql="select SUM(num_visitas) from contador";
$rs=mysql_query($sql) or die("Problemas al ejecutar select SQL ".mysql_error());
$fila=mysql_fetch_array($rs);
$num_visitas=$fila[0];
mysql_close($link);
?>

Lo que he intentado es sustituir las lineas:
1
2
3
4
$horas_t=substr($tiempo,0,2); //Número de horas transcurridas
$tiemRes = 5; //Varible de tiempo en horas para restringir la visita
 
elseif (mysql_num_rows($rs) > 0 && $horas_t > $tiemRes)
por estas otras pero no me funciona:
1
2
3
4
$minutos_t=substr($tiempo,4,2); //Número de minutos transcurridos
$tiemRes = 15; //Varible de tiempo en minutos para restringir la visita
 
elseif (mysql_num_rows($rs) > 0 && $minutos_t > $tiemRes)

me podéis ayudar, Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Contador de visitas modificar el tiempo

Publicado por xve (5512 intervenciones) el 12/04/2015 20:42:29
Hola Unexes, si pones 15, entiendo que el código esperara 15 horas... yo lo que haria seria trabajar con segundo o milisegundos, de esta manera creo que te sera mas sencillo.

Por ejemplo, para devolver los segundos (timestamp) puedes hacer algo como:
1
$sql="select ip, TIMEDIFF(NOW(), fecha), UNIX_TIMESTAMP(fecha) as fechaTimestamp, num_visitas from contador where ip='$ip'";

Luego para ver si han pasado 15 minutos, puedes poner:
1
2
3
...
elseif (mysql_num_rows($rs) > 0 && fechaTimestamp>(time()+900))
...

De esta manera, al trabajar con segundos no tendrás problemas...

te puede servir?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Contador de visitas modificar el tiempo

Publicado por Unexes (124 intervenciones) el 13/04/2015 10:31:36
Gracias xve por tu ayuda.

Veras he sustituido las 2 lineas que me has colocado en sus respectivos sitios y he revisado el código hasta donde llegan mis conocimientos y al margen de un error que me indica en esta linea
1
elseif (mysql_num_rows($rs) > 0 && fechaTimestamp>(time()+30))
Notice: Use of undefined constant fechaTimestamp - assumed 'fechaTimestamp' in C:\wamp\www\contador.php on line 31

No me indica nada mas, pero no funciona.
La primera vez cuando no hay registros en la base de datos (donde he cambiado el tipo de datos de fecha por Timestamp) me ingresa correctamente todos los datos en los campos correspondientes, pero luego una vez pasados los 15 minutos (900 segundos) si vuelvo a entrar en la pagina no me suma nada ni tampoco me registra la nueva entrada.
No veo el error.
el código ha quedado así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
include('conf.php');
$ip = $_SERVER['REMOTE_ADDR'];
$sql="select ip, TIMEDIFF(NOW(), fecha), UNIX_TIMESTAMP(fecha) as fechaTimestamp, num_visitas from contador where ip='$ip'";
$rs=mysql_query($sql) or die("Problemas al ejecutar select SQL ".mysql_error());
$fila=mysql_fetch_array($rs);
$tiempo=$fila[1];
$num_visitas=$fila[3];
$horas_t=substr($tiempo,0,2);
$tiemRes = 5;
if (mysql_num_rows($rs)==0)
{
$sql="insert into contador(ip, num_visitas, fecha) values('$ip', 1, NOW())";
mysql_query($sql) or die("Problemas al ejecutar la insert SQL ".mysql_error());
}
elseif (mysql_num_rows($rs) > 0 && fechaTimestamp>(time()+30))
{
$sql="update contador set fecha=NOW(), num_visitas=’$num_visitas’+1 where ip=’$ip’";
mysql_query($sql) or die("Problemas al ejecutar update SQL ".mysql_error());
}
$sql="select SUM(num_visitas) from contador";
$rs=mysql_query($sql) or die("Problemas al ejecutar select SQL ".mysql_error());
$fila=mysql_fetch_array($rs);
$num_visitas=$fila[0];
mysql_close($link);
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Contador de visitas modificar el tiempo

Publicado por xve (5512 intervenciones) el 13/04/2015 17:42:39
Hola Unexes, te pido disculpas, ya que te puse el nombre de la variable directamente, y tendrías que utilizarlo con:
$fila[3]...algo así...


1
elseif (mysql_num_rows($rs) > 0 && $fila[3]>(time()+900))

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Contador de visitas modificar el tiempo

Publicado por Unexes (124 intervenciones) el 14/04/2015 09:22:36
xve gracias por seguir ayudándome.

Sigue sin funcionar he probado con todas las variables y con $fila[3] así como con $fila[2], $fila[1],$fila[0].

Hace exactamente lo mismo que antes cuando no existe ningún registro en la tabla me lo pone la primera vez después ya no hace nada, para hacer las pruebas mas rápidamente he reducido el tiempo de espera a 30 segundos.

Y sigo sin ver el problema, supongo que no estará en la base de datos pero por si acaso la que tengo es:
1
2
3
4
id......................................int....................................11............Auto Increment......... Primary Key
ip......................................varchar...........................20
num_visitas...................varchar...........................30
fecha...............................timestamp.......................0

xve como se que tu tiempo es valioso, te quiero comentar, que para solucionar mi problema acabo de encontrar la solución con otro código, que gustosamente pondré aquí por si algún compañero lo necesita, pero me gustaría averiguar porque este no funciona, si aparentemente esta todo bien.

Un saludo y gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Contador de visitas modificar el tiempo

Publicado por xve (5512 intervenciones) el 14/04/2015 20:41:27
Hola Unexes, has revisado lo que te devuelve la consulta SQL? a lo mejor no devuelve los valores correctos...

1
print_r($fila);

Ya nos mostraras que devuelve, y como lo has solucionado...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Contador de visitas modificar el tiempo

Publicado por Unexes (124 intervenciones) el 15/04/2015 08:10:45
xve lo que me devuelve es:
1
Array ( [0] => 1 [SUM(num_visitas)] => 1 )
De momento no lo he conseguido solucionar, sigo buscando porque no funciona, porque de momento no me registra la nueva visita pasados los 30 segundos que le puse para hacer las pruebas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Contador de visitas modificar el tiempo

Publicado por xve (5512 intervenciones) el 15/04/2015 08:51:44
Eso no es lo que esperaba... tiene que devolverte todos los valores del select...

Tendria que devolverte los valores del select: ip, TIMEDIFF(NOW(), fecha), UNIX_TIMESTAMP(fecha) as fechaTimestamp, num_visitas... y solo te devuelve el num_visitas¿? es muy extraño...

nos puedes volver a adjuntar el código completo? haber como ha quedado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Contador de visitas modificar el tiempo

Publicado por Unexes (124 intervenciones) el 16/04/2015 09:16:52
xve gracias por seguir ayudándome a intentar hacerlo funcionar. ya que me gustaría saber porque no funciona y tu tienes muchos mas conocimientos que yo.
Este es el código completo tal como esta ahora:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
include('conf.php');
 
$ip = $_SERVER['REMOTE_ADDR'];
 
$sql="select ip, TIMEDIFF(NOW(), fecha), UNIX_TIMESTAMP(fecha) as fechaTimestamp, num_visitas from contador where ip='$ip'";
$rs=mysql_query($sql) or die("Problemas al ejecutar select SQL".mysql_error());
 
$fila=mysql_fetch_array($rs);
$tiempo=$fila[1];
$num_visitas=$fila[3];
$horas_t=substr($tiempo,0,2);
$tiemRes = 05;
 
if (mysql_num_rows($rs)==0)
{
$sql="insert into contador(ip, num_visitas, fecha) values('$ip', 1, NOW())";
mysql_query($sql) or die("Problemas al ejecutar la insert SQL".mysql_error());
}
elseif (mysql_num_rows($rs) > 0 && $fila[3]>(time()+30))
{
$sql="update contador set fecha=NOW(), num_visitas='$num_visitas'+1 where ip='$ip'";
mysql_query($sql) or die("Problemas al ejecutar update SQL".mysql_error());
}
$sql="select SUM(num_visitas) from contador";
$rs=mysql_query($sql) or die("Problemas al ejecutar select SQL".mysql_error());
$fila=mysql_fetch_array($rs);
$num_visitas=$fila[0];
mysql_close($link);
?>

La estructura de la base de datos es:
1
2
3
4
5
6
id......................................int....................................11............Auto Increment......... Primary Key
ip......................................varchar...........................20
num_visitas...................varchar...........................30
fecha...............................timestamp.......................0
 
InnoDB - utf8_spanish_ci
y eso es todo, espero que uno de los dos demos con el problema, muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Contador de visitas modificar el tiempo

Publicado por xve (5512 intervenciones) el 16/04/2015 15:44:43
Hola Unexes, tienes que poner el: print_r($fila); debajo de la primera consulta.. y tu o has puesto al final, verdad?

algo así:

1
2
3
4
5
6
7
8
9
10
<?php
 
include('conf.php');
 
$ip = $_SERVER['REMOTE_ADDR'];
 
$sql="select ip, TIMEDIFF(NOW(), fecha), UNIX_TIMESTAMP(fecha) as fechaTimestamp, num_visitas from contador where ip='$ip'"; $rs=mysql_query($sql) or die("Problemas al ejecutar select SQL".mysql_error());
$fila=mysql_fetch_array($rs);
print_r($fila);
....

Si nos puedes mostrar lo que te devuelve...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Contador de visitas modificar el tiempo

Publicado por Unexes (124 intervenciones) el 17/04/2015 08:37:40
xve estos son los resultados que me devuelve,

La primera vez cuando la base de datos me introduce el primer registro:
1
Array ( [0] => 127.0.0.1 [ip] => 127.0.0.1 [1] => 00:00:05 [TIMEDIFF(NOW(), fecha)] => 00:00:05 [2] => 1429252140 [fechaTimestamp] => 1429252140 [3] => 1 [num_visitas] => 1 )

Y esto es lo que me devuelve pasados mas de 30 segundos cuando en teoría si funcionara bien me debía introducir el segundo registro en la base de datos:
1
Array ( [0] => 127.0.0.1 [ip] => 127.0.0.1 [1] => 00:02:54 [TIMEDIFF(NOW(), fecha)] => 00:02:54 [2] => 1429252140 [fechaTimestamp] => 1429252140 [3] => 1 [num_visitas] => 1 )

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar