Bonjour,

Je suis actuellement en train de travailler sur un projet de compteur de visites.
Le but, vous vous en doutez, est de compter les visites d'un site, mais il y a quelques petits détails sur lesquels je bloque :
Je voudrai qu'un visiteur ne puisse incrémenter le compteur de visites qu'une seule fois par jour (logique).
J'ai donc codé un petit quelque chose qui.. ne marche pas..
La page PHP s'affiche sans problème, le fichiers de logs n'enregistre aucune erreur, mais.. les requêtes SQL ne sont pas exécutées.. Peut-être est-ce un problème de syntaxe au niveau des requêtes ?
Ou peut-être le format des champs ?

Voici les différentes tables de la base de données :
COMPTEUR(nbre_visites)
nbre_visites est de type int
IP_VISITEUR(adre_ip, date_visite)
adre_ip est de type char
date_visite est de type date

Voici le code PHP :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
<?PHP
session_start();
setcookie(time() + 24*3600, null, null, false, true);
?>
<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-type" content="text.html; charset=utf-8">
	<title>Compteur de visites</title>
</head>
<body>
<?PHP
try
{
	$_SERVER["REMOTE_ADDR"]; // Je récupère l'adresse IP du visiteur
	$ip = $_SERVER["REMOTE_ADDR"]; // J'assigne l'adresse IP à une variable
	echo 'Votre adresse IP est : ' . $ip . '.<br />';
	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
	$bdd = new PDO('mysql:host=localhost;dbname=institut', 'root', 'root', $pdo_options); // Je me connecte à la BDD
	$req = $bdd->query('SELECT * FROM ip_visiteur'); // Je récupère les enregistrements de la BDD
 
	while ($donnees = $req->fetch()) // Je lis les données de la table
	{
		if ($_SESSION['visite'] != 1) // Si aucune session n'est active
		{
			if ($ip == $donnees['adre_ip']) // Si l'IP du visiteur est déjà présente dans la BDD
			{
				if ($donnees['date_visite'] >= time() - 24*3600) // Si elle date de plus de 24h
				{
					$req = $bdd->exec('UPDATE compteur SET nbre_visites = nbre_visites + 1'); // J'incrémente le nombre de visites dans la BDD			
					$req = $bdd->exec('UPDATE ip_visiteur SET date_visite = CURDATE()'); // Je mets à jour la date de sa dernière visite
					$_SESSION['visite'] = 1; // J'indique qu'une session est active
				}
			}
			else // Si l'adresse IP n'est pas dans la BDD
			{
				$req = $bdd->prepare('INSERT INTO ip_visiteur(adre_ip, date_visite) VALUES(:adre_ip, CURDATE())'); // Je l'ajoute à la BDD
				$req->execute(array('adre_ip' => $ip));
				$_SESSION['visite'] = 1;
			}
		}
	}
	$recup = $bdd->query('SELECT nbre_visites FROM compteur'); // Je récupère le nombre de visites
	while ($donnees = $recup->fetch())
	{
		echo 'Nombre de visites : ' . $donnees['nbre_visites'] . '.<br />'; // Et je l'affiche
		if($donnees['nbre_visites'] == 500) // Si le nombre de visite atteint 500
		{
			echo("Vous êtes le 500<sup>e</sup> visiteur. Contactez-nous pour obtenir votre lot.<br />"); // Le visiteur gagne un lot
		}
	}	
}	
catch(Exception $e)
{
	die('Erreur : ' . $e->getMessage()); // S'il y a une erreur
}
?>
</body>
</html>
Pourriez-vous me dire s'il y a une erreur dans le code, ou si vous avez une idée de pourquoi les requêtes ne sont pas traitées ? Peut-être est-ce aussi un problème d'ordre d'itérations ?

Merci d'avance.

Nicolas