Здравствуйте, уважаемые форумчане! Скажите, пожалуйста, как подсчитать количество просмотров страницы пользователями через Cookie. Я реализовал через IP?PHP код:где $id - id страницы
public function getView($id){
//var_dump($id);
$res=$this->db->select_array_row("SELECT * FROM article WHERE id=".$id);
//var_dump($res);
if(!empty($res)){
$get_ip=$this->db->select_array_row("SELECT ip FROM views_ip WHERE ip='".$_SERVER['REMOTE_ADDR']."' AND id_record=".$id);
//var_dump("SELECT ip FROM views_ip WHERE ip='".$_SERVER['REMOTE_ADDR']."' AND id_record=".$id);
//var_dump($get_ip);
if(empty($get_ip)){
$count=$get_ip['views']+1;
$update_count=$this->db->select_array_row("UPDATE article SET views=$count WHERE id=".$id);
$views=$_SERVER['REMOTE_ADDR'];
$this->db->select_array_row("INSERT INTO views_ip SET ip='".$_SERVER['REMOTE_ADDR']."', id_record=".$id);
}
}
}
Заранее благодарен.
- 13.10.2014 23:15
- Регистрация: 06.08.2013
- Сообщений: 307
- Репутация: 5
- 14.10.2014 00:57
Какой то у вас вкрай извращенный алгоритм с душками говнокода, к сожалению.
По порядку:PHP код:переменная не предопределна(выше в запросе вы выбираете только значение столбца ip. Поэтому получите null + 1.$count=$get_ip['views']+1;
По уму делать нужно так:PHP код:дальше опять глупости: нарастить +1 можно прямо в запросе, заранее не подготавливая лишнюю переменную:$get_ip=$this->db->select_array_row("SELECT COUNT(*) as ip_count FROM views_ip WHERE ip='".$_SERVER['REMOTE_ADDR']."' AND id_record=".$id);
if($get_ip['ip_count'] == 0){
// дальнейший код
}
PHP код:По поводу кук юзера - это дурная затея. Ну представьте, просмотрит юзер 100500 новостей, какой размер будет куки, которая будет содержать news_id ? Конечно, можно, но раз алгоритм изначально не безопасен(куку можно удалить) я бы рекомендовал переписать его на сессии. Если за 1 сессию юзер просмотрел страницу 2 или более раз - засчитать 1 просмотр(что логично, длина сессии, если конфиг пхп не изменен - 15 минут, если цели накрутить не будет у юзера - все хорошо, в противном случае накрутят и с кукой).$update_count=$this->db->select_array_row("UPDATE article SET views=views+1 WHERE id=".$id);
Весь ваш алгоритм превратиться в следующее:PHP код:Писал на коленке, тестить не на чем. Не забудьте в начало скрипта, после <?php добавить session_start(); если этого нет.public function getView($id){
$id = (int)$id; // Не знаю есть ли у вас фу-ия авто-эскейпа входящих данных, если есть - убрать
if(in_array($id, $_SESSION['viewed_news'])) // уже смотрел? определяем точку возврата и завершаем выполнение
return;
$res = $this->db->select_array_row("SELECT COUNT(*) as news_count FROM article WHERE id=" . $id);
if($res['news_count'] < 1) // делайте прямые условия - не нужно вгонять алгоритм в сотни if(if(if(if(...)))))
return;
$update_count=$this->db->select_array_row("UPDATE article SET views=views+1 WHERE id=".$id);
$_SESSION['viewed_news'][] = $id; // Закидываем внутрь параметра сессии id новости
}
Магическим образом 4 запроса в бд с полными выборками превратились в 1 запрос с выборкой кол-ва (легкий) и 1 UPDATE
Таблицу с ип-ами можете дропнуть. Да, алгоритм не безопасен, как и алгоритм с куками, но расход ресурсов превыше пары цифр, если конечно на этом не завязана идеология приложения.Спасибо сказали:
SergeyNetIt(14.10.2014), - 15.10.2014 21:56
- Регистрация: 06.08.2013
- Сообщений: 307
- Репутация: 5
zenn, а можете посмотреть, что у вашей функции про сессию не работает. Набрал код, запускаю, не засчитывается не один просмотр. Написал вот так:
PHP код:Заранее благодарен.public function getView($id){
session_start();
var_dump($_SESSION['viewed_news']);
$id=(int)$id;
var_dump($id);
if(in_array($id,$_SESSION['viewed_news'])) return;
$res=$this->db->select_array_row("SELECT COUNT(*) as news_count FROM article WHERE id=".$id);
var_dump($this->db->select_array_row("SELECT COUNT(*) as news_count FROM article WHERE id=".$id));
if($res['news_count']<1) return;
$this->db->select_array_row("UPDATE article SET views=views+1 WHERE id=".$id);
$_SESSION['viewed_news'][] = $id;
}
Последний раз редактировалось SergeyNetIt; 15.10.2014 в 22:35.
- 16.10.2014 00:55
SergeyNetIt, я вам дал практически готовый результат, который вы довели непонятно до чего, конечно не будет работать, ведь убрана проверка (in_array())
- 16.10.2014 21:25
- Регистрация: 06.08.2013
- Сообщений: 307
- Репутация: 5
zenn, не понял. Где я пропустил in_array?
Тэги топика:
Похожие темы
Темы | Раздел | Ответов | Последний пост |
---|---|---|---|
количество просмотров записей | WordPress | 3 | 08.02.2014 15:47 |
Как выводить количество просмотров с файла single.php на главную станицу | WordPress | 12 | 19.12.2013 12:53 |
Как увеличить количество просмотров на новостном сайте? | Вопросы от новичков | 17 | 24.11.2013 21:40 |
Как узнать количество просмотров статьи? | WordPress | 2 | 28.03.2013 11:29 |
НЧ и количество просмотров страниц | Общие вопросы поисковой оптимизации | 5 | 25.11.2012 16:04 |