Compteur de visites

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Compteur de visites

par Romuald632 » 20 mars 2009, 09:47

Voici mon code PHP pour afficher le nombre de connectés :
<?php
// Connexion à MySQL
mysql_connect("localhost", "root", "");
mysql_select_db("bdd");

// -------
// ETAPE 1 : on vérifie si l'IP se trouve déjà dans la table
// Pour faire ça, on n'a qu'à compter le nombre d'entrées dont le champ "ip" est l'adresse ip du visiteur
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
$donnees = mysql_fetch_array($retour);

if ($donnees['nbre_entrees'] == 0) // L'ip ne se trouve pas dans la table, on va l'ajouter
{
    mysql_query('INSERT INTO connectes VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')');
}
else // L'ip se trouve déjà dans la table, on met juste à jour le timestamp
{
    mysql_query('UPDATE connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'');
}

// -------
// ETAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 5 minutes

// On stocke dans une variable le timestamp qu'il était il y a 5 minutes :
$timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes
mysql_query('DELETE FROM connectes WHERE timestamp < ' . $timestamp_5min);

// -------
// ETAPE 3 : on compte le nombre d'ip stockées dans la table. C'est le nombre de visiteurs connectés
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes');
$donnees = mysql_fetch_array($retour);


//On n'a plus qu'à afficher le nombre de connectés !
echo '<div id="center">';
echo 'Actuellement, il y a ' . $donnees['nbre_entrees'] . ' visiteur(s) !';
echo '</div>';
?>

par Poulpe » 19 mars 2009, 15:44

Et comme fais-tu pour ressortir ceux qui sont en ligne ?

par Romuald632 » 19 mars 2009, 13:37

table d'origine:
ip (varchar)
timestamp (int)

par Aureusms » 19 mars 2009, 13:10

Une bonne table de ce type devrait être constitué de :

ID - adresse IP - Timestamp avec ID en clé primaire.

Tu vérifies que l'IP n'existe pas pour la date du jour (car la personne peut revenir plusieurs fois) et tu l'insert dans la table. Cela pose quand même un problème quand plusieurs personnes passent par un routeur qui cache leur IP respective : tu auras la même IP pour tout le monde et donc qu'une seule insertion.
Aussi, utilises les cookies pour réduire ce problème : avant l'insertion tu envoi un cookie pour une journée à une personne. Tu testes (avant l'envoi) si ce cookie est présent et si il ne l'est pas : envoi cookie + insertion sinon pas d'insertion + pas d'envoi. Cependant, il se peut que la personne refuse les cookies.
Dernière chose : tu peux utiliser d'autres variables $_SERVER pour différencier plusieurs utilisateurs qui ont la même adresse IP ($_SERVER["REMOTE_ADDR"]) : le navigateur utilisé par exemple via $_SERVER["HTTP_USER_AGENT"]. Mais même chose ils peuvent utiliser le même type de navigateur....
Enfin tu peux faire uns fonction AJAX pour être sûr que tous cela fonction mais il se peut que l'utilisateur désactive JAVASCRIPT

Résultats des courses : je ferai cookie + table.

par Poulpe » 19 mars 2009, 13:02

Le champs ID est vraiment utile si tu souhaites recherches des enregistrements en particuliers.

Pour ton cas, ça sera des groupes d'enregistrements que tu rechercheras en fonction de la date.

Pour le nombre de visite, il te faut une notion de distinction qui peut se faire par IP :
'IP' varchar : pour pouvoir savoir qui se connecte et donc faire un comptage de visiteur unique
'date' date : pour te permettre de récupérer les enregistrements d'un jour bien précis.

Tu peux nous donner la structure de ta table d'origine ?

par Romuald632 » 19 mars 2009, 12:30

Par rapport à l'aure table il faut que je rajoute 1 champ ID et je supprime le champ timestamp ?

par Poulpe » 19 mars 2009, 11:15

Je te conseil de créer une autre table qui créera un enregistrement pour chaque visite. Avec peut-être une récupération de leur IP pour pouvoir différencier les visiteurs uniques par jour. Mais tu as des systèmes gratuit qui te font ça automatiquement.

Tu n'as qu'à placer un script en bas de ta page.
Tu as, par exemple, google analytics

Compteur de visites

par Romuald632 » 19 mars 2009, 10:49

Bonjour,
J'ai un compteur de visite me permettant de savoir combien de visiteurs sont en ligne sur mon site, mais je voudrais avoir le total de visiteurs.
Faut-il créer une autre table dans ma BDD, ou adapter la première.
Merci de votre aide