Foros del Web » Programando para Internet » PHP »

Ayuda con un codigo php

Estas en el tema de Ayuda con un codigo php en el foro de PHP en Foros del Web. Hola, vereis estoy haciendo un proyecto con base de datos y quiero conseguir algo parecido a lo que hay en yahoo respuestas http://es.answers.yahoo.com/ el tema ...
  #1 (permalink)  
Antiguo 23/03/2010, 10:15
Avatar de neoarcangel  
Fecha de Ingreso: enero-2005
Ubicación: España
Mensajes: 566
Antigüedad: 19 años, 3 meses
Puntos: 5
Ayuda con un codigo php

Hola, vereis estoy haciendo un proyecto con base de datos y quiero conseguir algo parecido a lo que hay en yahoo respuestas
http://es.answers.yahoo.com/

el tema de cuando ha posteado la pregunta, es decir, tengo un campo llamado ultima conexion, y quiero que cuando un usuario se desconecte a mi base de datos se introduzca una fecha timestamp en ese campo y posteriormente mientras pasa el tiempo sin volver a conectarse ponga algo asi

Se conecto hace xx segundos.
Se conecto hace xx minutos, xx dias, xx meses, etc asi hasta años.

He estado buscando por ahi codigos pero no encuentro nada de nada.

¿Alguién me podria ayudar.?
__________________
Mi equipo

Gigabyte GA-MA770T-UD3P Socket AM3|OZC StealthxStream 600 w | Gigabyte Radeon HD 4770 512MB GDDR5| AMD Phenom II 945 X4 Quad Core 3.0Ghz| Memoria Kingston 6GB DDR3 1333
  #2 (permalink)  
Antiguo 23/03/2010, 10:17
 
Fecha de Ingreso: diciembre-2009
Mensajes: 612
Antigüedad: 14 años, 5 meses
Puntos: 16
Respuesta: Ayuda con un codigo php

Tendrás que hacer que cuando se conecten cambie el estado 0 a 1 en la base de datos(por ejemplo, o de cualquier otra forma).

Luego, que al darle a desconectar, cambie eso y anote la hora.

Por otro lado, que si un usuario, por ejemplo lleva 5 minutos sin "pinchar", se le cambie a 0 hasta la próxima vez...

Y luego ya es solo restar, compruebas los 1, que son los conectados, y los desconectados tendrás que hacer una búsqueda a los que tengan el 0 y restar la hora de desconexión a la hora actual
  #3 (permalink)  
Antiguo 23/03/2010, 10:24
 
Fecha de Ingreso: septiembre-2005
Mensajes: 34
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Ayuda con un codigo php

Ya que no lo especificas, me imagino que estas usando MySQL como motor de base de datos.
Tienes varios tipos de campos para manejar fechas, si lo que querés es guardar tanto fecha como hora, podés utilizar DateTime o Timestamp. El primero utiliza el formato Date, mientras que el otro utiliza el formato UNIX Timestamp.

Otra forma es hacer que la fecha se actualize automaticamente cuando actualizas la fila del usuario, por lo que te ayudaría usar timestamp on update y un campo Timestamp.

Pegale una leida a la referencia http://dev.mysql.com/doc/refman/5.0/es/timestamp-4-1.html


Saludos.
  #4 (permalink)  
Antiguo 23/03/2010, 10:25
Avatar de neoarcangel  
Fecha de Ingreso: enero-2005
Ubicación: España
Mensajes: 566
Antigüedad: 19 años, 3 meses
Puntos: 5
Respuesta: Ayuda con un codigo php

Bueno, realmente el tema de la anotacion en la base de datos lo tengo mas o menos resuelto, tengo una variable de session que controla si estas o no conectado y si no estoy conectado, me hace un update de un timestamp en ese campo, eso esta controlado, el tema que no controlo es el calculo de minutos, segundos y demas y que luego te lo muestre como hace xxx segundos, hace xx minutos, hace xxx dias, meses, etc.
__________________
Mi equipo

Gigabyte GA-MA770T-UD3P Socket AM3|OZC StealthxStream 600 w | Gigabyte Radeon HD 4770 512MB GDDR5| AMD Phenom II 945 X4 Quad Core 3.0Ghz| Memoria Kingston 6GB DDR3 1333
  #5 (permalink)  
Antiguo 23/03/2010, 10:29
 
Fecha de Ingreso: septiembre-2005
Mensajes: 34
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Ayuda con un codigo php

Eso lo controlas con la funcion time() de PHP. http://ar.php.net/manual/en/function.time.php

Utiliza la clase DateTime, la misma tiene un método de clase diff() que te permite obtener la diferencia entre dos objetos DateTime.

Para referencia lee:

http://ar.php.net/manual/en/class.datetime.php
http://ar.php.net/manual/en/datetime.diff.php

Saludos
  #6 (permalink)  
Antiguo 23/03/2010, 10:48
Avatar de neoarcangel  
Fecha de Ingreso: enero-2005
Ubicación: España
Mensajes: 566
Antigüedad: 19 años, 3 meses
Puntos: 5
Respuesta: Ayuda con un codigo php

Te agradezco las propuestas, pero sinceramente las clases no las domino, a lo sumo llego a las funciones, la funcion time(), la he usado bastante pero de clases no he tocado nada.
__________________
Mi equipo

Gigabyte GA-MA770T-UD3P Socket AM3|OZC StealthxStream 600 w | Gigabyte Radeon HD 4770 512MB GDDR5| AMD Phenom II 945 X4 Quad Core 3.0Ghz| Memoria Kingston 6GB DDR3 1333
  #7 (permalink)  
Antiguo 23/03/2010, 12:17
 
Fecha de Ingreso: septiembre-2005
Mensajes: 34
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Ayuda con un codigo php

Es bastante simple el uso de esta clase.
Te doy un ejemplo que implementa su uso:

Código PHP:
Ver original
  1. $nowTime = new DateTime(); // por defecto, el constructor utiliza now() para crear el objeto
  2. /*
  3. Una vez hecha la consulta a la base de datos, tiene que devolverte
  4. un valor Timestamp, que es el de la ultima vez que el usuario ingreso.
  5. Supongamos que este valor lo almacenamos en la variable $userLogTimestamp
  6. */
  7. $lastLogTime = new DateTime($userLogTimestamp);
  8.  
  9. /*
  10. Ahora solo tendriamos que utilizar el método de clase para saber
  11. la diferencia. El método diff() devuelve un objeto DateIntervall
  12. */
  13.  
  14. $diffTime = $nowTime->diff($lastLogTime);
  15.  
  16. // Ahora podes usar la instancia para recorrer los datos
  17.  
  18. $days = $diffTime->days; // almacena los dias en la variable

Espero que te haya servido. Te recomiendo que leas un poquito más sobre clases.
Además, si querés hacer un sistema como el de Y! Answers... todavía falta mucho por aprender. No lo digo de mala gana, sino que a veces hay que empezar con proyecto más simples y luego ir subiendo la dificultad.
Nuevamente te recomiendo leer sobre clases. PHP6 va a ser un lenguaje orientado a objetos, aunque supongo que tendrá compatibilidad con versiones anteriores, nunca está demás estar informado.

Saludos !!

Etiquetas: Ninguno
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:44.