Foros del Web » Programando para Internet » PHP »

Uusarios online

Estas en el tema de Uusarios online en el foro de PHP en Foros del Web. Hola forosdelweb tengo lo conceptos pero no se como aplicarlos...ese es el problema Resulta que quiero que se muestre el alias de un usuario que ...

  #1 (permalink)  
Antiguo 14/05/2012, 14:42
 
Fecha de Ingreso: diciembre-2011
Mensajes: 414
Antigüedad: 12 años, 4 meses
Puntos: 1
Uusarios online

Hola forosdelweb tengo lo conceptos pero no se como aplicarlos...ese es el problema

Resulta que quiero que se muestre el alias de un usuario que está conectado y tengo hecho lo siguiente

1 - El usuario se loguea y inicia la sesión (la sesión se guarda con session_start)

2 - Tengo un campo "online" formato time en la tablo de usuarios registrados.

Y código no tengo nada de esto pero quiero saber si hasta ahy va bien la cosa.
  #2 (permalink)  
Antiguo 14/05/2012, 15:09
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Uusarios online

Yo creo que está bien, si cada vez que el usuario realice una acción guardas el tiempo en tu tabla, de esa forma podrías mediante una consulta ver los usuarios conectados, según el tiempo de su última actividad, así, por ejemplo, podrías buscar los usuarios que tengan menos de 5 minutos de actividad y mostrarlos como conectados.
  #3 (permalink)  
Antiguo 14/05/2012, 15:21
 
Fecha de Ingreso: diciembre-2011
Mensajes: 414
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Uusarios online

Entiendo pero lo que quiero es que al iniciar sesion inicie la cuenta , y al finalizar sesion deje de contar y durante esa sesion que salga como conectado

Alguna ayuda?
  #4 (permalink)  
Antiguo 14/05/2012, 15:24
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Uusarios online

¿Cuál es la duda concreta?

Por cierto, de la forma en que solicitas, el usuario tendría que cerrar sesión obligatoriamente, de lo contrario el sistema nunca sabrá que se ha desconectado
  #5 (permalink)  
Antiguo 14/05/2012, 17:28
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: Uusarios online

es dificil por que php no se ejecuta en "tiempo real" además usar los datos de una $_SESSION en otra creo que no es posible, si no más bien tienes que usar tablas en mysql.
  #6 (permalink)  
Antiguo 15/05/2012, 08:06
 
Fecha de Ingreso: diciembre-2011
Mensajes: 414
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Uusarios online

Lo único que quiero es que cuando esté conectado en la pagina se muestre el nombre de la persona

Gracias !!Y si porque es con base de datos
  #7 (permalink)  
Antiguo 15/05/2012, 08:23
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Uusarios online

Bueno creo que ya está todo dicho, si el usuario se conecta, actualizas el campo "online" en la base de datos con la hora actual, durante los próximos 5 minutos muestras el nombre del usuario en la página, ahora si el usuario se desloguea entonces borra el contenido del campo "online" por lo que el tiempo será más de 5 minutos.

Como verás el problema al final se soluciona por si mismo al borrar el contenido del campo online al desloguear
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #8 (permalink)  
Antiguo 16/05/2012, 04:14
 
Fecha de Ingreso: diciembre-2011
Mensajes: 414
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Uusarios online

Hola gente he conseguido que se muestre la hora ,

date_default_timezone_set('Europe/Madrid');
echo 'En Espanya son las: ' . date('H:i:s') . PHP_EOL;

Ahora que para enviar cuando el usuario inicia sesión como sería?Dejo el login php por si alguien me echa una mano

<?php
session_start('user');
$_SESSION['id'];
if(isset($_POST['mail']) && isset($_POST['password'])){
include 'config.php' ;
///Datos de la bd //
$mail = $_POST['mail'];
$password = $_POST['password'];
///Consulta a la base de datos
$query = mysql_query("SELECT * FROM users WHERE mail='$mail' and password='$password' ") or die (mysql_error());
///Comparar columnas //
$numrows = mysql_num_rows($query);
if($numrows == 0){
echo 'El email o la contraseña no existen';
}else{
///Obtener todos los datos posibles ///
$row = mysql_fetch_assoc($query);
$id = $row['id'];
$dbusername = $row['mail'];
$dbpassword = $row['password'];
$dbalias = $row['alias'];
$dbname = $row['name'];
$dbsurname = $row['surname'];
$time_start = microtime(true);
$_SESSION['user'] = $time_start;
//fin de while
if($mail == $dbusername){ // comparamos el email
if($password == $dbpassword){ // comparamos la contraseña
// creamos la session con todos los datos en un array
$_SESSION['user'] = array(
'id' => $id,
'username' => $dbusername,
'password' => $dbpassword,
'alias' => $dbalias,
'name' => $dbname,
'surname' => $dbsurname);
echo "Identificador: $id<br>";
echo "Nombre: $dbname<br>";
echo "Apellidos: $dbsurname<br>";
echo "Alias: $dbalias<br>";
echo "Se ha identificado correctamente";
;
}}}}
?>
  #9 (permalink)  
Antiguo 16/05/2012, 07:04
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Uusarios online

Simplemente cuando el inicio de la sesión sea correcto cambias el campo online:

mysql_query("UPDATE users SET online=NOW() WHERE mail='$mail' and password='$password' ") or die (mysql_error());

Con eso tendrás la hora a la entró, ahora lo ideal sería que repitieses esto en todas las páginas, de modo que cuando el usuario navegue tambien quede registrado el momento de su último movimiento.

Por otro lado, al desloguear tienes que eliminar la fecha:

mysql_query("UPDATE users SET online=0 WHERE mail='$mail' and password='$password' ") or die (mysql_error());
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #10 (permalink)  
Antiguo 16/05/2012, 07:46
 
Fecha de Ingreso: diciembre-2011
Mensajes: 414
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Uusarios online

Pero con esto se podría saber el usuario que está online? ahora en el momento?Porque introduce la hora solo.
Así que tendria que hacerlo mejor con un include en todas las paginas??
Y luego para mostrar al usuario como podría hacerlo?

Última edición por kfh1992; 16/05/2012 a las 07:58
  #11 (permalink)  
Antiguo 16/05/2012, 16:06
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Uusarios online

Si, si, la hora es todo lo que necesitas.

Usar un include es buena idea

para mostrar el usuario preguntas a la BD por los registros de la tabla que sean de hace menos de 5 minutos, no se si prefieras hacer un datediff o restar el timestamp... que de 5 minutos es 5*60 (5 minutos de 60 segundos).
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #12 (permalink)  
Antiguo 17/05/2012, 07:19
 
Fecha de Ingreso: diciembre-2011
Mensajes: 414
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Uusarios online

el timestamp lo he utilizado alguna vez :) si me puedes dejar el codigo base para que salga ya lo modificaré.
  #13 (permalink)  
Antiguo 17/05/2012, 07:41
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Uusarios online

el código es algo como:

SELECT * FROM users WHERE online>(UNIX_TIMESTAMP(NOW())-5*60);

en MySQL, eso te mostraría la lista completa de usuarios en linea.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #14 (permalink)  
Antiguo 17/05/2012, 07:57
Avatar de pablor21  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo - Uruguay
Mensajes: 197
Antigüedad: 15 años, 5 meses
Puntos: 13
Respuesta: Uusarios online

Quizàs esto te sea ùtil
http://php.net/manual/es/function.se...ve-handler.php

No sé qué nivel de php tienes, pero es una buena idea para lo que quieres hacer...

Saludos
__________________
Desarrolloador Freelance - http://www.mvdit.com.uy
  #15 (permalink)  
Antiguo 18/05/2012, 13:39
 
Fecha de Ingreso: diciembre-2011
Mensajes: 414
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Uusarios online

Ok , ahora tengo que hacer la consulta

$query = mysql_query("SELECT * FROM users WHERE online>(UNIX_TIMESTAMP(NOW())-5*60<br />");

Y después de la misma manera que muestro los artículos

$query = mysql_query ("SELECT * FROM articulos") or die(mysql_error());
while ($query_row = mysql_fetch_assoc($query)){
if ($row = mysql_fetch_array($query)){
echo " \n";
do {
echo "".$row['titulo']."";
echo "<br>";
echo "".$row['alias']."</a>";
echo "<br>";
echo "".$row['texto']."</a>";
echo "<br>";
} while ($row = mysql_fetch_array($query));
echo "</table> \n";
} else {
echo "¡ No se ha encontrado ningún registro !";
}}

Sería adaptarlo y hacer que salgan los usuarios?El problema radica en que no se como hacer esta parte si es así como se hace.
  #16 (permalink)  
Antiguo 18/05/2012, 15:20
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Uusarios online

tienes que poner la consulta ahi donde dice:

$query = mysql_query ("SELECT * FROM articulos") or die(mysql_error());

y luego cambiar los nombres de los campos que muestras por los que quieras mostrar de la base de datos, no se como se llaman así que no se que decirte, pero debería ser algo como:

echo $row['nombre'];
echo "<br>";
echo $row['edad'];
echo "<br>";
echo $row['comidaFavoritaQueMasLeGustaEnTodoElMundo'];
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #17 (permalink)  
Antiguo 19/05/2012, 05:41
 
Fecha de Ingreso: diciembre-2011
Mensajes: 414
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Uusarios online

Mira lo que he puesto, me sale lo siguiente que no se porque...

( ! ) Notice: Undefined variable: row in C:\wamp\www\web\index.php on line 20 y 18

<?php
session_start('user');
$query = mysql_query("SELECT * FROM users WHERE online>(UNIX_TIMESTAMP(NOW())-5*60<br />");
echo $row['alias'];
echo "<br>";
echo $row;
?>
  #18 (permalink)  
Antiguo 19/05/2012, 14:24
 
Fecha de Ingreso: diciembre-2011
Mensajes: 414
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Uusarios online

Help me!Estoy bloqueado aqui y necesito seguir
  #19 (permalink)  
Antiguo 21/05/2012, 06:52
 
Fecha de Ingreso: diciembre-2011
Mensajes: 414
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Uusarios online

Lo he dejado asi al final

$query = mysql_query("SELECT * FROM users WHERE online>(UNIX_TIMESTAMP(NOW())-1*60<br />");
echo $row['alias'];

No sale nada , solo que la variable row no esta definida.
  #20 (permalink)  
Antiguo 21/05/2012, 12:16
Avatar de HackGhost  
Fecha de Ingreso: marzo-2012
Ubicación: En la pesadilla de mis enemigos
Mensajes: 114
Antigüedad: 12 años, 1 mes
Puntos: 23
Respuesta: Uusarios online

<?php
session_start('user');
$query = mysql_query("SELECT * FROM users WHERE online>(UNIX_TIMESTAMP(NOW())-5*60<br />");
echo $row['alias'];
echo "<br>";
echo $row;
?>

a esto le falta algo:

$row[] no esta definido.

abajo de la consulta deberias pasar los datos a un array primero ($row para ser especificos)

$row = mysql_fetch_array($query);

ahi estarias definiendo la variable $row
  #21 (permalink)  
Antiguo 21/05/2012, 14:54
 
Fecha de Ingreso: diciembre-2011
Mensajes: 414
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Uusarios online

Pues lo tengo asi y no me sale absolutamente nada.

<?php
session_start('user');
$query = mysql_query("SELECT * FROM users WHERE online>(UNIX_TIMESTAMP(NOW())-1*60<br />");
$row = mysql_fetch_array($query);
echo $row['alias'];
?>
  #22 (permalink)  
Antiguo 23/05/2012, 04:38
 
Fecha de Ingreso: diciembre-2011
Mensajes: 414
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Uusarios online

He avanzado en el tema investigando y he conseguido que se muestren todos los alias de los usuarios mediante un while.
Bien ahora,entonces he pensado en que si el campo time no está en 0 este usuario se muestre.
Mi pregunta es como podría agregar eso ?

<?php
include("config.php");
$consulta=mysql_query("select * from users");
$filas=mysql_fetch_array($consulta);
$nombret=$filas['alias'];
echo $nombret;
while ($filas=mysql_fetch_array($consulta))
{
$nombret=$filas['alias'];
echo "<br>".$nombret;
}
?>
  #23 (permalink)  
Antiguo 23/05/2012, 06:22
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Uusarios online

En lo personla realizaria una tabla:

USER | DATETIME
------+-------------
Jorge | 2012-.......
------+-------------

Y despues en todas las paginas.
Código PHP:
<?php
session_start
();
require_once(
'include/functions.php');
if( ! 
/* valido session */ ){
 
goLogin();
}else{
 require (
"config.php")or die( "No se pudo cargar el archivo de conexion");
 
setOnline();
}

// CODIGO HTML

getOnline();
?>
functions.php
Código PHP:
<?php
// funciones globales de mi web
function goLogin(){
 
session_destroy();
 
header"Location: login.php" );
 exit;
}

function 
setOnline(){
 
mysql_query("
    UPDATE tabla SET DATETIME='"
.date()."'
    WHERE USER='"
.$_SESSION['user']."'
 "
)or die( "Fatal error setOnline(): ".mysql_error());
}
function 
getOnline(){
 
$query=mysql_query("
    SELECT USER FROM tabla 
    WHERE 
       DATETIME >= '"
.date('Y-m-d H:i:s',strtotime(date('Y-m-d H:i:s'"-3 minute "))."'
    "
)or die( "Fatal error getOnline(): ".mysql_error());
 while(
$On mysql_fetch_row($query)){
  echo 
$On[0]."<br>\r\n";
 }
}
?>
Claro que vas a tener que mejorar el codigo, ya que lo hice recien xD! y que en la "tabla" no estan los usuarios, vas a tener que Insertarlos a todos, o usar otra tabla y agregarle el DATETIME.

NOTA: recorda poner USER y DATETIME como INDEX

EDITO:

Me di cuenta que estan usando online>(UNIX_TIMESTAMP(NOW())-5*60), solo replazalo en getOnline
__________________
Mono programando!
twitter.com/eguimariano

Última edición por SirDuque; 23/05/2012 a las 06:29
  #24 (permalink)  
Antiguo 23/05/2012, 06:44
 
Fecha de Ingreso: diciembre-2011
Mensajes: 414
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Uusarios online

mm no seria muy complicado hacerlo como dices ? O no se puede decir como digo yo?
  #25 (permalink)  
Antiguo 23/05/2012, 06:49
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Uusarios online

Cita:
Iniciado por kfh1992 Ver Mensaje
mm no seria muy complicado hacerlo como dices ? O no se puede decir como digo yo?
xD complicado no creo, por que es un codigo valido, y lo hice en 15 min.
NO, no esta mal como lo plantean en general, es mas, es la misma idea.
Pero te di una alternativa para de TODO armes tu codigo lo mas estable y funcional posible.
__________________
Mono programando!
twitter.com/eguimariano
  #26 (permalink)  
Antiguo 23/05/2012, 07:06
 
Fecha de Ingreso: diciembre-2011
Mensajes: 414
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Uusarios online

Haaa....si puedieras ayudarme con el que te dije me harias un favor.
  #27 (permalink)  
Antiguo 23/05/2012, 07:22
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Uusarios online

kfh, estamos muy mal, para empezar no se por que tienes un tag html en medio de la consulta a mysql, no puedes estar cometiendo errores así, modificala para que quede así:

SELECT * FROM users WHERE online>DATE_SUB(NOW(), INTERVAL 5 MINUTE)

eso me ha servido bastante últimamente, es mejor que estar multiplicando segundos.

Pero quita ese "<br />"
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #28 (permalink)  
Antiguo 23/05/2012, 07:42
 
Fecha de Ingreso: diciembre-2011
Mensajes: 414
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Uusarios online

Eres un crack, me funciona perfectamente
Pero ahora cuando le doy a finalizar sesión de la manera que me comentan no se pone a cero , aunque cierra la sesión, pero el campo time no cambia.
Y el tag está para que los usuarios se vean en fila.

TT'

<?php
include("config.php");
mysql_query("UPDATE users SET online=0 WHERE mail='$mail' and password='$password' ") or die (mysql_error());
session_start();
session_unset();
session_destroy();
header("Location: index.php");
?>
  #29 (permalink)  
Antiguo 23/05/2012, 08:27
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Uusarios online

creo que no has declarado las variables $mail y $password
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #30 (permalink)  
Antiguo 23/05/2012, 11:20
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: Uusarios online

Todo esto se soluciona perfectamente con lo que ha indicado pablor21
http://www.forosdelweb.com/f18/uusar...6/#post4190103

Hace algún tiempo postee una clase que precisamente se puede adaptar para que realice todas las funciones que estáis comentando.
http://www.forosdelweb.com/f18/mostr...2/#post4038850

Espero que sirva de ayuda.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight

Etiquetas: 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 14:17.