Con MySQL almacenamos la ip y la fecha para posteriormente consultarla y compararla, ya que si no lo hacemos así tendremos un contador que simplemente sumara las visitas sin importar si es del mismo ordenador o no, primero creamos la tabla, por ejemplo que se llame "usuarios_online".
CREATE TABLE usuarios_online ( date INT NOT NULL, ip VARCHAR(15) NOT NULL );
De esta forma tenemos 2 campos, la IP y la fecha, tomamos como límite 15 caracteres para la ip ya que es el valor máximo de una IP válida (255.255.255.255), ahora vamos con la conexión, la cual explique anteriormente la entrada "Enlazar PHP con MySQL", pero de igual forma la conexión va así.
<?php $myconn = mysql_connect("servidor", "usuario", "clave"); mysql_select_db("nombre_bd",$myconn); if (!mysql_select_db("nombre_bd",$myconn)){ echo "Error al conectar a la Base de Datos"; exit(); } ?>
Como las variables las explique en la entrada anterior vamos ahora con el código que realmente nos interesa, el PHP, llamemoslo "usuarios_online.php".
<?php require_once('conexion.php'); $time = 5; $date = time() ; $ip = $_SERVER['REMOTE_ADDR'] ; $limite = $date-$time*60 ; mysql_query("DELETE FROM usuarios_online WHERE date < $limite",$myconn) ; $resp = mysql_query("SELECT * FROM usuarios_online WHERE ip='$ip'",$myconn) ; if(mysql_num_rows($resp) != 0) { mysql_query("UPDATE usuarios_online SET date='$date' WHERE ip='$ip'",$myconn) ; } else { mysql_query("INSERT INTO usuarios_online (date,ip) VALUES ('$date','$ip')",$myconn) ; } $resp = @mysql_query("SELECT * FROM usuarios_online",$myconn) or die(mysql_error()); $usuarios = mysql_num_rows($resp); if ($usuarios == 0) { echo("No hay usuarios en línea"); } else { echo("Hay $usuarios usuarios en línea"); } ?>Donde lo que hacemos con el script es tomar la IP del visitante junto la fecha y hora en que accedió al sitio y la almacenamos en nuestra base de datos, luego hacemos la consulta simple, si la IP ya existía actualizamos la hora y fecha de visita, de lo contrario almacenamos una nueva. También establecemos una tiempo límite para almacenar dicha variable, es como el tiempo límite que tendrá ese usuario en caso de inactividad, en este caso le he puesto unos 5 min. los cuales están dados por la variable "time".
Por último le pedimos que nos devuelva la cantidad de registro que hay en la base de datos, y como el script elimina los registros inactivos, únicamente nos devolvera los usuarios que están activos en el site, por lo que hacemos la comparación, si es 0 no hay ninguno si es mayor a uno entonces muestra la cantidad.
Cabe resaltar que nunca se tendrá 0 (cero) usuarios inactivos, ya que si nosotros abrimos la página para saber la cantidad de usuario automáticamente nos volvemos un usuario activo, así que si preferimos podemos cambiar un poco el script y hacerlo con menos líneas, algo como esto:
$usuarios = mysql_num_rows($resp); if ($usuarios > 0) { echo("Usuarios en línea: $usuarios"); }Ya por último nos queda cargar el dichoso script mediante un "include" o "require_once", de tal forma que donde queramos mostrar la cantidad de usuarios online colocamos lo siguiente:
<?php require_once("usuarios_online.php"); ?>
Espero sea de útilidad, y cualquier inquietud no duden en preguntar...
Recibe notificaciones por correo
Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.
Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión