Créer un compteur de connectés
Maintenant que vous avez créé votre site, vous aimeriez surement savoir combien de personnes sont connectées.
Bonne nouvelle, ce n'est pas très compliqué.
Que faut-il connaitre avant de commencer?
- savoir manier MySQL
- connaitre les variables d'environnement
La table
Pour ce script, il va falloir créer une table nommée nb_connectes ne contenant que deux champs:
-un champ ip, varchar, 20
-un champ date, int.
Comme je suis gentil, je vous donne le code!
CREATE TABLE `nb_connectes` (
`ip` VARCHAR( 20 ) NOT NULL ,
`temps` INT NOT NULL
) ENGINE = MYISAM ;
Dans cette table, vous allez stocker l'IP et la date à laquelle un visiteur a chargé une page. Il suffira
ensuite de supprimer les IP des visiteurs qui sont partis et de compter le nombre d'IP rerstantes.
Comment savoir si le visiteur est parti?
On ne le saura jamais avec certitude mais on va supposer qu'un visiteur ne restera pas 5min sur une page sans
bouger. C'est pourquoi nous allons supprimer les IP qui n'ont pas étés mises à jour depuis ce temps. Pour ce
faire, nous allons utiliser ce code:
DELETE FROM votre_table WHERE condition
si l'IP est déjà dans la table, il ne faut pas la réécrire, il faut juste mettre à jour le temps.
La fonction
Plutôt que de devoir réécrire le code sur chaque page, ou de devoir inclure un page. Je trouve plus
simple de creer une fonction qui va vérifier le nombre de connectés. Vous n'aurez qu'à appeller votre
fonction sur chaque page de cette manière:
connectes($_SERVER['REMOTE_ADDR']);
Comme vous l'avez remarqué, le seul argument à envoyer à cette fonction est l'adresse IP du visiteur.
Nous allons maintenant nous attaquer au code proprement dit. C'est parti!
<?php
function connectes($ip){
$connection = mysql_connect('1', '2', '3') or die('Erreur lors de la connection au serveur');
mysql_select_db('4') or die('Erreur lors de la connection à la base de données');
En premier lieu, on déclare la fonction et on se connecte à la base.
Ensuite, on vérifie si l'IP est déjà dans la table en comptant le nombre de fois
qu'elle apparait (0 si c'est un nouveau visiteur et 1 s'il était déjà dans la table).
$nombre_connectes = mysql_query("SELECT * FROM nb_connectes WHERE ip='$ip'");
$resultat = mysql_num_rows($nombre_connectes);
Nous avons sélectionné toutes les lignes de la table où l'IP correspondait à l'IP du visiteur et nous
avons compté le nombre de lignes sélectionnées grâce à mysql_num_rows.
if($resultat==0){
$temps = time();
mysql_query("INSERT INTO nb_connectes VALUES('$ip', '$temps')");
}
Si l'IP n'est pas dans la table, c'est que c'est un nouveau visiteur. Dans ce cas, on enregistre son
adresse IP ainsi que le timestamp (time(); ) dans la table.
else{
$temps = time();
mysql_query("UPDATE nb_connectes SET temps='$temps' WHERE ip='$ip'");
}
Si l'IP est déjà dans la table, on se contente de mettre à jour le timestamp.
$temps_vieux = time() - (60 * 5);
mysql_query('DELETE FROM nb_connectes WHERE temps < ' . $temps_vieux);
Nous venons de supprimer les IP qui n'ont plus été mises à jour depuis 5min. (On suppose que le visiteur
lira au moins une page toutes les 5min).
Il faut maintenant compter le nombre d'enregistrements que contient la table et l'écrire.
$nb_ip = mysql_query('SELECT * FROM nb_connectes');
$visiteurs_connectes = mysql_fetch_row($nb_ip);
if($visiteurs_connectes==1){
echo 'Il y a 1 visiteur connecte.';
}
else{
echo'Il y a '.$visiteurs_connectes.' visiteurs connecés.';
}
mysql_close($connection);
//N'oublions pas de nous déconnecter.
?>
Voilà, votre compteur de connectés est terminé! En plus, j'ai rajouté une condition pour ne pas
faire de fautes d'orthographe s'il n'y avait qu'un visiteur connecte.
: pour que votre compteur indique le bon nombre de connectés, il faut
qu'il soit installé sur TOUTES les pages de votre site.
On pourrait terminer ce chapitre maintenant mais ce serait bête de laisser ce script ainsi. En effet, on peut
rajouter un système de record pour indiquer le maximum de visiteurs connectés.
Comment faire?
En utilisant un fichier .txt qui stockera le record. Il va donc falloir faire un script qui va récupérer la
valeur qu'il y a dans le ficher .txt, le comparer au nombre actuel de connectés et si celui-ci est supérieur,
écrire le nouveau record dans le fichier.
Voici comment faire:
$record_fichier = fopen("record.txt", "w+");
$contenu = fgets($record_fichier);
//on récupère le précédent record
/*si le nombre de connectés est plus haut, on l'enregistre sinon on se contente d'afficher le record.*/
if($donnees['nbre_entrees'] > $contenu){
$ecrire = $donnees['nbre_entrees'];
fputs($record_fichier, $ecrire);
echo 'Le record de connectés est de '.$donnees['nbre_entrees'];
}
else{
echo 'Le record de connectés est de '.$contenu;
}
fclose($record_fichier);
Voilà, votre comteur de est maintenant totalement terminé. N'oubliez pas de le placer sur toutes les pages sous
peine d'avoir un mauvais nombre de visiteurs connectés.