From 64250fd350d1474b30f2c9681e7d6f54c2efc11e Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 1 Aug 2023 14:38:54 +0200 Subject: compteur de visites --- visites.php | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 visites.php (limited to 'visites.php') diff --git a/visites.php b/visites.php new file mode 100644 index 0000000..c9b77fb --- /dev/null +++ b/visites.php @@ -0,0 +1,84 @@ +exec('CREATE DATABASE IF NOT EXISTS ' . $db_name . ';'); + unset($Db); + + // connexion + $Db = new PDO('mysql:host=localhost;dbname=ordipolo;charset=utf8', 'root', 'qsdfgh'); + + // create tables + $Db->query('CREATE TABLE IF NOT EXISTS visites (id INT PRIMARY KEY AUTO_INCREMENT, ip VARCHAR(30), hote VARCHAR(255), user_agent TEXT, date DATE, nb_pages INT);'); + //$Db->query('CREATE TABLE IF NOT EXISTS compteur (visiteurs INT, bots INT);'); + $Db->query('CREATE TABLE IF NOT EXISTS compteur (visiteurs INT);'); + + // initialiser table compteur avec des 0 si la table est vide + if(!$Db->query('SELECT * FROM compteur')->fetch()) + { + $Db->query('INSERT INTO `compteur` VALUES (0);'); + } +} +catch (Exception $e) +{ + die('Erreur : ' . $e->getMessage()); +} + + +// variables +$ip = $_SERVER['REMOTE_ADDR']; // IP +$hote = gethostbyaddr($ip); // nom d'hôte si possible +date_default_timezone_set ('Europe/Paris'); // configure le décalage horaire sur Europe/Paris +$user = $_SERVER['HTTP_USER_AGENT']; // infos sur le client (navigateur, OS), attention aux menteurs +$user = mb_strtolower($user); // minuscules pour strpos() +$date = date('Y-m-d'); // date formatée + +// script recherchant le pays +// la commande whois nécessite le paquet whois (debian) ou bind-tools (archlinux) +// on récupère la ligne (ou les lignes) indiquant le pays avec grep (-i sert à ignorer la casse) +$country = strtolower(shell_exec("whois " . $ip . " | grep -i country | cut -d: -f2 | sed -e ' s/\ //g'")); + + +function incrementerTableCompteur($Db, $field) +{ + $nombre = $Db->query('SELECT ' . $field . ' FROM compteur')->fetch(); + if(!$nombre){$nombre = [0];} // tableau d'une seule case + $nombre[0] += 1; + + $requete = $Db->prepare('UPDATE compteur SET ' . $field . ' = :nombre'); + $requete->execute(array('nombre' => $nombre[0])); +} + +// MAJ de la base +if(isset($_SESSION['id_visiteur'])) // pages suivantes +{ + $requete = $Db->prepare("UPDATE visites SET nb_pages = nb_pages + 1 WHERE id = :id"); + + $requete->execute(array( + ':id' => $_SESSION['id_visiteur'])); +} +else // première page visitée dans la session +{ + $requete = $Db->prepare(" + INSERT INTO visites (ip, hote, user_agent, date, nb_pages) + VALUES (:ip, :hote, :user_agent, :date, 1)"); + // si la visite est déjà enregistrée, ajoute +1 au nombre de pages + + $requete->execute(array( + ':ip' => $ip, + ':hote' => $hote, + ':user_agent' => $user, + ':date' => $date)); + + $_SESSION['id_visiteur'] = $Db->lastInsertId(); + + // compte visiteurs + 1 + incrementerTableCompteur($Db, 'visiteurs'); +} + +echo "visite enregistrée!"; +?> -- cgit v1.2.3