Home > Back-end >  How to make post view count on unique user using php
How to make post view count on unique user using php

Time:04-15

I been searching on stackoverflow and I been trying a few example that I found but it's not working yet so I would be really appreciated if I can get any help or suggestion.

Basically my current goal is to update the count column only on unique user. Currently the count increase when ever a user refresh their browser so I don't think that's the best way to do count view.

I've tried something like this but the view count is still increasing when ever I refresh the page.

<?php
  require_once '../config.php';
  $id = $_GET['id'];
  if (!isset($_SESSION['recent_posts'][$id])) {
    $sql = "UPDATE song SET count = count   1 WHERE id = $id";
    $_SESSION['recent_posts'][$id] = 1;
}

  $stmt = $conn->prepare($sql);
  $stmt->execute();
?>

CodePudding user response:

You can do this by using cookies.

<?php
  require_once '../config.php';
  $id = (int)$_GET['id'];


    if (!isset($_COOKIE['view_counted'])) {
        setcookie('view_counted', $id, time()   (86400 * 30), "/"); // 86400 = 1 day
        if (!isset($_SESSION['recent_posts'][$id])) {
            $sql = "UPDATE song SET count = count   1 WHERE id = $id";
            $_SESSION['recent_posts'][$id] = 1;
        }
        $stmt = $conn->prepare($sql);
        $stmt->execute();

    }elseif (isset($_COOKIE['view_counted']) && $_COOKIE['view_counted'] != $id) {
        setcookie('view_counted', $id, time()   (86400 * 30), "/"); // 86400 = 1 day
        if (!isset($_SESSION['recent_posts'][$id])) {
            $sql = "UPDATE song SET count = count   1 WHERE id = $id";
            $_SESSION['recent_posts'][$id] = 1;
        }
        $stmt = $conn->prepare($sql);
        $stmt->execute();
    }else{
        //you have already counted this as view.
    }


?>
  • Related