/*------------------------------*/
|
/*
|
Titre : Afficher la liste des connectés sur votre site
|
|
Auteur : R@f
|
Date édition : 01 Sept 2004
|
Date mise a jour : 18 Sept 2019
|
|
Rapport de la maj:
|
- refactoring du code en PHP 7
|
- fonctionnement du code vérifié
|
- modification de la description
|
Date mise a jour : 07 Mars 2026
|
|
Rapport de la maj:
|
- refactoring du code en PHP 8
|
*/
|
/*------------------------------*/?>
|
CREATE TABLE `connectes` (
|
`ip` varchar(20) NOT NULL default '',
|
`derniere` int(9) unsigned NOT NULL default '0',
|
`pseudo` varchar(32) NOT NULL default '',
|
PRIMARY key (`ip`)
|
) TYPE=MyISAM;
|
|
<?php
|
|
// PHP 5 ET PHP 7
|
// ip du client
|
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
|
$ip = $_SERVER['HTTP_CLIENT_IP'];
|
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
|
} else {
|
$ip = $_SERVER['REMOTE_ADDR'];
|
}
|
|
// time actuel
|
$time = time();
|
|
// on recherche l’utilisateur
|
$sql_query = "SELECT * FROM connectes where ip='$ip'";
|
$result = $conn->query($sql_query);
|
|
// si l'utilisateur n'est pas deja dans la table
|
if($result->num_rows == 0)
|
{
|
$sql_query = "INSERT INTO connectes VALUES ('$ip', '$time')";
|
$result = $conn->query($sql_query);
|
|
|
}
|
// mise-Ã Â -jour
|
else
|
{
|
$sql_query = "UPDATE connectes SET derniere='$time' WHERE ip='$ip'";
|
|
$result = $conn->query($sql_query);
|
|
}
|
|
// temps d'incativité
|
$time -= $temps * 60;
|
|
|
// on supprime ceux qui n'ont pas été connectés depuis assez longtemps
|
$sql_query = "DELETE LOW_PRIORITY FROM connectes WHERE derniere <= $time";
|
$result = $conn->query($sql_query);
|
|
/*******************
|
Affichage des connectés
|
*******************/
|
|
$sql_query = "SELECT count(*) FROM connectes";
|
$result = $conn->query($sql_query);
|
|
|
if($result)
|
{
|
$visiteurs = mysqli_fetch_array($result);
|
echo '<li><br />Connectés: ' . $visiteurs[0].'</li>';
|
|
}
|
|
// PHP 7 ET PHP 8
|
|
// Connexion à la base de données (assurez-vous de remplacer ces valeurs par
|
// les vôtres)
|
$servername = "votre_serveur";
|
$username = "votre_utilisateur";
|
$password = "votre_mot_de_passe";
|
$dbname = "votre_base_de_donnees";
|
|
$conn = new mysqli($servername, $username, $password, $dbname);
|
|
// Vérification de la connexion
|
if ($conn->connect_error) {
|
die("Erreur de connexion : " . $conn->connect_error);
|
}
|
|
// Récupération de l'IP du client
|
$ip = $_SERVER['HTTP_CLIENT_IP'] ?? $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER
|
['REMOTE_ADDR'];
|
|
// Temps actuel
|
$time = time();
|
|
// Requête préparée pour rechercher l'utilisateur
|
$stmt = $conn->prepare("SELECT * FROM connectes WHERE ip = ?");
|
$stmt->bind_param("s", $ip);
|
$stmt->execute();
|
$result = $stmt->get_result();
|
|
// Si l'utilisateur n'est pas déjà dans la table
|
if ($result->num_rows == 0) {
|
$stmt = $conn->prepare("INSERT INTO connectes (ip, derniere) VALUES (?, ?)")
|
;
|
$stmt->bind_param("si", $ip, $time);
|
$stmt->execute();
|
} else {
|
// Mise à jour
|
$stmt = $conn->prepare("UPDATE connectes SET derniere = ? WHERE ip = ?");
|
$stmt->bind_param("is", $time, $ip);
|
$stmt->execute();
|
}
|
|
// Temps d'inactivité
|
$time -= $temps * 60;
|
|
// Suppression des utilisateurs inactifs
|
$stmt = $conn->prepare("DELETE FROM connectes WHERE derniere <= ?");
|
$stmt->bind_param("i", $time);
|
$stmt->execute();
|
|
// Affichage des connectés
|
$stmt = $conn->prepare("SELECT COUNT(*) FROM connectes");
|
$stmt->execute();
|
$result = $stmt->get_result();
|
|
if ($result) {
|
$visiteurs = $result->fetch_array();
|
echo '<li><br />Connectés: ' . htmlspecialchars($visiteurs[0]) . '</li>';
|
|
}
|
|
// Fermeture de la connexion
|
$conn->close();
|
|
| ?> |
KOogar
02 Aout 2023 à 07:14Faut initialiser $temps au début du code
Tel que:
// temps en min avant d'etre considéré comme inactif
$temps = 5;
Invité
10 Déc 2022 à 17:24$temp il sert a quoi se null?
Invité
15 Oct 2009 à 00:04Moi ça fonctionne mais ca supprime juste le pseudo dans la table et non toute l'entré et c'est bien embêtant car visiteur augmente toujours et si on ferme le navigateur en postant un message alors l'entré n'est pas supprimé
Invité
30 Nov 2007 à 23:07j'ai aucune erreur mais rien ne s'affiche ??
et rien ne s'enregistre dans la bdd ??
Patrick
28 Sept 2005 à 16:05bonjour et merci pour tous les sript. j'essaye de faire marcher le script
"Afficher la liste des connectés sur le site"
j'ai l'erreur suivante :
Parse error: parse error, unexpected T_VARIABLE in /var/www/free.fr/d/b/projeteurasien/qui.php on line 16
merci pour votre aide
patrick