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
el tiempo que indicais con un 5 son minutos o segundos????
Son minutos. Si te fijas un par de lineas m
saludos les dejo una direcion para escuchar musica en linea aver si les gusta
En conections.php que deberia de poner?
En 'connections.php' agrega este c
No entendemos. Podr
Buenas, para los interesados, aca dejo una explicaci
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
de que otra manera lo podría hacer sin base de datos para saber los users online solamente?
Muchas gracias por eso!
Funciona de maravilla...
Saludos!
Para el obtener el ip es asi:
$_SERVER['REMOTE_ADDR']
saludos.
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 :-)
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'];
Muchas gracias me re sirvio!!!!!
perdon la ignorancia, pero como le pongo un class?
hola me gustaria saver para que creastes function usuariosOnline($isLog)
$isLog ???
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
Buen ejemplo, ¡Gracias!
Graciasssssssssss pero me gustaria saver cual es el archivo conections
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
Buen artículo, tiene su tiempo pero es de mucha utilidad, exactamente he podido mejorar la idea de optimización, un saludo.
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?
gracias me ha servido mucho .. se les agradece por el aporte sigan asi saludos ....
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
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???