Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/09/2011, 09h53   #1
Invité de passage
 
Homme Nicolas
Développeur informatique
Inscription : septembre 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2011
Messages : 2
Points : 0
Points : 0
Par défaut Compteur de visites PHP - PHPMyAdmin

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 :
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
NG_Neptune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 11h21   #2
Invité régulier
 
Femme
Analyste Programmeur
Inscription : septembre 2011
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Analyste Programmeur

Informations forums :
Inscription : septembre 2011
Messages : 10
Points : 6
Points : 6
Bonjour ^^

Si tu regardes bien ton code, ta première requête est:

Code :
$req = $bdd->query('SELECT * FROM ip_visiteur');
ta deuxième
Code :
$req = $bdd->exec('UPDATE compteur SET nbre_visites = nbre_visites + 1'); // J'incrémente le nombre de visites dans la BDD
et ta troisième
Code :
$req = $bdd->exec('UPDATE ip_visiteur SET date_visite = CURDATE()');
Il y a un petit truc qui me gêne à moi xD
Vu que tu fais un "$req->fetch()", sur ta première requête, il ne faut pas que t'es prochaine requête se nomme elles aussi $req....

Ca pourrait peut-être un petit peu mieux fonctionner ^^
Après au niveau de tes autres requêtes, il y a d'autres choses qui me paraissent bizarre, mais après je ne connais pas toutes les syntaxes possible SQL...

Bonne journée à toi
Audrey40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 11h52   #3
Invité de passage
 
Homme Nicolas
Développeur informatique
Inscription : septembre 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2011
Messages : 2
Points : 0
Points : 0
Voilà, j'ai modifié le nom des variables.

Voici mon code actuel après quelques petits changements :

Code :
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
 
<?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 ($long == $donnees['adre_ip']) // Si l'IP du visiteur est déjà présente dans la BDD
		{
			echo("L'adresse ip est déjà présente dans la base de données<br />");
			if ($donnees['date_visite'] >= time() - 24*3600) // Si elle date de plus de 24h
			{
				$req1 = $bdd->exec('UPDATE compteur SET nbre_visites = nbre_visites + 1'); // J'incrémente le nombre de visites dans la BDD			
				$req2 = $bdd->exec('UPDATE ip_visiteur SET date_visite = CURDATE()'); // Je mets à jour la date de sa dernière visite
			}
		}
		else // Si l'adresse IP n'est pas dans la BDD
		{
			echo("L'adresse ip n'est pas présente dans la bade de données<br />");
			$req3 = $bdd->exec('INSERT INTO ip_visiteur(adre_ip, date_visite) VALUES(:adre_ip, CURDATE())'); // Je l'ajoute à la BDD
			$req3->execute(array('adre_ip' => $long));
		}
	}
	$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>
Mais ça marche toujours pas...
Pour les requêtes SQL, je suis sur de rien, si tu as une proposition de syntaxe, hésite pas à m'en faire part

Merci d'avance
NG_Neptune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 16h49   #4
Invité régulier
 
Femme
Analyste Programmeur
Inscription : septembre 2011
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Analyste Programmeur

Informations forums :
Inscription : septembre 2011
Messages : 10
Points : 6
Points : 6
En regardant un peu plus ton code, j'ai vu une condition que tu faisais:
Code :
1
2
3
if ($long == $donnees['adre_ip']){
...
}
Mais ta variable $long, j'ai l'impression qu'elle n'existe pas...
C'était pas plutôt
Code :
1
2
3
if($ip==$donnees['adre_ip']){
...
}
que tu voulais faire ?
Vu que apparament tu voudrais tester que l'IP du visiteur (que tu as choisis de mettre dans une variable nommée $ip) ne soit pas déjà dans la table....
Audrey40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h01.


 
 
 
 
Partenaires

Hébergement Web