Autor Tema: Ayuda - Sacar usuarios online...  (Leído 1572 veces)

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Ayuda - Sacar usuarios online...
« Respuesta #15 en: 03 de Agosto de 2011, 01:14:41 am »
Edito: Ya que mientras me contesta westwest he probado tu codigo TLX y sigue saliendo coma al final del ultimo usuario.
Tendria que salir asi: G12, Henvak, TLX
Y sale asi: G12, Henvak, TLX,

Probablemente en la BD haya algún usuario con el nombre vacío.
De todas formas la manera de west también es muy buena, lo mio era solo una forma chapucera de salir del paso ;)

Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Comunidad PHPeros

Re:Ayuda - Sacar usuarios online...
« Respuesta #15 en: 03 de Agosto de 2011, 01:14:41 am »

Desconectado G12

  • PHPer@ Fijo
  • ***
  • Mensajes: 153
  • Karma: 0
  • Nuev@ PHPer@
    • Ver Perfil
Re:Ayuda - Sacar usuarios online...
« Respuesta #16 en: 03 de Agosto de 2011, 01:25:30 am »
Probablemente en la BD haya algún usuario con el nombre vacío.
De todas formas la manera de west también es muy buena, lo mio era solo una forma chapucera de salir del paso ;)

Saludos!

Si anterior duda ¿la sabrias resolver?

Si quiero añadir una funcion a el echo
Por ejemplo: Contador($respuestaFinal->usuario); me sale error

¿Como lo tendria que hacer?

---

Edito: Tengo un extraño problema, tengo una amiga que se conecta a la web y sale en conectados, pero cuando cierra el navegador automaticamente vuelve su valor en "no" en conectados y no sale en conectados. Lo extraño es que a la mayoria de gente que entra si cierra el navegador hasta que el time no sea mayor del que tiene no aparece desconectado.

¿COSAS PARANORMALES? :l

Desconectado G12

  • PHPer@ Fijo
  • ***
  • Mensajes: 153
  • Karma: 0
  • Nuev@ PHPer@
    • Ver Perfil
Re:Ayuda - Sacar usuarios online...
« Respuesta #17 en: 03 de Agosto de 2011, 14:16:55 pm »
Otra pequeña pregunta.
Me acaba de pasar un error, o no se si es algo normal.
Me ha empezado a pasar esta mañana (sin haber modificado nada).

Si el usuario al logearse consigue un time()+300 igual a 5 minutos. Pasados esos 5 minutos a no ser que ese usuario no refresque la pagina que saca los usuarios online no hace el UPDATE para cambiar el valor a NO a ese usuario en conectado.

Me explico: A no ser que entre el usuario otra vez a el archivo online.php no cambia su estado a no_conectado.

session_start();
include(&
#39;mysql.php');
$consulta mysql_query("SELECT * FROM usuarios");
$tiempo time();
while(
$respuesta mysql_fetch_object($consulta)){
	
$tiempo time();
	
if(
$respuesta->tiempo_on >= $tiempo){
	

	
	
mysql_query("UPDATE usuarios SET estaConectado = 'si' WHERE usuario = '".$respuesta->usuario."'");
	
}else{
	
	
mysql_query("UPDATE usuarios SET estaConectado = 'no' WHERE usuario = '".$respuesta->usuario."'");
	
}
}


« Última modificación: 03 de Agosto de 2011, 14:20:17 pm por G12 »

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Ayuda - Sacar usuarios online...
« Respuesta #18 en: 03 de Agosto de 2011, 15:25:17 pm »
Eso es obvio, tus scripts se ejecutan mediante una petición al servidor. El script se ejecutará cada vez que entren a la página.

Desconectado G12

  • PHPer@ Fijo
  • ***
  • Mensajes: 153
  • Karma: 0
  • Nuev@ PHPer@
    • Ver Perfil
Re:Ayuda - Sacar usuarios online...
« Respuesta #19 en: 03 de Agosto de 2011, 20:25:17 pm »
¿Y que tengo que hacer para que se ejecute sin que nadie entre a la pagina?

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Ayuda - Sacar usuarios online...
« Respuesta #20 en: 03 de Agosto de 2011, 22:29:01 pm »
¿Y que tengo que hacer para que se ejecute sin que nadie entre a la pagina?
Ahí ya estamos hablando de algo que depende de tu servidor web. Investiga un poco sobre "cronjobs" que es un mecanismo en el que puedes programar los intervalos de fecha y hora en que un script se debe ejecutar.

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Ayuda - Sacar usuarios online...
« Respuesta #21 en: 04 de Agosto de 2011, 02:05:41 am »
¿Y que tengo que hacer para que se ejecute sin que nadie entre a la pagina?

Sin cronjobs no se puede, pero puedes ejecutarlo siempre ANTES de mostrar los usuarios online, de esa forma no habría problemas.

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado guitobon

  • PHPerit@
  • *
  • Mensajes: 14
  • Karma: 0
  • Sexo: Masculino
  • Nuev@ PHPer@
    • Ver Perfil
    • Optimizacion WEB
Re:Ayuda - Sacar usuarios online...
« Respuesta #22 en: 05 de Agosto de 2011, 21:37:24 pm »
Hola G12.
Coincido mas o menos con ferdy.

No obstante me gustaria hacerte una observación (critica constructiva).

Nunca anides consultas SQL. Cuando apenas hay datos en la BD pues nos e nota, pero el coste es demasiado exponencial.

Suponeniendo que tengas 500 usuarios, con tu codigo (la parte de los usuarios online):

$consulta = mysql_query("SELECT * FROM usuarios");
$tiempo_actual = time();
while($respuesta = mysql_fetch_object($consulta)){
    $tiempo_actual = time();
    if($respuesta->tiempoc >= $tiempo_actual){
       mysql_query("UPDATE usuarios SET conectado = 'si' WHERE usuario = '".$respuesta->usuario."'");
    }else{
       mysql_query("UPDATE usuarios SET conectado = 'no' WHERE usuario = '".$respuesta->usuario."'");
    }
}

Para cada página  que visita cada usuario, lanzarías 501 consultas a la BD (1 select y 500 updates).

Hay otras optimizaciones mas finas, que no afectan tanto pero yo personalmente tambien lo hago.
El campo conectado ¿porque es un varchar? A Mysql le cuesta mucho menos comparar con 0 y 1 (true, false). Si tienes pocas filas no importa demasiado, pero al programador le cuesta lo mismo hacerlo de una forma u otra.

Para este caso concreto, si quisieras hacerlo asi, aunque ami me gsuta mucho mas la forma de ferdy, luego de arrelgar lo del tiempod e conexion, jugaria con ese campo y haria un update condicionado por el tiempo de conexion para poner un 1 en el campo conectado, y otro updtae para poner el cero, y esas consultas fuera del bucle.
Asi se pasa de 501 querys a 3.

Saludos

Desconectado G12

  • PHPer@ Fijo
  • ***
  • Mensajes: 153
  • Karma: 0
  • Nuev@ PHPer@
    • Ver Perfil
Re:Ayuda - Sacar usuarios online...
« Respuesta #23 en: 05 de Agosto de 2011, 22:58:33 pm »
No se mucho de funciones.
Y tampoco de true o false :D desgraciadamente.

Te agradecería un poco de ayuda.

Desconectado guitobon

  • PHPerit@
  • *
  • Mensajes: 14
  • Karma: 0
  • Sexo: Masculino
  • Nuev@ PHPer@
    • Ver Perfil
    • Optimizacion WEB
Re:Ayuda - Sacar usuarios online...
« Respuesta #24 en: 06 de Agosto de 2011, 00:23:22 am »
Aqui esta el codigo de usuarios online que te sugeria:

<?php
session_start();
include('mysql.php');
$tiempo_actual = time();
mysql_query("UPDATE usuarios SET conectado = 'si' WHERE tiempo_on > ".$tiempo_actual);
mysql_query("UPDATE usuarios SET conectado = 'no' WHERE tiempo_on <= ".$tiempo_actual);
$estaConectado = "si";
$consultaDos = mysql_query("SELECT * FROM usuarios WHERE conectado = '".$estaConectado."'");
$respuestaDos = mysql_num_rows($consultaDos);
if($respuestaDos == 0){
?>
No hay ningun usuario conectado.
<?php
}else{
    while($respuestaFinal = mysql_fetch_object($consultaDos)){
?>
<?php echo $respuestaFinal->usuario; ?>
<?php
    }
}
?>

Fijate que con solo 3 consultas, indepenidentemente del numero de usuarios que tengas en la tabla usuarios, consigues lo mismo, pero sin machacar al servidor de Base de Datos.

Si quieres hilar mas fino, cambia la definicion de la tabla de la BD y el campo conectado lo haces de tipo shortint (entero pequeño) y en todas tus consultas en vez de poner "si" o "no", pones 0 o 1 (sin comillas). Las consultas que deben buscar por el valor de un numero entero, corren mucho mas que las que deben buscar una cadena de caracteres.

Lo primero seguro que lo notas muchisimo, lo segundo para una tabla tipo el numero de usuarios pues la verdad que tampoco es que sea critico, a no ser tengas mas usuarios que facebook.