summaryrefslogtreecommitdiff
path: root/visites.php
diff options
context:
space:
mode:
Diffstat (limited to 'visites.php')
-rw-r--r--visites.php84
1 files changed, 84 insertions, 0 deletions
diff --git a/visites.php b/visites.php
new file mode 100644
index 0000000..c9b77fb
--- /dev/null
+++ b/visites.php
@@ -0,0 +1,84 @@
1<?php
2session_start();
3
4try
5{
6 // create database
7 $Db = new PDO('mysql:host=localhost;charset=utf8', 'root', 'qsdfgh');
8 $db_name = 'ordipolo';
9 $Db->exec('CREATE DATABASE IF NOT EXISTS ' . $db_name . ';');
10 unset($Db);
11
12 // connexion
13 $Db = new PDO('mysql:host=localhost;dbname=ordipolo;charset=utf8', 'root', 'qsdfgh');
14
15 // create tables
16 $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);');
17 //$Db->query('CREATE TABLE IF NOT EXISTS compteur (visiteurs INT, bots INT);');
18 $Db->query('CREATE TABLE IF NOT EXISTS compteur (visiteurs INT);');
19
20 // initialiser table compteur avec des 0 si la table est vide
21 if(!$Db->query('SELECT * FROM compteur')->fetch())
22 {
23 $Db->query('INSERT INTO `compteur` VALUES (0);');
24 }
25}
26catch (Exception $e)
27{
28 die('Erreur : ' . $e->getMessage());
29}
30
31
32// variables
33$ip = $_SERVER['REMOTE_ADDR']; // IP
34$hote = gethostbyaddr($ip); // nom d'hôte si possible
35date_default_timezone_set ('Europe/Paris'); // configure le décalage horaire sur Europe/Paris
36$user = $_SERVER['HTTP_USER_AGENT']; // infos sur le client (navigateur, OS), attention aux menteurs
37$user = mb_strtolower($user); // minuscules pour strpos()
38$date = date('Y-m-d'); // date formatée
39
40// script recherchant le pays
41// la commande whois nécessite le paquet whois (debian) ou bind-tools (archlinux)
42// on récupère la ligne (ou les lignes) indiquant le pays avec grep (-i sert à ignorer la casse)
43$country = strtolower(shell_exec("whois " . $ip . " | grep -i country | cut -d: -f2 | sed -e ' s/\ //g'"));
44
45
46function incrementerTableCompteur($Db, $field)
47{
48 $nombre = $Db->query('SELECT ' . $field . ' FROM compteur')->fetch();
49 if(!$nombre){$nombre = [0];} // tableau d'une seule case
50 $nombre[0] += 1;
51
52 $requete = $Db->prepare('UPDATE compteur SET ' . $field . ' = :nombre');
53 $requete->execute(array('nombre' => $nombre[0]));
54}
55
56// MAJ de la base
57if(isset($_SESSION['id_visiteur'])) // pages suivantes
58{
59 $requete = $Db->prepare("UPDATE visites SET nb_pages = nb_pages + 1 WHERE id = :id");
60
61 $requete->execute(array(
62 ':id' => $_SESSION['id_visiteur']));
63}
64else // première page visitée dans la session
65{
66 $requete = $Db->prepare("
67 INSERT INTO visites (ip, hote, user_agent, date, nb_pages)
68 VALUES (:ip, :hote, :user_agent, :date, 1)");
69 // si la visite est déjà enregistrée, ajoute +1 au nombre de pages
70
71 $requete->execute(array(
72 ':ip' => $ip,
73 ':hote' => $hote,
74 ':user_agent' => $user,
75 ':date' => $date));
76
77 $_SESSION['id_visiteur'] = $Db->lastInsertId();
78
79 // compte visiteurs + 1
80 incrementerTableCompteur($Db, 'visiteurs');
81}
82
83echo "visite enregistrée!";
84?>