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?

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.

Creative Commons License
Sauf mention contraire, le contenu de cette page est sous licence Creative Commons
Page générée en 0.3889 secondes.
Retour en haut de la page
Imprimer cette page