Foros del Web » Programando para Internet » PHP »

Aporte de Código: USUARIOS ONLINE

Estas en el tema de Aporte de Código: USUARIOS ONLINE en el foro de PHP en Foros del Web. Bueno, aqui esta un pequeño script para saber cuantos usuarios estan ONLINE en una WEB BASE DE DATOS Código: CREATE TABLE one_users_online ( ip varchar(16) ...
  #1 (permalink)  
Antiguo 16/03/2006, 11:05
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 11 años, 11 meses
Puntos: 0
De acuerdo Aporte de Código: USUARIOS ONLINE

Bueno, aqui esta un pequeño script para saber cuantos usuarios estan ONLINE en una WEB

BASE DE DATOS

Código:
CREATE TABLE one_users_online (
  ip varchar(16) NOT NULL default '',
  time varchar(20) NOT NULL default '',
  PRIMARY KEY  (ip),
  KEY time (time)
) TYPE=MyISAM;
Archivo usuarios_online.php

Código PHP:
<?php
  $mysqlserver 
"localhost";
  
$mysqluser "usuario_BBDD";
  
$mysqlpass "password_BBDD";
  
$mysqldbname "nombre_BBDD";

  
$prefix  "one_"

  
$minutes 5;     
  
$hours 24;      

########################

  
$db mysql_connect($mysqlserver,$mysqluser,$mysqlpass) or die("Failed to connect to MySQL server");
  if(
mysql_select_db($mysqldbname)==false) { mysql_close($db); die("Failed to select database"); }

  
$secs 60*$minutes;
  
$curtime time();
  
$ip $_SERVER['REMOTE_ADDR'];
  
$num1 $num2 "";

  if(
$hours!=0) {
    
$secsFromHours 60*60*$hours;
    
mysql_query("DELETE FROM ".$prefix."users_online WHERE time<'".$curtime."'-'".$secsFromHours."'");
  } else {
    
mysql_query("DELETE FROM ".$prefix."users_online WHERE time<'".$curtime."'-'".$secs."'");
  }

  if(
mysql_result(mysql_query("SELECT COUNT(ip) FROM ".$prefix."users_online WHERE ip='".$ip."'"),0)) {
    
mysql_query("UPDATE ".$prefix."users_online SET time='".$curtime."' WHERE ip='".$ip."'") or die("Update failed");
  } else {
    
mysql_query("INSERT INTO ".$prefix."users_online VALUES ('".$ip."','".$curtime."')") or die("Insert failed");
  }

  if(
$hours!=0) {
    
$num1 mysql_result(mysql_query("SELECT COUNT(ip) FROM ".$prefix."users_online WHERE time>'".$curtime."'-'".$secs."'"),0);
    
$num2 mysql_result(mysql_query("SELECT COUNT(ip) FROM ".$prefix."users_online"),0);
  } else {
    
$num1 mysql_result(mysql_query("SELECT COUNT(ip) FROM ".$prefix."users_online WHERE time>'".$curtime."'-'".$secs."'"),0);
  }

  
mysql_close($db);

?>
y colocar esto en donde quieran que salga la cantidad

Código PHP:
        <?php
  
if($num1==1) { echo $num1." Usuario"; } else { echo $num1." Usuarios"; }
?>
Espero les sirva

SUERTE

cualquier cosa dejen su comentario
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #2 (permalink)  
Antiguo 16/03/2006, 11:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Haces muchos cálculos con fechas en PHP cuando deberías hacerlos en SQL directamente. (bueno .. el resultado en el fondo es el mismo, pero soy "pro-SQL" (hacer las cosas en SQL si se puede antes de meter "PHP" u otro lenguaje por médio para el mismo fin).

Ese campo "time" deberías usar un campo de fecha con hora de Mysql: DATETIME y así operar con SQL en cuanto a fechas. O no usar un campo "varchar" sino un "int" y guardar ahí un "time stamp" de unix que es lo que al final resulta más cómodo en principio para operar (y así lo usas).

Otra duda:
¿que objetivo tiene:?

if($hours!=0) {
$num1 = mysql_result(mysql_query("SELECT COUNT(ip) FROM ".$prefix."users_online WHERE time>'".$curtime."'-'".$secs."'"),0);
$num2 = mysql_result(mysql_query("SELECT COUNT(ip) FROM ".$prefix."users_online"),0);
} else {
$num1 = mysql_result(mysql_query("SELECT COUNT(ip) FROM ".$prefix."users_online WHERE time>'".$curtime."'-'".$secs."'"),0);
}

Sobre todo:
$num2 = mysql_result(mysql_query("SELECT COUNT(ip) FROM ".$prefix."users_online"),0);
(sobra?, está de más?)

En consecuencia .. sea como sea la condición de tu "if()" siempre das valor a $num1 de la misma forma .. Creo que el if() en general está de más .. no?

Otro detalle más:
¿Por qué los nombres de variables y sobre todo comentarios o mensajes de error en ingles?. (recuerda que con fines "educacionales" ya que somos de habla hispana sería recomendable usar el castellano para todo).

Un saludo,
  #3 (permalink)  
Antiguo 16/03/2006, 11:53
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 11 años, 11 meses
Puntos: 0
BUeno, este codigo no lo desarrolle yo, se que hay muchas cosas que no deberian estar............. tengo con el como 3 años y me ha funcionado bien, solamente quize aportarlo...
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #4 (permalink)  
Antiguo 16/03/2006, 12:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por carlosfocus
BUeno, este codigo no lo desarrolle yo, se que hay muchas cosas que no deberian estar............. tengo con el como 3 años y me ha funcionado bien, solamente quize aportarlo...
Mis comentarios sólo van enfocados a mejorar el código que expones, nada más. De hecho como dices ser usuario del mismo .. por eso te pregunto sobre algunas cosas (como ese if()) y te invito a probar mis sugerencias a ver que observas (por lo menos que funcione igual .. demostrando ahí que no hacía falta tal vez ... o si ..)

Se trata de eso también, no sólo de compartir código en general. Es bueno que el código sea comentado para que todos aprendamos .. por qué en las FAQ's ya había un ejemplo al respecto ...:

http://www.forosdelweb.com/showthrea...ios#post587240

Practicamente igual al tuyo .. sólo que el otro usa POO (programación Orientada a Objetos) ...

No quiero que te tomes mis comentarios como una "ofensa" o desmedro del código que presentas. Insisto que se trata de -aprender- y -mejorar- si se puede.

Un saludo,
  #5 (permalink)  
Antiguo 16/03/2006, 12:50
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 11 años, 11 meses
Puntos: 0
No vale, para nada Cluster........... mas bien he aprendido mucho con todos ustedes...........
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
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 02:49.