Usuarios Online con PHP & MySQL

baluart12 Mayo 2005 - 12:00am 26 comentarios
Enviar por Email Imprimir

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?

Comentarios

Imagen de manu
Imagen de tyler
tyler

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

Imagen de Bal

Son minutos. Si te fijas un par de lineas m

Imagen de luipa

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

Imagen de Lucas

En conections.php que deberia de poner?

Imagen de KhrixS
KhrixS

En 'connections.php' agrega este c

Imagen de Nicanor
Imagen de Charlynovoa

Buenas, para los interesados, aca dejo una explicaci

Imagen de piyey

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

Imagen de Luis Allende

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

Imagen de DDA

Muchas gracias por eso!

Funciona de maravilla...

Saludos!

Imagen de DDA

Para el obtener el ip es asi:

$_SERVER['REMOTE_ADDR']

saludos.

Imagen de Anonymous
Anonymous

Buenas alguien seria tan amable de comentar que se hace exactamente con la tabla esa de la bd, pq no tengo ni idea de por donde comenzar ni si se mete en un txt ni como se carga ni si se hace con phpmyadmin, vamos estoy muy verde, un saludo y gracias de ante mano :-)

Imagen de pablo anaya
pablo anaya

Ejemplo de conección:
$conn = mysql_connect("localhost", "usuario", "pass");
mysql_select_db("database");

ejemplo de ip:
$ip= $_SERVER['REMOTE_ADDR'];
o si prefieren:
if( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] != '' ){$ip= $_SERVER['HTTP_X_FORWARDED_FOR'];}else $ip= $_SERVER['REMOTE_ADDR'];

Imagen de JONI_·$&quot;$··$
JONI_·$"$··$

Muchas gracias me re sirvio!!!!!

Imagen de JONI_·$&quot;$··$
JONI_·$"$··$

perdon la ignorancia, pero como le pongo un class?

Imagen de Anonymous
Anonymous

hola me gustaria saver para que creastes function usuariosOnline($isLog)

$isLog ???

Imagen de Anonymous

oye y si mi pagina es vistidada en otro pais y la hora de halla esta mas adelantada o atrasada no afectara en la consulta de tiempo al momento de eliminar y actualizar

Imagen de frases graciosas
Imagen de Anonymous+1
Anonymous+1

Graciasssssssssss pero me gustaria saver cual es el archivo conections

Imagen de Anonymous
Anonymous

Vamos a ver.. si noteneis ni puta idea de php y mysql como pretendes instaurar en tu web html(xD) un contador de usuarios online. Empezando por aquí. Sabes lo que es una base de datos? una tabla? una constraint? una PK? en fin.. te lo dejo en tus manos xD

Imagen de Diseñador Web

Buen artículo, tiene su tiempo pero es de mucha utilidad, exactamente he podido mejorar la idea de optimización, un saludo.

Imagen de Jorgellie5
Jorgellie5

Yo lo he instalado, todo Ok, pero siempre me dice que solo tengo 1 usuario online y puedo asegurar que tengo muchos mas. Alguien me puede ayudar?

Imagen de andlinux

gracias me ha servido mucho .. se les agradece por el aporte sigan asi saludos ....

Imagen de Andlinux

si exactamente amigo alguien nos pudiera ayudar siempre me sale que solo uno (1) en linea .. cuando abro con diferentes ip .. gracias y saludos por tu aporte

Imagen de Juan david (kaizer)

Si tengo una lista de amigos tipo facebook o skype en mi red social, como hago para que me muestre una señal que me diga si el usuario esta on line???

Tutoriales

Cómo descargar videos de VK.com
En este artículo voy a explicar como descargar videos y películas...
Descargar Facebook Móvil Gratis
Por si aún no lo han hecho, es posible descargar Facebook Móvil...
Cómo generar tráfico web con las redes sociales - Paso a Paso
Muchas empresas están publicando contenidos como la forma de crear...

Artículo Recomendado

3 Tips cruciales para recuperar archivos eliminados
¿Te imaginas perder el trabajo de toda una semana en tan solo unos segundos? Todos hemos pasado por este problema. Quizás eliminamos por error un archivo importante o lo borramos sin pensar que era valioso para otro... más