Qui est connecté à votre site (à adapter au votre ...)

Contenu du snippet

Tout dabord, pour avoir le nombre de connectés, il vous faut savoir combien d'adresses IP visitent actuellement vos pages ...
(Sachant que vous avez un fichier "function_user.php" contenant les fonction et un fichier "index.php" contenant le site et des variable)
Pour cela, sur chacune de vos page, il vous faudra appeller une fonction que l'on va créer :
<? connectes('') ?>
Les tables :
# Structure de la table `ne_connectes`
#
#uip => user's ip
#uid => user's id
#place => titre de la page d'ou est appellé la fonction ...
CREATE TABLE `ne_connectes` (
`uid` int(9) NOT NULL default '0',
`uip` varchar(15) NOT NULL default '',
`time` int(11) NOT NULL default '0',
`place` varchar(255) NOT NULL default ''
) TYPE=MyISAM;
Cette fonction à pour but d'inserer dans la base de données les information relatives aux ip ("mysqliser" dans mon jargon :))
<? whoisonline(3*60);?>
Cette fonction vous permet d'affiche dans une liste les ip connectés dans uen estimation faite sur 3x60 secondes, c'est a dire 3 minutes ... vous pouvez changer ce temps si vous juger qu'un membre met plus de temps sur une page de votre site ...

Source / Exemple :


<? 
//fichier function_user.php
function uid2name($uid)
{
	global $utilisateurs;
	$data= mysql_fetch_array(mysql_query('SELECT * FROM '.$GLOBALS['utilisateurs'].' WHERE `uid`="'.$uid.'"'));
	return $data['nick'];
}

function connectes($place)
{
	global $connectes;
	$time = time();
	if($_SESSION['log']=="1")
	{
		mysql_query('DELETE FROM `'.$GLOBALS['connectes'].'` WHERE `uid`="'.$_SESSION['uid'].'"');
		mysql_query('DELETE FROM `'.$GLOBALS['connectes'].'` WHERE `uip`="'.$_SERVER['REMOTE_ADDR'].'"');
		mysql_query('INSERT INTO `'.$GLOBALS['connectes'].'` VALUES("'.$_SESSION['uid'].'","'.$_SERVER['REMOTE_ADDR'].'","'.$time.'","'.$place.'")');
	}
	else
	{
		mysql_query('DELETE FROM `'.$GLOBALS['connectes'].'` WHERE `uip`="'.$_SERVER['REMOTE_ADDR'].'" AND `uid`="-1"');
		mysql_query('INSERT INTO `'.$GLOBALS['connectes'].'` VALUES("-1","'.$_SERVER['REMOTE_ADDR'].'","'.$time.'","'.$place.'")');
	}
}
function whoisonline($temps)
{
	global $connectes;
	$time = time();
	$time2 = time()-$temps;
	$req1 = mysql_query('SELECT COUNT(*) as NB FROM '.$GLOBALS['connectes'].' WHERE `uid`="-1" AND `time`>="'.$time2.'"');
	$req2 = mysql_query('SELECT COUNT(*) as NB2 FROM '.$GLOBALS['connectes'].' WHERE `uid`!="-1" AND `uid`!="0" AND `time`>="'.$time2.'"');
	$res1 = mysql_result($req1, "NB");
	$res2 = mysql_result($req2, "NB2");
	echo '<div align="center">Il y a pour le moment '.$res1.' invité(s) et '.$res2.' membre(s) en ligne.<br></div>';
	if($_SESSION['log']!="1")
	{
		echo '<br><center>Vous êtes un visiteur anonyme. Vous pouvez vous enregistrer gratuitement en cliquant <a href="modules.php?name=Your_Account&op=new_user">ici</a>.</center>';
	}
	else
	{
		echo '<br>En ligne :';
		$req = mysql_query('SELECT * FROM '.$GLOBALS['connectes'].' WHERE `uid`!="-1" AND `uid`!="0" AND `time`>="'.$time2.'"');
		while($data = mysql_fetch_array($req))
		{
			echo '<br> - '.uid2name($data['uid']).'<br>&nbsp;';
			$resultat = "1";
		}
		if(!isset($resultat))
		{
			echo '<br><i>Aucun membre ...<br>&nbsp;</i>';
		}
		if($res2>=10)
		{
			echo '<br>...';
		}
	}
}
?>
<?
//page index.php
connectes('index.php')
<? whoisonline(3*60);?>
?>

Conclusion :


J'explique :
Si l'utilisateur est connecté, on l'ajoute dans la table avec son identifiant (uid) ce qui nous permettra de savoir s'il est invité ou membre ...
Si l'utilisateur n'est pas connecté, on l'ajoute avec un identifiant de "-1" (anonyme), ensuite, on compte le nombre d'ip différenes ayant pour identifiant "-1" pour connaitre le nombre d'invités.
----------------------------------
UNE CHOSE IMPORTANTE :
Lorsque vous faite un script de ce genre, n'utiliser pas de (mysql) DATETIME, préféré plutot la fonction time() car elle compte le nombre de seconde depuis le 1er janvier 1970, ce qui vous permettra de faire des calculs ...
tandis qu'avec DATETIME, vous ne pouvez rien calculer ...
-----------------------------------
Dans la fonction <? whoisonline(3*60);?> je n'ai pas fait en sorte que le nom de la page visitée soit marquée dans la liste, a vous de le faire :)
-----------------------------------
Voila, ce script n'est pas fait pour être recopié à la lettre près, il est surtout fait pour donner une idée aux personnes voulant faire leur propre script ...
J'ai posté ça car lorsque je voulais en faire un, je n'ai trouvé ni exemple, ni script complet me montrant concretement le résultat de mon idée...

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.