Compteur de visites => régle générale

Eléphant du PHP | 172 Messages

16 janv. 2006, 18:05

Bonjour à tous !!

Voilà, ce serait pour savoir quelle est la règle générale à appliquer pour le compteur de visites d'un site, parce qu'entre les ip statiques et dynamiques, les sites dont le compteur me semble surgonflé :shock:

Si un visiteur à une ip statique, et si par exemple il visite le même site tous les jours, avec le compteur que j'ai mis en place au bout d'un an, il n'y aura qu'un seul visiteur par an (si bien sûr c'est le seul visiteur du dit site, peu probable :D)

Mais si un visiteur à une ip dynamique, tous les jours il sera compté comme un visiteur différent chaque jour.

Donc quelle est la règle générale ?

Vidage de la table des ip tous les combiens de temps ?

Désolé pour les questions, si elles vous semblent tordues :mrgreen:, mais c'est pas très clair dans mon esprit.

Merci de vos réponses.

Mammouth du PHP | 19672 Messages

16 janv. 2006, 19:54

Je dirais qu'il faut compter un visiteur unique pour une durée dans le temps, même s'il reviens plus tard avec la même IP. Il te faut enregistrer l'heure d'arrivée sur le site et avoir un paramètre de durée qui définit un "visiteur unique" : par exemple, une tranche 4 heures. S'il passe dix minutes sur le site, s'en va et revient au moit d'une heure et demi, on ne parlera pas d'un nouveau visiteur, c'est bien le même, mais s'il revient le lendemain, si ton site a par exemple un contenu très souvent mis à jour, on peut considérer que c'est un nouveau visiteur : s'il a la même IP, en mesurant l'heure d'arrivée et l'heure d'arrivée à la précédente visite, si le délai entre les deux est supérieur au paramètre fixé, tu incrémentes le compteur, sinon, tu remets simplement à jour l'heure d'arrivée.

Enfin, c'est une idée, je me suis fait un petit compteur dans ce genre sur ma page perso, ça marche très bien et les chiffres sont assez réalistes.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 172 Messages

16 janv. 2006, 20:39

Pour l'instant mon site est complètement pourrav' :lol:, donc pas trop de visiteurs, mais c'est surtout le codage php et html/css qui m'intéresse pour l'instant, bien plus que le design ou le contenu dont je m'occuperais plus tard.

Je vais faire comme tu as dis, ça me semble pas mal.

Merci :wink:

Mammouth du PHP | 19672 Messages

17 janv. 2006, 10:23

Tiens, si ç apeut t'aider un peu, voilà le code que j'utilise. Je te préviens, ça date de mes débuts en PHP, je n'y ai jamais retouché depuis deux ans :
<?php
// Paramètres de connexion à la base de données:
$serveur     = "*********"; /* Nom du serveur de base de données */
$utilisateur = "****";      /* Nom d'accès de l'administrateur de la bdd */
$passesql    = "";          /* Mot de passe de l'admin de la bdd */
$base        = "********";  /* Nom de la base de données dans laquelle sont les enregistrements */
$delai       = 7200;        /* Durée en seconde prise en compte pour établir qu'une visite est "unique" */
/* *********************************************************************************************** */
/*
*** Fonction d'incrémentation du compteur.
*/
function increment_compteur()
{
    /* Récupération de la valeur actuelle du compteur */
    $sql_nb_visit = "SELECT nombre FROM visites WHERE (id = 1)";
    $valeur = mysql_query($sql_nb_visit);
    if($compteur = mysql_fetch_array($valeur))
    {
        /* Incrémentation du compteur. */
        $plus_un = $compteur['nombre'];
        $plus_un += 1;
        /* Mise à jour du compteur. */
        $sql_maj2 = "UPDATE visites SET nombre = ". $plus_un ." WHERE id = 1";
        $maj_compteur = mysql_query($sql_maj2);
        if(!($maj_compteur))
        {
            echo("<p>".mysql_error()."</p>\n");
        }
    }
}
/*
*** Fonction de mise à jour du moment de passage lorsque l'adresse IP existe dans la base.
*/
function mise_a_jour()
{
    $adresse_ip = $_SERVER['REMOTE_ADDR'];
    $maintenant = mktime();
    $maj = "UPDATE stats SET jour = '$maintenant' where ip = '$adresse_ip' ";
    $sql_maj = mysql_query($maj);
    if(!($sql_maj))
    {
        echo("<p>".mysql_error."</p>\n");
    }
}
/* *********************************************************************************************** */

$adresse_ip = $_SERVER['REMOTE_ADDR'];
$maintenant = mktime();
/* Connexion à la base de données : d'abord, vérification que l'adresse IP est présente ou non */
$connexion = mysql_connect($serveur, $utilisateur, $passesql) or die("<h3>Impossible de se connecter au serveur de bases de données.</h3>\n<p>".mysql_error()."</p>");
mysql_selectdb($base) or die("<h3>Base de données non trouvée.</h3>\n<p>".mysql_error()."</p>");
$sql_ip = "SELECT * from stats WHERE ip = '$adresse_ip'";
/* Vérification si l'IP est présente dans la base de donnée */
if($result_ip = mysql_query($sql_ip))
{
    /* Si l'IP est trouvée, comparaison du délai entre le mktime enregistré et celui actuel
    Il s'agit alors de vérifier à combien de temps remonte la précédente visite :
    Si elle est au delà du délai fixé, on devra incrémenter le compteur de 1 */
    /* Récupération de la valeur actuelle du compteur */
    $instant = mysql_query($sql_ip);
    if($chrono = mysql_fetch_array($instant))
    {
        if(($maintenant - $chrono['jour']) < $delai )
        {
            mise_a_jour();/* L'ip a été trouvée et le délai n'est pas dépassé: simple mise à jour du moment */
        }
        else
        {
            mise_a_jour();/* L'ip a été trouvée et le délai est dépassé: mise à jour du moment et incrémentation du compteur */
            increment_compteur();
        }
    }
    else /* aucun résultat n'est trouvé correspondant dans la bdd: on incrétemente le compteur et on inscrit une nouvelle ligne dans les adresses. */
    {
        /* On établit alors une nouvelle ligne dans la table incluant l'adresse IP et le moment et
        on incrémente le compteur. */
        $sql_ip2 = "INSERT INTO stats (ip, jour) VALUES ('$adresse_ip', '$maintenant')";
        $resultat = mysql_query($sql_ip2);
        if(!($resultat))
        {
            echo("<p>".mysql_error()."</p>\n");
        }
        increment_compteur();
    }
}
/* Récupération de la valeur actuelle du compteur */
$sql_nb_visit = "SELECT nombre FROM visites WHERE (id = 1)";
$valeur = mysql_query($sql_nb_visit);
if($compteur = mysql_fetch_array($valeur))
{
    echo("<div style=\"text-align:center\">\n");
    echo("<p style=\"font-size: 11px; font-weight: bold\">Mes visiteurs à ce jours :<br />");
    echo($compteur['nombre']."</p>\n");
    echo("</div>\n");
}
mysql_close($connexion);
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 172 Messages

17 janv. 2006, 11:04

Merci :P

Je vais m'en inspirer pour optimiser le mien.

ViPHP
ViPHP | 649 Messages

18 janv. 2006, 04:56

Ou tu pourrais jouer avec les cookies, s'il a ton super cookie, tu le compte pas, s'il l'a pas, tu lui place un cookie qui dure un certains temps, à toi de voir puis tu le comptes.
Image

Eléphant du PHP | 172 Messages

19 janv. 2006, 00:41

Ah oui, ce serait aussi une bonne solution.
s'il a ton super cookie
J'aime bien l'expression super cookie :lol:

Merci :wink: