2015-11-14 5 views
5

Я работаю над проектом, где только название сообщений показаны на главной странице и щелкать название, полный пост загружен на другой странице posts.php кода для этого:Подсчитайте количество раз Сообщения прочитано

<a href="posts.php?postId=<?php echo $row['posts_id'] ?>"><?php echo $row['title']; ?></a> 

Теперь число просмотров поста у меня есть столбец hits в моей posts таблицы, первоначально значение hits устанавливается в 0 и при открытии поста значения hits увеличивается на 1, поскольку это мой код в posts.php

$id = $_GET['postId']; 
$sql = "UPDATE posts SET hits = hits + 1 WHERE post_id = $id"; 

Но это не является хорошей практикой для отслеживания просмотров сообщений, поскольку просмотры увеличиваются всякий раз, когда страница обновляется. Я хочу, чтобы чистая система отслеживала просмотры сообщений, когда для каждого отдельного пользователя или просмотра посетителей увеличивается на один, независимо от того, сколько раз один и тот же пользователь/посетитель просматривает одно и то же сообщение (как в stackoverflow). Подобно отслеживанию их по их IP-адресу или чем-то еще, просто идея (как это делают эти ребята) или то, как работает материал, будет достаточной, чтобы я мог начать свою работу.

+1

я бы создать новую таблицу для подсчета, где есть 'post_id' и' IP' адрес зрителя. Затем запустите обновление «хитов» на этой таблице. – roullie

+3

Вам нужно немного почитать на [sql injection] (https://en.wikipedia.org/wiki/SQL_injection). Ваш примерный код широко открыт для него. – vascowhite

+0

@vascowhite thanks, о котором вы говорите о первой или второй части кода ,,, для первого я не могу найти лучший способ передать переменную, и если вы говорите о второй строке, я удаляю этот код, как я упоминал он не работает –

ответ

0

Попробуйте это будет работать

$refreshed = $_SERVER['HTTP_CACHE_CONTROL']; 
if ($refreshed == 'max-age=0'){ 
    $sql = "UPDATE posts SET hits = hits + 1 WHERE post_id = $id"; 
} 

Попробуйте этот скрипт на странице $_SERVER['HTTP_CACHE_CONTROL'] получить место при обновлении страницы

2

Вы не можете решить вашу проблему так просто. Ваша проблема заключается в подсчете уникальных пользователей, которые просматривают страницу (с, возможно, компонентом времени). У вас есть несколько проблем, как описано в комментариях. Первое - это то, что вы считаете. Для прототипа IP-адрес хорош, как и все остальное для начала работы. Тем не менее, у него много коротких дел, и вам нужно будет много думать о том, чтобы определить «посетителя».

Существует способ решить вашу проблему в SQL, что-то вроде эффективно. Но для этого требуется дополнительная таблица на уровне должности/посетителя. Он будет иметь одну строку за комбинацию, и тогда вам нужно будет подсчитывать оттуда. Чтобы быстро получить уникальный счет, вам понадобится триггер insert в этой таблице.

Вот набросок кода:

create unique index unq_postvisitors_post_visitor on postvisitors(postid, visitorid); 

insert into PostVisitors (postid, visitorid) 
    select $postid, $visitorid 
    on duplicate key update set counter = counter + 1; 

delimiter $$ 
create trigger trig_PostVisitors 
    after insert on PostVisitors 
begin 
    update posts 
     set numvisitors = numvisitors + 1 
     where posts.post_id = new.post_id; 
end;$$ 

delimiter ; 
1

Простейший способ я использую, чтобы решить эту проблему через куки.

Всякий раз, когда ваша страница открыта, вы проверяете, есть ли набор cookie_name cookie через isset($_COOKIE[$cookie_name]).

Если isset возвращает false, вы устанавливаете файл cookie через setcookie(cookie_name, value, expire);, возможно, установите время истечения в 24 часа (вы должны установить его в секундах, поэтому 24 часа - 84600). Кроме того, вы запускаете свои системы подсчета с +1 на счетчик посетителей.

Если isset возвращает true, ничего не делайте.

PHP Cookies Refs

Смежные вопросы