Compter nombre de vue

theagar

theagar Le 4 avril 2016 à 20:30 (Édité le 25 janvier 2019 à 17:50)

Bonjour @PrimFX,

Je me demandais comment tu comptais le nombre de vue des articles/topics/...
  • Chaque fois que quelqu'un clique sur le lien sa rajoute une vue dans ta base de données?
  • Chaque fois que quelqu'un visite la page tu rajoutes une vue dans ta base de données?
  • ...
Je te remercie déjà d'avance,
Julien
PrimFX

PrimFX Le 5 avril 2016 à 00:45

Salut !

Personnellement je compte le nombre de vues lorsque quelqu'un visite une page et non lorsqu'une personne clique sur un lien pour visiter cette page 😉

Après, il existe de nombreuses façons de faire, et tout dépend de la structure de ton site, de ta base de donnée, etc. Aucune façon n'est meilleure qu'une autre, tout dépend du contexte !

En espérant avoir pu t'aider 😉

@+

PS: Vu qu'on est sur un forum, tente de t'adresser à toute la communauté plutôt que directement à moi. En plus, ça te permettrait d'avoir plus d'avis et d'autres pistes à explorer pour trouver une solution adéquate à ton problème 8| Merci !
theagar

theagar Le 5 avril 2016 à 09:18

D'accord,

Et vos scripte ils ressemblent à quoi?
Parce que si je fais comme @PimFX, et l'utilisateur rafraîchit la page, ça va compter plein de vues...

Merci d'avance ! 😉
PrimFX

PrimFX Le 5 avril 2016 à 13:21

Salut !

Pour que chaque refresh de page ne compte pas une vue supplémentaire, tu as plusieurs possibilités. En voici deux:
  • Tu enregistres l'IP de l'utilisateur qui a visité ta page avec $_SERVER['REMOTE_ADDR'] et tu n'acceptes qu'une "vue" par IP
  • Tu peux ajouter en plus de l'IP un timer, histoire d'autoriser plusieurs vues par IP mais avec un certain temps d'intervalle... L'exemple ci-dessous fonctionne avec ce principe et un intervalle minimum de 30 minutes pour compter une nouvelle vue. Je te laisse l'étudier, l'adapter selon tes besoins, et poser tes questions s'il y en a 😉
<?php

// $id_article = L'id de ton article / Ce sur quoi tu veux compter tes vues 😋

$unixactual = date('U');
$userip = $_SERVER['REMOTE_ADDR'];
$userlastview = $bdd->prepare('SELECT * FROM vues WHERE ip = ? AND id_article = ? ORDER BY id DESC LIMIT 0,1');
$userlastview->execute(array($userip,$id_article));
$userlastviewis = $userlastview->rowCount();
if($userlastviewis==1) {
  $inactive_minutes = 30;
  $inactive_secondes = $inactive_minutes*60;
  $userlastviewunixtime = $userlastview->fetch();
  $userlastviewunixtime = $userlastviewunixtime['unix_time'];
  if($unixactual-$inactive_secondes > $userlastviewunixtime) {
    $addview = $bdd->prepare('INSERT INTO vues(ip,id_article,unix_time) VALUES (?,?,?)');
    $addview->execute(array($userip,$id_article,$unixactual));
  }
} else {
  $addview = $bdd->prepare('INSERT INTO vues(ip,id_article,unix_time) VALUES (?,?,?)');
  $addview->execute(array($userip,$id_article,$unixactual));
}
$nombre_vues = $bdd->prepare('SELECT id FROM vues WHERE id_article = ?');
$nombre_vues->execute(array($id_article));
$nombre_vues = $nombre_vues->rowCount();

?>
@+
theagar

theagar Le 5 avril 2016 à 14:14

Tu sais poster une photo de la base de données stp?

Merci! 😀
PrimFX

PrimFX Le 5 avril 2016 à 14:56

Voilà un petit screen de la structure de la table "vues" de ma base de donnée 😉

Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte