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

Langage PHP Discussion :

compteur de visites fiable


Sujet :

Langage PHP

  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 486
    Billets dans le blog
    1
    Par défaut compteur de visites fiable
    Bonsoir,

    même en ayant appliqué les conseils (ici) fort sympathiques de BPiero, mon compteur de visites marche mal ; il faut croire que le script récupéré sur le net est mauvais. Je suis donc intéressé par un compteur de visites fiables.

    Rappel du cahier des charges :
    Ce que je souhaite afficher, c'est :
    -Le compteur de visite par jour
    -Le compteur de visiteurs actuellement connectés
    et un visiteur compte une seule fois dans l'heure.

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2011
    Messages : 154
    Par défaut
    Alors il nous faut une table: visites, avec 2 champs: ip, varchar 16, et timestamp int 10
    soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE IF NOT EXISTS `visites` (
      `ip` varchar(16) COLLATE utf8_unicode_ci NOT NULL,
      `timestamp` int(10) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    Ensuite pour le php, c'est pas bien sorcier ni bien long:
    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
    // Connexion à MySQL
    $db = mysqli_connect("localhost", "user", "pass", "db");
     
    // On commence par supprimer les enregistrements de la veille c'est à dire
    // ceux dont le timestamp est inferieur au timestamp du jour à 0h 0mn 0s
    mysqli_query($db, 'DELETE FROM visites WHERE timestamp < ' . mktime(0,0,0));
     
    // Calcul du timestamp d'il y a 1 heure
    $ts=time()-(60 * 60);
    // On supprime la dernière visite si elle est antérieure de moins d'1h
    mysqli_query($db, "DELETE FROM visites WHERE timestamp>$ts AND ip ='".$_SERVER['REMOTE_ADDR']."'");
     
    // Ajout de la visite actuelle
    mysqli_query($db, "INSERT INTO visites VALUES('" . $_SERVER['REMOTE_ADDR'] . "', " . time() . ')');
     
    // Décompte du nombre de visites de la journée
    $res = mysqli_query($db, 'SELECT COUNT(*) AS compteur FROM visites');
    $data = mysqli_fetch_array($res);
    $compteur_j = $data['compteur'];
     
    // Calcul du timestamp d'il y a 5mn
    $ts=time()-(60 * 5);
    // Décompte du nombre de visiteurs connectés (qui ont eu une visite il y'a moins de 5mn)
    $res = mysqli_query($db, 'SELECT COUNT(*) AS compteur FROM visites WHERE timestamp > ' . $ts);
    $data = mysqli_fetch_array($res);
    $compteur_c = $data['compteur'];
    Quand je pense au pâté que t'a recopié sur le net

    Tu me dira si ça marche?
    @+

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 486
    Billets dans le blog
    1
    Par défaut
    Merci encore de ton aide, mais comme ça, ça marche pas : y a 0 connectés ! J'ai tenté 2 petites modifs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Décompte du nombre de visiteurs de la journée
    $res = mysqli_query($db, 'SELECT * FROM visites');
    $num_connectes_jour=mysqli_num_rows($res);
    $compteur_j = $num_connectes_jour;
    mais par exemple 2e connecté alors qu'il y en a eu 3 (d'après le contenu de la table)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ts=time()-(60 * 5);
    $res = mysqli_query($db, 'SELECT * FROM visites WHERE timestamp > ' . $ts);
    $num_connectes=mysqli_num_rows($res);
    $compteur_c = $num_connectes;
    donc comprends pas...

    et au fait, le "pâté", c'est pas moi qui l'ai récupéré, mais le gars que j'aide (et qui ne connaît ni le html ni le PHP)
    Et pour la spéc, je m'étais trompé :
    un visiteur ne compte pas qu'une fois dans l'heure mais qu'une fois par jour (calendaire ça serait le top au lieu de 24h consécutif)

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2011
    Messages : 154
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Merci encore de ton aide, mais comme ça, ça marche pas : y a 0 connectés !

    Citation Envoyé par laurentSc Voir le message
    J'ai tenté 2 petites modifs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Décompte du nombre de visiteurs de la journée
    $res = mysqli_query($db, 'SELECT * FROM visites');
    $num_connectes_jour=mysqli_num_rows($res);
    $compteur_j = $num_connectes_jour;
    mais t'as vu ce que t'as écrit? ton code ne fait strictement rien à part alourdire, tu ne fais qu'utiliser une variable intermédiaire.
    Citation Envoyé par laurentSc Voir le message
    mais par exemple 2e connecté alors qu'il y en a eu 3 (d'après le contenu de la table)
    re je comprends pas trop... Remets tout à 0 et re-teste.
    Citation Envoyé par laurentSc Voir le message
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ts=time()-(60 * 5);
    $res = mysqli_query($db, 'SELECT * FROM visites WHERE timestamp > ' . $ts);
    $num_connectes=mysqli_num_rows($res);
    $compteur_c = $num_connectes;
    donc comprends pas...
    Moi ce que je comprends pas c'est ce que t'as écrit... Bon alors:
    60*5 c'est 5mn en s
    time()-(60*5) c'est le timestamp d'il y a 5mn
    SELECT * FROM visites WHERE timestamp > ' . $ts ça sélectionne toutes les visites dont le timestamp est superieur au timestamp d'il y a 5mn
    Mais ça n'est pas mon code? tu as désoptimisé enfin ça devrai fonctionner quand même...
    Citation Envoyé par laurentSc Voir le message
    et au fait, le "pâté", c'est pas moi qui l'ai récupéré, mais le gars que j'aide (et qui ne connaît ni le html ni le PHP)
    Désolé , au temps pour moi...
    Citation Envoyé par laurentSc Voir le message
    Et pour la spéc, je m'étais trompé :
    Horreur et damnation, la spec c le plus important, tout en découle, on ne doit jamais se tromper dessus sinon il faut tout reprendre à 0. Bon on va reprendre à 0 c'est pas trop long si tu as fait une autre erreur c'est le moment de le dire. Je vérifie mon code, et je fais les modifs...

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2011
    Messages : 154
    Par défaut
    Bon, chez moi ça a marché du premier coup avec le code que je t'ai passé.
    Essaie avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error_reporting(E_ALL);
    ini_set('display_errors','1');
    en début de code pour voir si il y a pas une autre erreur.

    tu as bien compris que $compteur_j c'est les visiteurs de la journée, et $compteur_c c'est les visiteurs connectés?
    fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($compteur_c, $compteur_j);
    juste après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $compteur_c = $data['compteur'];
    pour vérifier que tu les as pas écrasé après.

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2011
    Messages : 154
    Par défaut correction pour qu'un visiteur ne compte qu'une fois par jour calandaire
    Donc c'est assez simple:
    il faut commencer par supprimer les lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Calcul du timestamp d'il y a 1 heure
    $ts=time()-(60 * 60);
    // On supprime la dernière visite si elle est antérieure de moins d'1h
    mysqli_query($db, "DELETE FROM visites WHERE timestamp>$ts AND ip ='".$_SERVER['REMOTE_ADDR']."'");
    Puis ajouter une primary_key à la table: l'ip:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE `visites` ADD PRIMARY KEY ( `ip` ) ;
    ensuite remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Ajout de la visite actuelle
    mysqli_query($db, "INSERT INTO visites VALUES('" . $_SERVER['REMOTE_ADDR'] . "', " . time() . ')');
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Si l'ip n'est pas connue, elle sera ajoutée, sinon elle sera mise à jour
    mysqli_query($db, "REPLACE INTO visites VALUES('" . $_SERVER['REMOTE_ADDR'] . "', " . time() . ')');
    récapitulatif:
    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
    error_reporting(E_ALL);
    ini_set('display_errors','1');
     
    // Connexion à MySQL
    $db = mysqli_connect("localhost", "user", "pass", "db");
     
    // On commence par supprimer les enregistrements de la veille c'est à dire
    // ceux dont le timestamp est inferieur au timestamp du jour à 0h 0mn 0s
    mysqli_query($db, 'DELETE FROM visites WHERE timestamp < ' . mktime(0,0,0));
     
    // Si l'ip n'est pas connue, elle sera ajoutée, sinon elle sera mise à jour
    mysqli_query($db, "REPLACE INTO visites VALUES('" . $_SERVER['REMOTE_ADDR'] . "', " . time() . ')');
     
    // Décompte du nombre de visites de la journée
    $res = mysqli_query($db, 'SELECT COUNT(*) AS compteur FROM visites');
    $data = mysqli_fetch_array($res);
    $compteur_j = $data['compteur'];
     
    // Calcul du timestamp d'il y a 5mn
    $ts=time()-(60 * 5);
    // Décompte du nombre de visiteurs connectés (qui ont eu une visite il y'a moins de 5mn)
    $res = mysqli_query($db, 'SELECT COUNT(*) AS compteur FROM visites WHERE timestamp > ' . $ts);
    $data = mysqli_fetch_array($res);
    $compteur_c = $data['compteur'];
     
    var_dump($compteur_c, $compteur_j);
    Je teste...
    ça marche...
    @+

  7. #7
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 486
    Billets dans le blog
    1
    Par défaut
    Bon pour exécuter la commande SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE `visites` ADD PRIMARY KEY ( `ip` ) ;
    il a d'abord fallu que je "vide" la table (delete from `visites`) sinon il voulait pas. Mais maintenant, ça a l'air de fonctionner.
    Par contre, avec l'affichage des erreurs, on est noyé sous les warnings. Pour que tu le constates, voici le lien : http://www.olympiquenivernais.fr/accueil/index.php En plus, si tu vas dessus, comme je laisse le site ouvert, on verra si le nombre de connectés passe à 2 (et tu devrais être le 2e visiteur du jour).
    La ligne 737 qui semble poser problème, je la découvre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($z=1; $z<20 ;$z++)
    Et ça :
    Warning: mktime() expects parameter 4 to be long, string given in...
    qu'est-ce que tu en penses ?

    Sinon, quelques questions techniques :
    - dans ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $data = mysqli_fetch_array($res);
    $compteur_j = $data['compteur'];
    tu fais un "mysqli_fetch_array" et ensuite tu manipules le tableau $data en tableau associatif ; pourquoi ça marche ? Est-ce que si on précise rien, le tableau est associatif ?
    - peux-tu m'expliquer pourquoi il fallait mettre le champ IP en PRIMARY_KEY et le principe de la commande "REPLACE" (Google ne me parle que d'un REPLACE utilisé dans un UPDATE) ?

    Et sinon, je ne m'étais pas vraiment trompé sur la spéc ; je t'avais dit ce qui me paraissait logique, sauf que mon interlocuteur ne voit pas les choses comme ça...

  8. #8
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2011
    Messages : 154
    Par défaut
    Whow, c'est le bordel, y'en a des erreurs
    La ligne 737 ne me semble pas problématique, regardes la précédente, j'ai pas accès à ton code.
    Le warning sur le mktime(), j'espère que ça vient pas du code que je t'ai passé, sinon c vraiment la merde, parcequ'on a utilisé les paramètres par défaut à partir du 4ème arg.

    Sinon je suis le 3ème visiteur du jour, et on est 2 à être co, ce qui me semble vraisemblable.

    Ce que je te propose c'est de cacher les misères (c'est très mal): d’arrêter d'afficher les erreurs parce que ton site est en prod (ou beaucoup mieux: débug).

    Je réponds de suite à tes questions techniques.

  9. #9
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2011
    Messages : 154
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Sinon, quelques questions techniques :
    - dans ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $data = mysqli_fetch_array($res);
    $compteur_j = $data['compteur'];
    tu fais un "mysqli_fetch_array" et ensuite tu manipules le tableau $data en tableau associatif ; pourquoi ça marche ? Est-ce que si on précise rien, le tableau est associatif ?
    Pas exactement mais presque, si on précise rien c'est à la fois sous forme associative et numérique.
    Citation Envoyé par laurentSc Voir le message
    - peux-tu m'expliquer pourquoi il fallait mettre le champ IP en PRIMARY_KEY et le principe de la commande "REPLACE" (Google ne me parle que d'un REPLACE utilisé dans un UPDATE) ?
    Bien sûr, la commande REPLACE n'est pas trop connu mais pourtant super utile, elle a la même syntaxe et la même utilité que INSERT, sauf que si la clé primaire existe déjà, elle remplace l'enregistrement(UPDATE). C'est pour ça qu'il fallait mettre l'IP en clé primaire. Ainsi si quelqu'un se reconnecte dans la journée, une visite n'est pas ajoutée mais remplace la précédente.
    Citation Envoyé par laurentSc Voir le message
    Et sinon, je ne m'étais pas vraiment trompé sur la spéc ; je t'avais dit ce qui me paraissait logique, sauf que mon interlocuteur ne voit pas les choses comme ça...
    Je m'en suis douté, mais je rigolais quand je disais que c'était la fin du monde, supprimer une ligne, ajouter un clé, et remplacer un insert par un replace, c'est pas la mer à boire... Tu l'as pas mal pris? Sinon professionnellement ça m'est arrivé quelques fois, et là tu pleure, mais surtout tu comprends le bien fondé de certaines bonnes pratiques de développement.
    @+
    Tu me tiens au jus si y'a des bug?
    Piero

  10. #10
    Membre habitué
    Homme Profil pro
    Petit Webmaster Amateur
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Petit Webmaster Amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Et sinon, je ne m'étais pas vraiment trompé sur la spéc ; je t'avais dit ce qui me paraissait logique, sauf que mon interlocuteur ne voit pas les choses comme ça...
    Comment ça Laurent c'est pas logique qu'un même visiteur soit comptabilisé qu'une fois par jour calendaire et par par heure ?!?

    Bon c'est un peu le bordel là le site ... mais je vous fais confiance

    En tout cas merci à vous 2 pour ce que vous faites

  11. #11
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 486
    Billets dans le blog
    1
    Par défaut
    Bon c'est un peu le bordel là le site
    Ca ne l'est plus car j'ai enlevé l'affichage des erreurs.

    Bon, je vous laisse : "à table"...

  12. #12
    Membre habitué
    Homme Profil pro
    Petit Webmaster Amateur
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Petit Webmaster Amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Ca ne l'est plus car j'ai enlevé l'affichage des erreurs.
    Ah oui ça va mieux

    Mais les erreurs sont toujours là ? Elles ne gênent pas ?

    Petite question: pour le compteur de connecté ce n'est pas un peu long de récupérer le nombre de connecté dans les 5 dernières minutes ?
    Mais si on réduit à 1 minute par exemple est ce quelqu'un qui reste connecté 3 minutes sera comptabilisé entre sa 1ère et sa 3ème minute de présence ?

  13. #13
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 486
    Billets dans le blog
    1
    Par défaut
    pour le compteur de connecté ce n'est pas un peu long de récupérer le nombre de connecté dans les 5 dernières minutes ?
    Mais si on réduit à 1 minute par exemple est ce quelqu'un qui reste connecté 3 minutes sera comptabilisé entre sa 1ère et sa 3ème minute de présence ?
    T'inquiète pas :
    Ainsi si quelqu'un se reconnecte dans la journée, une visite n'est pas ajoutée mais remplace la précédente.
    Mais les erreurs sont toujours là ? Elles ne gênent pas ?
    Ce ne sont que des warnings....

    Pour info, SAEZ58, je viens de retrouver mon site de test TOWEB

  14. #14
    Membre habitué
    Homme Profil pro
    Petit Webmaster Amateur
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Petit Webmaster Amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Par défaut
    Citation Envoyé par laurentSc Voir le message

    T'inquiète pas :
    Ainsi si quelqu'un se reconnecte dans la journée, une visite n'est pas ajoutée mais remplace la précédente.
    Oui mais je parlais du compteur "live"
    Si je comprends un peu le code il récupère à l'instant où l'on affiche la page
    le nombre de "présents" sur le site dans les 5 dernières minutes or ça me parait long et donc très susceptible de renvoyer une info erronée.
    A côté de ça je me posais la question (car ça je n'arrive pas à le savoir d'après le code, noob oblige ) de la conséquence de mettre un temps plus court que ces 5 minutes sur la véracité du nombre de connectés.
    Si on met 1 minute la personne connectée depuis plus d'une minute sera t'elle toujours comptée dans les connectés au delà de cette minute (j'espère que je suis clair car pas facile à expliquer..) ?

    Citation Envoyé par laurentSc Voir le message

    Ce ne sont que des warnings....
    Ok donc ça perturbe aucunement le fonctionnement du site si je comprends bien.

    Citation Envoyé par laurentSc Voir le message

    Pour info, SAEZ58, je viens de retrouver mon site de test TOWEB
    C'est une bonne nouvelle, tu dois être soulagé !

  15. #15
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 486
    Billets dans le blog
    1
    Par défaut
    Si on met 1 minute la personne connectée depuis plus d'une minute sera t'elle toujours comptée dans les connectés au delà de cette minute
    Je crois que non justement ; BPiero, n'y aurait-il pas moyen de réexécuter le script chaque minute, un peu comme avec le setTimeout du javascript ?

  16. #16
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 414
    Par défaut
    Il est déclenché comment ce script ? Au chargement de la page ? Si oui un visiteur qui regarde la même page depuis plus de cinq minutes ne sera plus comptabilisé dans les visiteurs connectés (si vous vous basez sur 5 minutes).
    Il faudrait faire périodiquement une requête ajax vers ce script de comptage pour mettre le timestamp à jour.


    Sinon plutôt que REPLACE il vaut mieux généralement utiliser INSERT... ON DUPLICATE KEY UPDATE. Je soupçonne que cette dernière syntaxe soit plus optimisée puisque REPLACE fait systématiquement 2 requêtes pour toute clé déjà existante (une requête d'insertion suivi d'une requête de suppression) ce qui des effets secondaires parfois gênants notamment le changement de l'id auto incrémenté pour une ligne déjà existante (mais il n'y a pas d'id auto incrémenté dans votre exemple donc pas de souci de ce côté là), et l'effacement de l'ancienne ligne peut aboutir à des suppressions de lignes dans d'autres tables si on a utilisé des contraintes on cascade.

  17. #17
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 486
    Billets dans le blog
    1
    Par défaut
    Il faudrait faire périodiquement une requête ajax vers ce script de comptage pour mettre le timestamp à jour.
    Me voilà bien, moi qui ne connais pas Ajax...

  18. #18
    Membre habitué
    Homme Profil pro
    Petit Webmaster Amateur
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Petit Webmaster Amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Par défaut
    Te casses pas la tête Laurent on peut peut être trouver un juste milieu en mettant par exemple 3mn car je suppose que lorsque l'utilisateur change de page sur le site son timestamp doit se mettre à jour donc il n'y aurait que si l'utilisateur resterait plus de 3mn sur une page qu'il ne serait plus comptabilisé comme visiteur en cours.
    Ce qui sera à mon avis assez rare (rester plus de 3mn sur une page) et de toute façon pas bien grave si cette personne n'est plus compté tant qu'elle ne fait rien

  19. #19
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 486
    Billets dans le blog
    1
    Par défaut
    C'est justement ce que j'allais te proposer ; le seul cas où ça ne marchera pas : le visiteur reste plus de 3' sur une page, alors les autres (pas lui) ne le prendront pas en compte dans le nombre de connectés (pas lui car le script étant appelé à l'ouverture de la page, ça fait forcément moins de 3', mais si un autre visiteur change de page à ce moment-là, celui qui n'a pas bougé depuis plus de 3' ne sera pas compté.)

    Je mets cette discussion en "résolu" car je crois que c'est bon.

    Et un dernier +1 à BPiero pour son aide.

  20. #20
    Membre habitué
    Homme Profil pro
    Petit Webmaster Amateur
    Inscrit en
    Avril 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Petit Webmaster Amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2013
    Messages : 13
    Par défaut
    Oui on va faire comme ça Laurent, on peut même mettre 2 minutes c'est bon

    Du coup c'est tout bon là pour le compteur, ça marche et c'est modifié pour le comptage hebdo par jour calendaire ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. compteur de visites de site
    Par kephrem dans le forum Langage
    Réponses: 1
    Dernier message: 05/03/2006, 21h42
  2. Compteur de visite
    Par dj-julio dans le forum Langage
    Réponses: 5
    Dernier message: 31/01/2006, 09h20
  3. [Sécurité] compteur de visites en php
    Par stanley dans le forum Langage
    Réponses: 2
    Dernier message: 23/10/2005, 15h47
  4. 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