Foros del Web » Programando para Internet » PHP »

Ayuda. Nombre usuarios online

Estas en el tema de Ayuda. Nombre usuarios online en el foro de PHP en Foros del Web. Os cuento. Utilizo el blog b2, desarrollado con php y mysql, y me gustaria que aparecieran los nombres de los usuarios activos previamente registrados. Mis ...
  #1 (permalink)  
Antiguo 24/05/2003, 21:23
 
Fecha de Ingreso: abril-2003
Mensajes: 8
Antigüedad: 14 años, 7 meses
Puntos: 0
Ayuda. Nombre usuarios online

Os cuento. Utilizo el blog b2, desarrollado con php y mysql, y me gustaria que aparecieran los nombres de los usuarios activos previamente registrados. Mis conocimientos de bd y php son menos que elementales, pero estoy intentando aprender.
Lo que yo habia pensado es que al estar un usuario activo con su password y user validado se pase el nickname a una flia o tabla de la bd y a su vez php llame a esa fila o tabla para saber si hay alguien activo, y si es asi que se visualizaran en pantalla todos los usuarios validados. Una vez se haya salido de la page o se haya realizado un logout en el boton correspondiente se borraria ese nombre de la fila o tabla, esto se podria hacer utilizando la ip que posee ese usuario en ese momento relacionada al nickname.
Esta seria la idea pero no se como desarrollarla.

//Muchas gracias por escuchar vuestras voces internas.//

Última edición por Vzox; 09/06/2003 a las 21:16
  #2 (permalink)  
Antiguo 25/05/2003, 12:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si quieres ver los usuarios registrados que estan on-line .. tan sólo usa un campo extra en tu BD a ese nick cuando haga el "log" guardas la fecha de entrada (con hora) .. Eso es lo que debes usar para determinar si el usuario está en el sistema o no y acualizar ese campo de ese registro en cada página de tu blog para actualizar dicha fecha/hora .. A todo esto en tu lógica PHP debes tomar la hora actual y compararla con la del nick .. junto con algún tiempo que determines para saber si está en el sistema o no ..

Esto es la teoría .., no es dificil implementarlo .. pero antes deberías conocer un pco mas PHP y Mysql para hacer las consultas a tu BD necesarias y algo de lógica PHP ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 09/06/2003, 21:18
 
Fecha de Ingreso: abril-2003
Mensajes: 8
Antigüedad: 14 años, 7 meses
Puntos: 0
Gracias por tu respuesta Cluster.
Encontre un code en este foro y lo he modificado un poco pero no me acaba de convencer el resultado. Mi blog de noticias posee un nº de usuarios registrados pequeño por lo que es interesante que se este actualizando(refresh) cada muy poco tiempo la bd, para que realmente se encuentre en la page los usuarios que indica. Denle un vistazo al code por si tuviera algun error.
Código:
<?



include("conexio.php"); //conexion a la bd mysql



$tiempo = 300; // tiempo en minutos, duracion del usuario



$timestamp = time();

$tiempolocal = $timestamp-$tiempo;

$file = $PHP_SELF;

$usuario = $HTTP_COOKIE_VARS["nombreCK"]; //nombre de la cookie



if ( $usuario == "guest" ) {

$usuario = "guest";

}

if ( $usuario == "" ) {

$usuario = "guest";

}

if ( $usuario == "file" ) {

$usuario = "guest";

}





$result = mysql_query ("INSERT INTO online VALUES ('$timestamp','$file','$usuario','$REMOTE_ADDR')");


$delete = mysql_query ("DELETE FROM online WHERE timestamp<'$tiempolocal'");


$result = mysql_query ("SELECT DISTINCT usuario FROM online ORDER By timestamp DESC");

$cuenta_user = mysql_num_rows($result); 


$result2 = mysql_db_query($dbname, "SELECT DISTINCT ip FROM online WHERE usuario = 'guest'");

$cuenta_user2 = mysql_num_rows($result2);


if($cuenta_user == 1) {
print("<b>$cuenta_user</b> visitante\n <br>");
} else {
print("<b>$cuenta_user</b> visitantes\n <br>");
}


while ( $datos = mysql_fetch_array($result) ) {

if (( $datos[usuario] == "guest" ) || ( $datos[usuario] == "file" )) {
}

else {

    if ( $datos[usuario] == $usuario ) {

        echo "<B>";

    }

    echo "".substr($datos[usuario], 0, 14)."<br>";

    if ( $datos[usuario] == $usuario ) {

        echo "</B>";

    }
}

}

if($cuenta_user2 == 1) {
print("anónimo: <B>$cuenta_user2</B>");
} else {
print("anónimos: <B>$cuenta_user2</B>");
}

@mysql_close();




/* Para esto, debes crear una tabla con el nombre online:

code:
CREATE TABLE online (
  `timestamp` int(15) NOT NULL default '0',
  `file` varchar(100) NOT NULL default '',
  `usuario` longtext NOT NULL,
  `ip` varchar(40) NOT NULL default '',
  PRIMARY KEY  (`timestamp`),
  KEY `ip` (`ip`),
  KEY `file` (`file`)
) TYPE=MyISAM;
 */
?>
Ayuda!!
Necesito que este code sea solvente

Última edición por Vzox; 09/06/2003 a las 21:18
  #4 (permalink)  
Antiguo 09/06/2003, 21:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. dices:
"Denle un vistazo al code por si tuviera algun error" ...

No sería mejor que explicases que error tienes tu? ...

¿Ajustastes?: a menos minutos .. (que mas bíen por el código son segundos el dato que ahí introduces ..)

$tiempo = 300; // tiempo en minutos, duracion del usuario

Recuerda en poner fácil las cosas a quien te pretenda ayudar .. si ves que no obtienes respuesta .. aporta mas dátos .. explicalo de otra forma .. etc .. etc ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 09/06/2003, 22:42
 
Fecha de Ingreso: abril-2003
Mensajes: 8
Antigüedad: 14 años, 7 meses
Puntos: 0
Cluster me parece que no es para tanto, simplemente no repare en el momento de subir el codigo, y si lo cambie mas tarde. Me parece bien esa correcion. Ok.

Pero ahora al grano hermano.

Bien este es un codigo realizado por camargo al que le he realizado unos cambios dentro de mi ignorancia, por que me daba una serie de errores. Y ahora me da otros.
Como le digo a camargo en un msjprivado; me da problemas al salir de la page y volver a entrar, por que la bd aun mantiene datos de usuario activo cuando no lo esta.

Yo creo que se podria hacer comparando la ip del guest y la del u.registrado, y si son iguales, borrar la ultima. Pero no se si se podra hacer y si se puede que supongo que si, no se como hacerlo.


Código:
<?



include("conexio.php"); //conexion a la bd mysql



$tiempo = 300; // tiempo en segundos, duracion del usuario



$timestamp = time();

$tiempolocal = $timestamp-$tiempo;

$file = $PHP_SELF; // archivos

$usuario = $HTTP_COOKIE_VARS["cafeloguser"]; //nombre de la cookie donde se encuentra el nombre del usuario



if ( $usuario == "guest" ) { // aquí me parece que va dando las prodiedades para los usuarios anónimos

$usuario = "guest";

}

if ( $usuario == "" ) {

$usuario = "guest";

}

if ( $usuario == "file" ) {

$usuario = "guest";

}





$result = mysql_query ("INSERT INTO online VALUES ('$timestamp','$file','$usuario','$REMOTE_ADDR')"); // se envian los datos a la BD


$delete = mysql_query ("DELETE FROM online WHERE timestamp<'$tiempolocal'"); // se borran datos de la BD


$result = mysql_query ("SELECT DISTINCT usuario FROM online ORDER By timestamp DESC"); // se selecionan los usuarios que no han caducado, que estan activos, en sentido descendente

$cuenta_user = mysql_num_rows($result); 


$result2 = mysql_db_query($dbname, "SELECT DISTINCT ip FROM online WHERE usuario = 'guest'"); // se selecionan las ips de los usuarios anónimos que son distintas

$cuenta_user2 = mysql_num_rows($result2);


if($cuenta_user == 1) { // mostramos el nº de usuarios
print("<b>$cuenta_user</b> visitante\n <br>");
} else {
print("<b>$cuenta_user</b> visitantes\n <br>");
}


while ( $datos = mysql_fetch_array($result) ) { // aquí nos muestra el nick de los usuarios registrados

if (( $datos[usuario] == "guest" ) || ( $datos[usuario] == "file" )) {
}

else {

    if ( $datos[usuario] == $usuario ) {

        echo "<B>";

    }

    echo "".substr($datos[usuario], 0, 14)."<br>";

    if ( $datos[usuario] == $usuario ) {

        echo "</B>";

    }
}

}

if($cuenta_user2 == 1) { // aquí nos muestra los usuarios no registrados(anónimos)
print("anónimo: <B>$cuenta_user2</B>"); 
} else {
print("anónimos: <B>$cuenta_user2</B>");
}

@mysql_close();




/* Para esto, debes crear una tabla con el nombre online:

code:
CREATE TABLE online (
  `timestamp` int(15) NOT NULL default '0',
  `file` varchar(100) NOT NULL default '',
  `usuario` longtext NOT NULL,
  `ip` varchar(40) NOT NULL default '',
  PRIMARY KEY  (`timestamp`),
  KEY `ip` (`ip`),
  KEY `file` (`file`)
) TYPE=MyISAM;
 */
?>
Todo con una ?. Por que no tengo ni pu... idea.

Bien ahora el codigo de camargo pagina con el codigo

Un saludo.
  #6 (permalink)  
Antiguo 10/06/2003, 12:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Yo te comenté que juegues con el tiempo de expiración . .ese que determina en:

$tiempo = 300; // tiempo en segundos, duracion del usuario

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 10/06/2003, 18:42
Avatar de camargo  
Fecha de Ingreso: abril-2002
Ubicación: Kerétaro, Méjiko
Mensajes: 1.045
Antigüedad: 15 años, 8 meses
Puntos: 2
es exagerado 300 min de tiempo ,, yo pongo 5min en mi codigo.. ..xD

aparte de que el codigo funciona a la perfeccion y lo puedes probar en mi web!,, si te menciona algun problema en especifico deberias de postearlo para solucionarlo ;)

Salu2
__________________
http://www.chorcha.com
  #8 (permalink)  
Antiguo 11/06/2003, 06:08
 
Fecha de Ingreso: abril-2003
Mensajes: 8
Antigüedad: 14 años, 7 meses
Puntos: 0
Hola camargo. Tenia razon Cluster, podia llevar a error lo de los 300min, en realidad son:
$tiempo = 300; // tiempo en segundos, duracion del usuario
que final mente se han quedado en:
$tiempo = 60; // tiempo en segundos, duracion del usuario (por Cluster)

cita:
"aparte de que el codigo funciona a la perfeccion"

A este respecto solo una cosa, F5. Y veras como aumenta el nº de usuarios.

Funciona Ok, con el cambio en $tiempo + <?
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Expira en fecha pasada
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // Siempre páginamodificada
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0
?>(lo tengo en el index.php)

Saludos.

//Muchas gracias por escuchar vuestras voces internas//

Última edición por Vzox; 12/06/2003 a las 12:11
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 03:51.