Foros del Web » Programando para Internet » PHP »

Mostrar ultimo acceso de cada usuario

Estas en el tema de Mostrar ultimo acceso de cada usuario en el foro de PHP en Foros del Web. Hola a todos... tengo la siguiente inquietud haber si me ayudan... Tengo una tabla llamada usuarios, esta tiene los campos: id, usuario, pass... Estaba pensando ...
  #1 (permalink)  
Antiguo 24/06/2011, 05:32
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 15 años, 6 meses
Puntos: 11
Mostrar ultimo acceso de cada usuario

Hola a todos... tengo la siguiente inquietud haber si me ayudan...

Tengo una tabla llamada usuarios, esta tiene los campos: id, usuario, pass...

Estaba pensando mostrar en la web el último acceso de un usuario y para esto pienso que agregando un campo que se llame ultimo_acceso y creando la sentencia: UPDATE usuarios SET ultimo_acceso=getdate() Where usuario=usuario podría funcionar....

Mi gran inquietud es que cada vez que el usuario ingrese la fecha se actualizará pero no quedará guardada la anterior y mi idea es tener un historial de los accesos de todos los usuarios...


alguna idea??, será que tendré que crear alguna otra tabla e intentar redireccionar los datos con un insert??

les agradezco mucho desde ya..

Ahhh tenía otra duda también haber si aprovechan el impulso, jejeje, se trata de mostrar los usuarios que están en linea, pero esto es mas dificil al parecer....

gracias.
  #2 (permalink)  
Antiguo 24/06/2011, 05:43
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Mostrar ultimo acceso de cada usuario

Crea una tabla con los campos que quieras para guardar la info y añades una query tras la validación del login.

Si el login es correcto, se ejecuta la query y guarda el id del usuario, más la info que quieras añadir, time, ip, navegador...

Después con una consulta ordenada por fecha y limit 1 coges la última fecha de visita.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #3 (permalink)  
Antiguo 24/06/2011, 05:45
 
Fecha de Ingreso: marzo-2011
Mensajes: 68
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Mostrar ultimo acceso de cada usuario

Si querés guardar tooodo el historial de acceso de los usuarios, vas a tener que hacer una nueva tabla para eso, referenciando cada momento de acceso con usuario.

Para mostrar los user on, podrías hacer un nuevo campo en la misma tabla en la que guardas los usuarios que te diga si el usuario está online.

Saludos!
  #4 (permalink)  
Antiguo 24/06/2011, 06:01
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Mostrar ultimo acceso de cada usuario

Cita:
Iniciado por FFabre Ver Mensaje
...Para mostrar los user on, podrías hacer un nuevo campo en la misma tabla en la que guardas los usuarios que te diga si el usuario está online...
Eso es algo más complejo, en el sentido de que, cuando haces el login digamos que pone el campo "online" a 1 mediante una query. En el logout hay otra query que pone el campo "online" a 0.

Pero si sale el usuario sin hacer logout?

No se como tienes configurado tu sitio, por eso lo que digo es todo teórico.

En el mío por ejemplo tengo un campo con la fecha de creación de la session, y una duración valida de X. Entonces en cada sesión comprueba el tiempo de cada campo, y todos los que tengan un diferencia mayor a la que tengo puesta de validez de la sesión marca a 0 el campo "online".

Esta configuración me viene bien a mi particularmente, pero puede orientarte para conseguir lo que necesitas.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #5 (permalink)  
Antiguo 24/06/2011, 06:25
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 15 años, 6 meses
Puntos: 11
Respuesta: Mostrar ultimo acceso de cada usuario

Gracias por las ayudas, me queda claro como hacerlo, voy a poner manos a la obra....

por lo de el usuario que está online justamente leía que algo similar a lo que me dices, poner un tiempo de unos minutos entonces cuando salga cerrando sesion pasados los minutos aparece como desconectado... pero estaba bastante enredado...

dejo un código que encontré... a la primera no me corrió... haber si a alguién le sirve en todo caso voy a volver a probarlo mas tarde...

y si pudieses de igual forma darme la idea que tu usas con porotitos para probarla plisss

1.- Primero necesitamos usar una tabla que sera la que guarde los registros y esta debe ser su estructura:

Código:
CREATE TABLE `usuariosenlinea` (
`timestamp` int(15) NOT NULL default '0',
`ip` varchar(40) NOT NULL default '',
`location` varchar(100) NOT NULL default '',
KEY `timestamp` (`timestamp`),
KEY `ip` (`ip`),
KEY `location` (`location`)
) TYPE=MyISAM;
Ahora el script, llamalo class.online.php:

Código PHP:
<?php
 
class Usuariosenlinea
{
/*
    * @autor: victor simental
    * @uri: http://phpwebmasters.com
    * @param string $servidor el host para conectar, usualmente localhost
    * @param string $basededatos el nombre de la base de datos
    * @param string $nombredb el nombre de la tabla, preferentemente no editar
    * @param string $usuario usuario de la base de datos
    * @param string $pass la contraseña de la base de datos
*/
 
  
var $servidor 'localhost';
  var 
$basededatos 'nombre_de_la_base';
  var 
$nombredb 'usuariosenlinea';
  var 
$usuario 'root';
  var 
$pass 'contraseña';
  
## Fin de Conexion ##
 
  
var $e_rror;
  
//Segundos para borrar de la base de datos a los usuarios inactivos
  
var $segundos 120;
  var 
$ahora 0;
 
    
//CONSTRUCTOR
    
function Usuariosenlinea() {
 
    
$this->recargar();
 
    }
 
    function 
cuantos() {
 
    return 
$this->ahora;
 
    }
 
    function 
enlinea() {
 
        if(
$this->ahora == 1) {
 
    echo 
$this->ahora ." Usuario en linea";
        }
        else
        {
    echo 
$this->ahora ." Usuarios en linea";
        }
 
    }
 
        function 
ipreal(){
 
            if (
$real_ip getenv('HTTP_X_FORWARDED_FOR')){
 
                
$explode_real_ip explode(","$real_ip);
                return 
trim($explode_real_ip[0]);
            }
            else
            {
            return 
getenv('REMOTE_ADDR');
            }
        }
 
        function 
error(){
 
        return 
$this->e_rror mysql_error();
 
        }
 
        function 
recargar() {
 
            
$tiempo_actual time();
            
$tiempo_final $tiempo_actual $this->segundos;
            
$ip $this->ipreal();
 
        @
mysql_connect($this->servidor$this->usuario$this->pass)
        or die(
'Error al Intentar Conectar con la base de datos '.$this->error().'');
 
        @
mysql_select_db($this->basededatos)
        or die(
'Error Seleccionando la base de datos '.$this->error().'');
 
        
$result mysql_query("SELECT ip FROM $this->nombredb WHERE ip='$ip'")
        or die(
'Error de lectura en la base de datos '.$this->error().'');
 
        if(
mysql_num_rows($result) == 0){
 
        
mysql_query("INSERT INTO $this->nombredb VALUES ('$tiempo_actual','$ip','$_SERVER[REQUEST_URI]')")
        or die(
'Error al Insertar en la base de datos '.$this->error().'');
 
        }
        else
 
        {        
        
mysql_query("UPDATE $this->nombredb SET timestamp='$tiempo_actual' where ip='$ip'")
        or die(
'Error al Insertar en la base de datos '.$this->error().'');
        }
 
        
mysql_query("DELETE FROM $this->nombredb WHERE timestamp < $tiempo_final")
        or die(
'Error al intentar borrar en la base de datos '.$this->error().'');
 
        
$result mysql_query("SELECT ip FROM $this->nombredb")
        or die(
'Error de lectura en la base de datos '.$this->error().'');
 
        
$this->ahora mysql_num_rows($result);
 
        
mysql_close();
 
        }
 
}
 
?>
Y ahora la forma de uso:

Código PHP:
<?php
//Pon esta Líneas donde quires que se visualizen los usuarios online
include("class.online.php");
 
$enlinea = new Usuariosenlinea();
$enlinea->enlinea();
?>
GRACIAS.
  #6 (permalink)  
Antiguo 24/06/2011, 06:34
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 15 años, 6 meses
Puntos: 11
Respuesta: Mostrar ultimo acceso de cada usuario

jejeje, acabo de probar el codigo nuevamente pero lo unico que hace es decirme cuantos usuarios hay en linea y no quienes...

saludos.
  #7 (permalink)  
Antiguo 24/06/2011, 07:02
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Mostrar ultimo acceso de cada usuario

No lo he probado, pero tiene una buena base con la que trabajar.

Una vez tienes la lista de usuarios, modifica el SELECT para que solo muestre los conectados.

Después solo tienes que hacer un while y saldrán solo los que están con el login a 1
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #8 (permalink)  
Antiguo 24/06/2011, 08:26
Avatar de Ximenitaa  
Fecha de Ingreso: abril-2011
Ubicación: Mexico
Mensajes: 208
Antigüedad: 13 años
Puntos: 43
Respuesta: Mostrar ultimo acceso de cada usuario

Hola:

y eso no lo puedes hacer con los datos que te proporciono stramin el post pasado, donde haces el historial de cada uno de los usuarios, sino mal recuerdo te habia comentado de crear una tabla logs y de ahi con 4 campos donde te guardaba quien entro, que realizo, fecha, incluso el ip del usuario, posiblemente de ahi mismo puedas sacar el historial de esos accesos y por supuesto la fecha ...

Bueno se me ocurrio de ahi puede ser una gran base para poder extraer esos datos .......... jejeje

Saludos !!
__________________
❤(。◕‿◕)❤ . . . Ten un dia .... GeNiAl.... !!!! . . . ❤(◕‿◕。)❤

¿Que dia es hoy? . . . Hoy, hoy, es definitivamente un dia PERFECTO !!
  #9 (permalink)  
Antiguo 24/06/2011, 10:48
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 15 años, 6 meses
Puntos: 11
Respuesta: Mostrar ultimo acceso de cada usuario

Uncontroled_Duck, es cierto ahora me detuve a mirarlo y quizá se pueda modificar....

encontré otro archivo que es para lo mismo, para mostrar cuantos usuarios hay conectados y no se conecta a la base de datos si no que hay que crear un txt y dejarlo en blanco...

lo dejo por si a alguien le sirve, eso si... no se cual es mejor ya que trabajan de formas diferentes me parece... que opinas tu?...

Ximenitaa: es cierto, quizá se pueda mezclar algo... o logicamente dar mas cualidades a la tabla logs... gracias por la idea... saludos.

aqui va el codigo para saber cuantos usuarios están conectados..:

Se crea usuarios.txt EN BLANCO.

activos.php
Código PHP:
<? $archivo="usuarios.txt"//archivo donde almacenarán los usuarios activos 
$inactivo=600//tiempo en segundos en que un usuario estará inactivo 
$contar=0
$fp=fopen($archivo,"r"); 
$tiempo=time(); 
$contenido=fread($fp,filesize($archivo)); 
fclose($fp); 
$lineas=split("\n",$contenido); 
$filas=file($archivo); 
for (
$a=0$a sizeof($filas); $a++) { 
$datos=split(':',$lineas[$a]); 
$descontar=$tiempo-$inactivo
if (
$datos[0] != $REMOTE_ADDR && $datos[1] > ($descontar)) { 
$res.= $datos[0].":".$datos[1]."\n"
$contar++; 
}} 
$res.="$REMOTE_ADDR:$tiempo\n"
$contar++; // Ya tenemos el total de usuarios activos 
$fp=fopen($archivo,"w"); 
fwrite ($fp,$res); 
fclose($fp); 
//Ahora damos formato a la salida, modifica esto a tu gusto 
//Ten en cuenta que la variable $contar contiene el nº de usuarios activos 
if ($contar==1){$contar="1 usuario activo";}else{$contar="$contar usuarios activos";} 
echo 
$contar//Lo mostramos por pantalla 
?>
Finalmente subes el activos.php y el usuarios.txt a tu server. Y luego en el lugar de tu página donde quieras ver los usuarios activos pones:
Código PHP:
<? include "activos.php"?>
gracias a todos, han salido varias ideas y en eso me voy a entretener...
  #10 (permalink)  
Antiguo 24/06/2011, 10:54
Avatar de Ximenitaa  
Fecha de Ingreso: abril-2011
Ubicación: Mexico
Mensajes: 208
Antigüedad: 13 años
Puntos: 43
Respuesta: Mostrar ultimo acceso de cada usuario

Gracias a ti por dejar un aporte mas ..

Exito !!
__________________
❤(。◕‿◕)❤ . . . Ten un dia .... GeNiAl.... !!!! . . . ❤(◕‿◕。)❤

¿Que dia es hoy? . . . Hoy, hoy, es definitivamente un dia PERFECTO !!
  #11 (permalink)  
Antiguo 24/06/2011, 10:57
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Mostrar ultimo acceso de cada usuario

Y no sería mejor trabajar con sesiones en la base de datos y mirarlo desde hay? desde las sesiones activas dentro de tu tabla de sesiones?

Un saludo!
  #12 (permalink)  
Antiguo 24/06/2011, 11:11
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Mostrar ultimo acceso de cada usuario

Cita:
Iniciado por miktrv Ver Mensaje
Y no sería mejor trabajar con sesiones en la base de datos y mirarlo desde hay? desde las sesiones activas dentro de tu tabla de sesiones?...
Para tener más control sobre sesiones, es la solución ideal.

moisesneveu, al final de todo, lo que tienes que buscar es que cumpla con lo que quieres. Yo te aconsejo que te centres en conseguir que haga solo lo que necesitas ahora, que es ver los usuarios online según esté o no conectado.

Y después de esto, verás si necesitas más o con eso es suficiente.

Elige la opción que te resulte más sencilla controlar, haz los cambios oportunos, y si vas encontrando errores o dudas sobre el desarrollo los vas comentando aquí, o creas un tema nuevo concretamente para eso, por que el tema al final se ha desviado y no va con el título.

Es una opinión personal, que como todo, habrá quien la comparta y quién no.

Un saludo,
  #13 (permalink)  
Antiguo 24/06/2011, 11:23
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 15 años, 6 meses
Puntos: 11
Respuesta: Mostrar ultimo acceso de cada usuario

Justamente miktrv, eso es lo que pretendo revisar, el caso es que los usuarios estan en una tabla usuarios, la cual consta de id, nivel, usuario y pass para mostrar cual usuario está realmente en linea no lo se hacer, mi idea es probar con un codigo que di mas arriba, hacerle algunos cambios haber si sale algo... pero también por otro lado probar creando un campo para grabar allí el tiempo en que se creó la sesión y bueno jugar allí poniendo un tiempo y cuando no se cumpla aparezca desconectado... en fin... son ideas solamente ya que aún no he podido meterme a full... pero si pudieses darme otra idea o un ejemplo, cualquier cosa es bienvenida...

gracias por opinar, saludos.

perdon por lo enredado, jeje
  #14 (permalink)  
Antiguo 24/06/2011, 11:37
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Mostrar ultimo acceso de cada usuario

Hola buenas,

Yo me refiero a guardar lo que es la session en si dentro de la base de datos en lugar de hacerlo en disco. De esta manera, te será más fácil atacar a esta tabla de sessiones para verificar quien esta online.

Te dejo información al respecto:

http://www.tonymarston.net/php-mysql...n-handler.html

Un saludo!
  #15 (permalink)  
Antiguo 24/06/2011, 12:02
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 15 años, 6 meses
Puntos: 11
Respuesta: Mostrar ultimo acceso de cada usuario

Gracias miktrv, voy a leer lo que me enviaste, se ve buenisimo... saludos.

Etiquetas: ultimo, usuarios
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:34.