IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Compteur de visites PHP - PHPMyAdmin


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2011
    Messages : 2
    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 : 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

  2. #2
    Membre averti
    Femme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Septembre 2011
    Messages : 13
    Par défaut
    Bonjour ^^

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = $bdd->query('SELECT * FROM ip_visiteur');
    ta deuxième
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2011
    Messages : 2
    Par défaut
    Voilà, j'ai modifié le nom des variables.

    Voici mon code actuel après quelques petits changements :

    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
     
    <?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

  4. #4
    Membre averti
    Femme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Septembre 2011
    Messages : 13
    Par défaut
    En regardant un peu plus ton code, j'ai vu une condition que tu faisais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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....

Discussions similaires

  1. Problème de compteur de visite en php
    Par bodysplash007 dans le forum Langage
    Réponses: 2
    Dernier message: 04/05/2007, 22h12
  2. [PHP/MySQL]Compteur de visite par mois
    Par kagura dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/06/2006, 16h00
  3. [PHP] Compteur de visite
    Par vins25 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 08/03/2006, 11h52
  4. [Sécurité] compteur de visites en php
    Par stanley dans le forum Langage
    Réponses: 2
    Dernier message: 23/10/2005, 15h47
  5. Compteur de visites
    Par linou dans le forum Outils
    Réponses: 2
    Dernier message: 13/07/2005, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo