Compteur par visites et par pages

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 593 fois - Téléchargée 29 fois

Contenu du snippet

C'est un compteur des plus simple. Il comptabilise les nombre de pages visitées par l'internaute, et il comptabilise le nombre de visites de chaques pages. Si la page n'a pas encore été visité, il ajoute son nom dans la base de données.

Pour que le code fonctionne, il faut avoir un base de données SQL nommée 'compteur' qui contient les tables suivantes :
cpt_visiteur
ip VARCHAR(20)
date DATE
nbpage INT
cpt_page
page VARCHAR(64)
nbr INT

Source / Exemple :


<?php

$db = @mysql_connect('addr_serveur','login','password');
@mysql_select_db('compteur',$db);

// Recherche si le visiteur est déjà dans la base de données
$query = "SELECT * FROM cpt_visiteur WHERE ip='".$_SERVER['REMOTE_ADDR']."' AND date='".date("Y-m-d")."'";
$req = @mysql_query($query) or die('Erreur : '.mysql_error());
// Si il n'y est pas
if( @mysql_num_rows($req) == 0 )
{
   // Ajoute son IP et la date de visite dans la base de données
   $query = "INSERT INTO cpt_visiteur VALUES('','".$_SERVER['REMOTE_ADDR']."','".date("Y-m-d")."','1')";
   $req = @mysql_query($query) or die('Erreur : '.mysql_error());
}
else
{
   // Sinon incrémente son nombre visite
   $data = @mysql_fetch_array($req);
   $data[3]++;
   $query = "UPDATE cpt_visiteur SET nbpage='".$data[3]."' WHERE ip='".$_SERVER['REMOTE_ADDR']."' AND date='".$data[2]."'";
   @mysql_query($query) or die('Erreur : '.mysql_error());
}

// Recherche si la page a déjà été visitée
$query = "SELECT * FROM cpt_page WHERE page='".$_SERVER['REQUEST_URI']."'";
$req = @mysql_query($query) or die('Erreur : '.mysql_error());
// Si elle a déjà été vu
if( mysql_num_rows($req)!= 0 )
{
   // Incrémente le nombre de visite de cette page
   $data = @mysql_fetch_array($req);
   $data[1]++;
   $query = "UPDATE cpt_page SET nbr='".$data[1]."' WHERE page='".$data[0]."'";
   @mysql_query($query) or die('Erreur : '.mysql_error());
}
else
{
   // Sinon ajoue la page à la base de données
   $query = "INSERT INTO cpt_page VALUES('".$_SERVER['REQUEST_URI']."','1')";
   @mysql_query($query) or die('Erreur : '.mysql_error());
}

// Compte combien il y a de visiteur dans la table
$query = "SELECT id FROM cpt_visiteur";
$req = @mysql_query($query) or die('Erreur : '.mysql_error());

echo @mysql_num_rows($req);  // Affiche le nombe de visiteur

?>

Conclusion :


Je suis certain qu'il y ai des amélioration à donner à ce scipt. Donc si vous en voyez faites m'en part.

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
28 février 2008

Pareillement que kilikiki43 . Ce code m'intéresse beaucoup. Je suis débutant dans le codage PHP. D'après ce que j'ai vue, cette erreur est due à un problème de remplissage de la bdd (trop de valeur pour pas assez de table). J'ai bien regarder ce code mais je vois pas où est l'erreur.
Si quelqu'un connait la solution je suis preneur à 200% car ce code est vraiment ce dont j'ai besoin pour mon projet
Merci d'avance
Messages postés
1
Date d'inscription
vendredi 14 septembre 2007
Statut
Membre
Dernière intervention
14 septembre 2007

Je ne veux pas être méchant mais rien ne fonctionne.
J'ai créé la db ajouté le script dans un include le premier me met une erreur : column count doesn't matchrow 1...
L'autre pas d'erreur mais pas d'enregistrement non plus.

Mes branchements sont pourtant ok j'ai mis cpt_page et ip en clef primaire. Not nuul pour tous les champs. Aucun auto increment.

Quelq'un a ce script qui fonctionne ? Si oui merci de le transmettre.

Sinon ce script me semble intéressant pour pister certains ordi.
Messages postés
104
Date d'inscription
samedi 7 décembre 2002
Statut
Membre
Dernière intervention
17 août 2009

Il y a moyen aussi le mettre le CRC de l'IP c'est compact et toujours de la même taille. Le risque de collision reste faible.

Et en plus pas besoin de s'inscrire a la CNIL comme ça, enfin je crois.

Ne pas oublier de supprimer les IP vieilles de plus de 24h car d'habitude c'est le temps de conservation de l'IP (si dynamique).
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Un COUNT(*) est directement stocké dans la table, y'a pas plus rapide que ça (enfin dans le cas précis, faut pas mettre de WHERE dans la condition).

Pour un compteur plus précis, y'a le mien qui supprime le dernier octet de l'ip.
Messages postés
40
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
8 septembre 2006

D'où ma question sur l'intérêt ?

C'est pas parce qu'on a l'ADSL qu'on est forcement connecté 24h/24h.
L'IP change donc régulièrement !
Afficher les 22 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (dark_naruto25)