[PHP] [Astuces] Affichage des connectés

Titre: Affichage des connectés
Date: Juin 2004
Language: PHP / MySQL
Description: Ce code permet d’afficher les connectés (càd ayant effectué une action sur le site durant les x dernières minutes)

Pour commencer, création de la table MySQL:

CREATE TABLE `connectes` (<br />&nbsp; `ip` varchar(20) NOT NULL default '',<br />&nbsp; `derniere` int(9) unsigned NOT NULL default '0',<br />&nbsp; `pseudo` varchar(32) NOT NULL default '',<br />&nbsp; PRIMARY KEY (`ip`)<br />) TYPE=MyISAM;

La fonction a appeler au début des pages:

<?php
// fonction a appeler au début de vos pages
function connectes()
{
	// minutes pendant lesquelles un utilisateur est considéré comme actif
	$temps = 5;
	
	// connection
	if( mysql_connect( BDD_HOST, BDD_PSEUDO, BDD_PASS ) )
		mysql_select_db( BDD_BDD );
	else
		return false;
	
	// ip du client --> à améliorer selon besoin
	$ip = $_SERVER['REMOTE_ADDR'];
	
	// pseudo, si une session peut exister à ce nom
	$pseudo = empty( $_SESSION['nom'] ) ? '' : $_SESSION['nom'];
	
	// timestamp actuel
	$time = time( );
	
	// on recherche l'utilsateur
	$result = mysql_query("SELECT * FROM connectes where ip='$ip'");
	if(!$result)
		return false; // erreur mysql
	
	// si l'utilisateur n'est pas deja dans la table
	if(mysql_num_rows($result) == 0)
	{
		$result = mysql_query( "INSERT INTO connectes VALUES ('$ip', '$time', '$pseudo')" );
		if(!$result)
		  return false;
	}
	else // mise-à-jour
	{
		$result = mysql_query( "UPDATE connectes SET derniere='$time', pseudo='$pseudo' WHERE ip='$ip'" );
		if(!$result)
		  return false;
	}
	
	// temps d'incativité
	$time -= $temps * 60;
	
	// on supprime ceux qui n'ont pas été connectés depuis assez longtemps
	$result = mysql_query( "DELETE LOW_PRIORITY FROM connectes WHERE derniere <= $time" );
	
	mysql_close();
}
?>

Affichage des connectés, à mettre où vous voulez 🙂

<?php
$stop = false;
if( mysql_connect( BDD_HOST, BDD_PSEUDO, BDD_PASS ) )
	mysql_select_db( BDD_BDD );
else
	$stop = true;

if( !$stop )
{
	// récupération connectés
	$result = mysql_query( "SELECT pseudo FROM connectes WHERE pseudo <> ''" );
	if( !$result )
		$stop = true;
	else
		{
		echo '<font color="#0000FF">Connectés:</font><br>';
		
		while( $connecte = mysql_fetch_array( $result) )
			echo $connecte[0] . '<br>';
	}
}

if( !$stop)
{
	// visiteurs non connectés
	$result = mysql_query( "SELECT count(*) FROM connectes WHERE pseudo = ''" );
	if( $result )
	{
		$visiteurs = mysql_fetch_array($result);
		echo '<br><font color="#0000FF">Visiteurs:</font><br>' . $visiteurs[0];
	}
}
mysql_close();
?>

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *