Usuarios Online con PHP & MySQL

En este corto artículo enseñamos como mostrar la cantidad de visitantes de nuestro sitio Web. Para darle un pequeño valor agregado, en caso de ser uno el visitante se mostrará en singular, en caso de ser más se mostrará en plural, mediante el uso de un sencillo condicional.


Primero, creamos nuestra tabla Gente On Line:


create table gente_online (
date int not null,
ip varchar(40) not null
);


Luego, creamos el script que nos muestra los usuarios en línea y lo guardamos como users_online.php:


<?php
// nos conectamos a la BD
require_once('connections.php');
// Tiempo máximo de espera
$time = 5 ;
// Momento que entra en línea
$date = time() ;
// Recuperamos su IP
$ip = $REMOTE_ADDR ;
// Tiempo Limite de espera 
$limite = $date-$time*60 ;
// si se supera el tiempo limite (5 minutos) lo borramos
mysql_query("delete from gente_online where date < $limite") ;
// tomamos todos los usuarios en linea
$resp = mysql_query("select * from gente_online where ip='$ip'") ;
// Si son los mismo actualizamos la tabla gente_online
if(mysql_num_rows($resp) != 0) {
mysql_query("update gente_online set date='$date' where ip='$ip'") ;
}
// de lo contrario insertamos los nuevos
else {
mysql_query("insert into gente_online (date,ip) values ('$date','$ip')") ;
}
// Seleccionamos toda la tabla
$query = "SELECT * FROM gente_online";
// Ocultamos algún mensaje de error con @
$resp = @mysql_query($query) or die(mysql_error());
// almacenamos la consulta en la variable $usuarios
$usuarios = mysql_num_rows($resp);
// Si hay 1 usuarios se muestra en singular; si hay más de uno, en plural
if($usuarios > 1 || $usuarios == 0){echo("Hay ");}else{echo("Hay ");}if($usuarios == 0){echo("no ");}else{echo($usuarios." ");}if($usuarios > 1 || $usuarios == 0){echo("usuarios en línea.");}else{echo("usuario en línea.");}
?>


Fianlmente, para mostrarlo en nuestras distintas páginas web, colocamos un require() en cada una.


<?
require_once("users_online.php");
?>


En un artículo posterior enseñaremos como mostrar su IP a nuestros visitantes y crear un cuadro ¿Quién está en Línea?

Hola est

Hola est

Enviado por manu (no verificado) el Mié, 11/29/2006 - 00:50.
el tiempo que indica

el tiempo que indicais con un 5 son minutos o segundos????

Enviado por tyler (no verificado) el Jue, 07/12/2007 - 11:14.
Son minutos. Si te f

Son minutos. Si te fijas un par de lineas m

Enviado por Bal (no verificado) el Vie, 07/13/2007 - 13:55.
saludos les dejo una

saludos les dejo una direcion para escuchar musica en linea aver si les gusta

Enviado por luipa (no verificado) el Jue, 08/23/2007 - 15:22.
En conections.php qu

En conections.php que deberia de poner?

Enviado por Lucas (no verificado) el Sáb, 08/25/2007 - 11:58.
En 'connections.php'

En 'connections.php' agrega este c

Enviado por KhrixS (no verificado) el Dom, 09/23/2007 - 19:57.
No entendemos. Podr

No entendemos. Podr

Enviado por Nicanor (no verificado) el Vie, 11/02/2007 - 11:15.
Buenas, para los int

Buenas, para los interesados, aca dejo una explicaci

Enviado por Charlynovoa (no verificado) el Sáb, 02/09/2008 - 21:12.
Hola amigos, Modifiqué un

Hola amigos,
Modifiqué un poco el código brindado anteriormente para que muestre el total de usuarios, los usuarios registrados y los invitados.

Esta función recibe como parámetro una bandera que indica is el usuario actual está logeado o no.

La linea global $tablas_conexion; es una variable de arreglo global que contiene las definiciones de mis tablas y los nombres en la base de datos, pueden sustituir la parte $tablas_conexion["online"] por el nombre de su tabla.

También a la tabla se le añadió un campo llamado isLogged de tipo binary.

function usuariosOnline($isLog) {
require_once("conexion.php");
global $tablas_conexion;
$time = 5 ;
$date = time() ;
$ip = $_SERVER['REMOTE_ADDR'];
$limite = $date-$time*60 ;
Conectarse();
mysql_query("delete from ".$tablas_conexion["online"]." where date < $limite") ;
$resp = mysql_query("select * from ".$tablas_conexion["online"]." where ip='$ip'") ;
if(mysql_num_rows($resp) != 0) {
mysql_query("update ".$tablas_conexion["online"]." set date='$date', isLogged=".($isLog?1:0)." where ip='$ip'");
} else {
mysql_query("insert into ".$tablas_conexion["online"]." (date,ip,isLogged ) values ('$date','$ip',".($isLog?1:0).")");
}
//Usuarios totales
$query = "SELECT * FROM ".$tablas_conexion["online"]."";
$resp = @mysql_query($query) or die(mysql_error());
$totales = mysql_num_rows($resp);
//Usuarios no registrados
$query = "SELECT * FROM ".$tablas_conexion["online"]." WHERE `isLogged` = 0";
$resp = @mysql_query($query) or die(mysql_error());
$noregistrados = mysql_num_rows($resp);
//Usuarios registrados
$query = "SELECT * FROM ".$tablas_conexion["online"]." WHERE `isLogged` = 1";
$resp = @mysql_query($query) or die(mysql_error());
$registrados = mysql_num_rows($resp);

echo 'Total en linea: '.$totales.''
.'Invitados: '.$noregistrados.''
.'Usuarios: '.$registrados.'';
}

Espero les sea de utilidad y cualquier consulta me pueden escribir a mi mail.

Saludos

Enviado por piyey (no verificado) el Sáb, 10/25/2008 - 18:08.
de que otra manera lo podría

de que otra manera lo podría hacer sin base de datos para saber los users online solamente?

Enviado por Luis Allende (no verificado) el Mar, 01/13/2009 - 11:23.

Deja tu comentario

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato