Foros del Web » Programando para Internet » PHP »

Miembros y Visitantes Online con PHP y MYSQL

Estas en el tema de Miembros y Visitantes Online con PHP y MYSQL en el foro de PHP en Foros del Web. Hola, he estado buscando el las FAQs la solucion a lo que busco, pero no encontre exactamente lo que busco. Lo que quiero lograr es ...
  #1 (permalink)  
Antiguo 05/05/2009, 20:08
Avatar de berper  
Fecha de Ingreso: abril-2009
Ubicación: Mexico
Mensajes: 74
Antigüedad: 15 años
Puntos: 2
Sonrisa Miembros y Visitantes Online con PHP y MYSQL

Hola, he estado buscando el las FAQs la solucion a lo que busco, pero no encontre exactamente lo que busco.

Lo que quiero lograr es que cuando un usuario entre a mi pagina se registre en la base de datos y se muestre la lista de los Miembros conectados y los visitantes (no registrados o no logeados).

Pienso que se podria hacer de esta forma:

Tabla MYSQL de los usuarios:

usuario, email, contrasena, avatar, conectado (si el usuario esta conectado este campo tiene el valor "si", pero si no lo esta tiene el valor "no").

la pregunta es: ¿Como hago para que cuando el usuario entre a una pagina el campo conectado de la base de datos tenga el valor "si", y cuando no haya entrado a ninguna otra pagina del sitio durante X minutos se cambie el valor de conectado a "no"?

Espero que me puedan ayudar con esto, ya que la verdad no tengo idea de como lograrlo.
Saludos. =)
  #2 (permalink)  
Antiguo 05/05/2009, 22:00
 
Fecha de Ingreso: junio-2008
Ubicación: Porto Alegre
Mensajes: 67
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Miembros y Visitantes Online con PHP y MYSQL

Hola berper!

Mira este post quizás te pueda ser de utilidad, almenos para tener una idea 

http://www.forosdelweb.com/f15/como-...-linea-396862/

Éxitos en el proyecto!

Abrazos!
  #3 (permalink)  
Antiguo 05/05/2009, 22:08
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 8 meses
Puntos: 32
Respuesta: Miembros y Visitantes Online con PHP y MYSQL

Mira eso no es complicado por ejemplo
¿Como hago para saber que usuario esta en linea? r/sencillo tienes que tener un campo que le llames conectado donde 1 seria conectado y 0 desconectado
¿Como puedo hacer para cambiar los estados? r/ cuando logues al usuario en tu aplicacion con algo mas o menos asi

$usuarios=mysql_query("select * from usuarios where usuario='$usuario' and $password='$pas' limit 1");

if(mysql_num_rows($usuarios)>0)
{
//logueas al usuario a la aplicacion y actualizas el campo contectado al valor 1

$estado1=mysql_query("update usuarios set conectado="1" where usuario='$usuario'");

}

De esa forma tendriamos al usuario dentro de tu aplicacion con el estado contectado

¿Como puedo saber si el usuario a estado inactivo durante X tiempo y como le cambio el estado?
r/ Deberias tener 1 campo mas que se ha hora_entrada o como lo quieras llamar y por medio de funciones como strtotime() comparar si la fecha de entrada es mayor a la que establescas los deslogueas utilizando nuevamente un update al campo conectado

$inactivo=600;
$hora_actual=date("h:i:s"); //hora/minuto/segundo


$recojo_entrada_usuario=mysql_query("select hora_entrada from usuarios where usuario='$usuario'");

$hora_entrada=mysql_fetch_array($recojo_entrada_us uario);

//comparamos los tiempos transcurridos
$diferencia=strtotime($hora_actual)-strtotime($hora_entrada);

if($diferencia>=$inactivo)
{
//actualizo el campo conectado de mi db

}
else
{
//actualizo la hora de entrada del usuario


}



Espero te sirva asi es mas o menos la idea de como podrias lo que quieres
Salu2
  #4 (permalink)  
Antiguo 06/05/2009, 10:28
Avatar de berper  
Fecha de Ingreso: abril-2009
Ubicación: Mexico
Mensajes: 74
Antigüedad: 15 años
Puntos: 2
Muchas gracias por sus respuestas, ambas me fueron muy utiles.

Intentaré hacer el codigo y les cuento como me fue. :)

Saludos.

Ya casi se resuelve mi duda =D, lo que hice fue crear una tabla donde se almacenan los nombres de usuario, fecha del ultimo ingreso y la ip del miembro o visitante.

Pero lo que me falta es eliminar los registros cuando el usuario ya tiene mas de X tiempo de no hacer visto alguna pagina de mi sitio. ¿Como se podria lograr?

La Tabla donde se gusrda todo esto es asi: Usuario, Ingreso, IP

Y con esta consulta lo quiero eliminar, pero no se como comparar las fechas:

Código PHP:
<?php
$fecha_de_hoy
=date('Y-m-d');
$consulta "DELETE FROM usuarios_online WHERE DATE_FORMAT(ingreso,'%Y-%m-%d') = '$fecha_de_hoy'";
$resultado mysql_query($consulta);
?>
Saludos.

Última edición por GatorV; 06/05/2009 a las 14:33
  #5 (permalink)  
Antiguo 06/05/2009, 11:27
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Respuesta: Miembros y Visitantes Online con PHP y MYSQL

La base de datos, por sí sola, no sabe quién lleva más de X minutos sin conectarse. Necesita de una consulta que se repita constantemente para ir eliminando.

Como los usuarios ya hacen una consulta al recargar tu página (para que se les muestre la lista de online), puedes aprovecharla para hacer los DELETE necesarios.

Entonces un usuario entra en tu página y se ejecutan dos pasos:
- Eliminar de la tabla usuarios_online los registros que tengan el campo ultima_actividad < (hoy - x).
- Mostrar la lista.

Saludos,
  #6 (permalink)  
Antiguo 06/05/2009, 12:13
Avatar de berper  
Fecha de Ingreso: abril-2009
Ubicación: Mexico
Mensajes: 74
Antigüedad: 15 años
Puntos: 2
Respuesta: Miembros y Visitantes Online con PHP y MYSQL

Y como podría comparar la fecha del ultimo ingreso con la fecha actual?

La fecha se guarda en la base de datos con este formato: 2009-05-06 12:51:53 (año-mes-dia hora:minutos:segundos)

Digamos que el ultimo ingreso de X usuario es de esta fecha 2009-05-06 12:51:53 y quiero que al entrar otro usuario se ejecute toda la consulta y si el usuario X en ese momento tiene mas de 10 minutos sin haber visto otra pagina del sitio se elimine podría usar algo así?:

DELETE FROM usuarios_online WHERE ingreso < (NOW() - 10)

El problema es que no se como restarle solo los minutos a la fecha guardada en la base de datos sin dejar de tomar en cuenta el mes, dia, hora.

Espero alguien me pueda ayudar.
Gracias por su tiempo y paciencia. Saludos.
  #7 (permalink)  
Antiguo 06/05/2009, 12:20
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Respuesta: Miembros y Visitantes Online con PHP y MYSQL

Hola:

Mira en el manual de MySQL, la descripción para DATE_SUB() que es la misma para DATE_ADD(), sólo que una resta y la otra suma:
http://dev.mysql.com/doc/refman/5.1/...ction_date-add

Como ves, puedes usar INTERVAL y especificar la unidad (DAY, HOUR, MINUTE, etc).

Saludos,
  #8 (permalink)  
Antiguo 06/05/2009, 13:22
Avatar de berper  
Fecha de Ingreso: abril-2009
Ubicación: Mexico
Mensajes: 74
Antigüedad: 15 años
Puntos: 2
Respuesta: Miembros y Visitantes Online con PHP y MYSQL

Gracias, ya logre lo que queria hacer, gracias a todos por ayudarme =D

Dejo el codigo que use para eliminar los usuarios que tienen mas de 10 minutos sin entrar a la web por si alguien lo necesita:

Código sql:
Ver original
  1. DELETE FROM usuarios_online WHERE ingreso < DATE_SUB(NOW(),INTERVAL 10 MINUTE)

Saludos.
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 20:44.