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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 677 fois - Téléchargée 26 fois

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

Ajouter un commentaire

Commentaires

Messages postés
73
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
20 juin 2005

Hello,
Sympa cette source, pas eu le temps de tester mais je me permet quelques remarques :

tu fais :
'SELECT * FROM '.$GLOBALS['connectes'].' WHERE `uid`!="-1" AND `uid`!="0" AND `time`>="'.$time2.'"'
puis tu appeles n fois uid2name.
Ne pourrais tu pas faire une seule et unique requete utilisant un left join par exemple ?

Ensuite dans la fonnction uid2name n'utilise pas un SELECT * si tu ne veux qu'un champ, precise le champs que tu veux recuperer.

Bonne prog à tous
Messages postés
27
Date d'inscription
vendredi 27 août 2004
Statut
Membre
Dernière intervention
9 juin 2007

C'est pas mal mais je mets 5 / 10 car les zip sa existe !
Messages postés
8
Date d'inscription
lundi 16 février 2004
Statut
Membre
Dernière intervention
19 février 2004

Si tu veux delete, ajoute un petit script qui vide la table après un certain nombre d'enregistrements ...
Et non, je ne suprime pas les sessions non rafraichies car pour moi, elles peuvent me servir pour mes statistiques :)
Mais c une bonne remarque :)
Messages postés
26
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
20 août 2007

J'ai peut être mal lu mais je ne vois aucun DELETE dans ton code, tu ne suprimes pas les sessions non rafraichies au bout d'un certain temps ?
++ pas mal sinon ;)
Messages postés
41
Date d'inscription
jeudi 27 novembre 2003
Statut
Membre
Dernière intervention
18 octobre 2010

Congratulations pour cette source, pour etre franc je n'ai rien compris, je suis pas expert en PHP. Mais je te mets un 10 pour tes explications et la source qui m'as l'air complete. Si tout le monde etait comme toi le scripting ne serait plus un probleme pour personne. bvo!
Afficher les 9 commentaires

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.