summaryrefslogtreecommitdiff
path: root/visites.php
blob: 0bee3a74205cfd22cfa60d94ce956b701aad3d89 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php
session_start();

try
{
	// create database
	$Db = new PDO('mysql:host=localhost;charset=utf8', 'root', 'qsdfgh');
	$db_name = 'ordipolo';
	$Db->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
{
	// lecture (tester si l'entrée qui l'id transmis existe toujours)
	
	// écriture
	$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!"; // retour console debug
?>