Je cherchais depuis deux jours comment afficher la liste des membres connectés sur mon site. J'ai enfiin trouvé la solution optimale.
La plupart des codes que j'ai trouvé sur le Net ont besoin de créer une table qui stocke la liste des utilisateurs connectés, ou pire, des fichiers texte qui stockent ces infos.
De plus il faut sans cesse mettre cette table ou ces fichiers texte à jour.
Et pour finir, les codes trouvés faisaient au moins 50 lignes !
Alors un sentiment de révolte s'est emparé de moi, et j'ai mis au point un système vraiment bête (ie EXTREMEMENT simple) que je n'ai vu pour l'instant nulle part.
Admettons que vous ayez une table cotenant la liste des membres inscrits sur votre site, du style
CREATE TABLE `registered_users` (
`ID` int(10) NOT NULL auto_increment,
`pseudo` text collate latin1_general_ci NOT NULL,
`password` text collate latin1_general_ci NOT NULL,
) ENGINE=MyISAM;
J'ai supprimé les autres champs qui sont inutiles ici.
Il suffit de rajouter une ligne que j'ai appelé lastquerytime, qui représente la date récupérée par time()(donc un BIG INT) de la dernière requête exécutée par un utilisateur.
`lastquerytime` bigint(20) NOT NULL,
Chaque fois qu'un utilisateur connecté et loggué affichera une page, lastquerytime prendra la valeur de time(), c'est-à-dire l'heure actuelle, en secondes.
Il suffit de n'afficher que les utilisateurs dont lastquerytime a moins de 5 minutes... c'est-à-dire les utilisateurs qui ont affiché une page il y a moins de 5 minutes.
Et ce code n'est pas un simple compteur, puisqu'il affiche la liste des pseudos.
Source / Exemple :
//Mon code (Ctrl+A, Ctrl+C et Ctrl+V) dans un fichier connected_users.php
Connected :<br>
<?
include("db_connect.php"); //Infos de connexion et connexion à la bdd
if ($_SESSION['pseudo'] != '') //Le geek est loggué ?
{
$pseud = $_SESSION['pseudo'];
$query = "SELECT * FROM registered_users WHERE pseudo='$pseudo'"; //On récupère ses infos dans la bdd
$result = mysql_query($query);
if ($result) //On a ses infos ?
{
$lastquerytime = time(); //Il a exécuté ce code MAINTENANT
$query = "UPDATE registered_users SET lastquerytime='$lastquerytime' WHERE pseudo='$pseudo'"; //On l'écrit dans la table
mysql_query($query);
}
}
$fiveminago = time() - 5 * 60; //5*60s=5min de délai, mettez ce que vous voulez
$query = "SELECT pseudo FROM registered_users WHERE lastquerytime>'$fiveminago'"; //Tous ceux qui ont fait un truc y a moins de 5min
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) //Tant qu'on a des noms
{
echo $row[0]."<br>"; //On les affiche
}
?>
Conclusion :
<?
include("connected_users.php"); //A l'endroit où vous voulez la liste
?>
Si vous voulez des explications, ou que vous avez des idées, des remarques, quelque chose quoi... -> Commentaire ! :)
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.