Количество просмотров страницы php

(Ответов: 4, Просмотров: 1288)
  1. Опытный
    • Регистрация: 06.08.2013
    • Сообщений: 307
    • Репутация: 5
    Здравствуйте, уважаемые форумчане! Скажите, пожалуйста, как подсчитать количество просмотров страницы пользователями через Cookie. Я реализовал через IP?
    PHP код:
        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);

                }


            }
        } 
    где $id - id страницы
    Заранее благодарен.
    • 0
  2. Новичок Аватар для zenn
    • Регистрация: 12.10.2014
    • Сообщений: 11
    • Репутация: 2
    • Webmoney BL: ?
    Какой то у вас вкрай извращенный алгоритм с душками говнокода, к сожалению.
    По порядку:
    PHP код:
    $count=$get_ip['views']+1
    переменная не предопределна(выше в запросе вы выбираете только значение столбца ip. Поэтому получите null + 1.
    По уму делать нужно так:
    PHP код:
    $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){ 
                        
    // дальнейший код
                

    дальше опять глупости: нарастить +1 можно прямо в запросе, заранее не подготавливая лишнюю переменную:
    PHP код:
    $update_count=$this->db->select_array_row("UPDATE article SET views=views+1 WHERE id=".$id); 
    По поводу кук юзера - это дурная затея. Ну представьте, просмотрит юзер 100500 новостей, какой размер будет куки, которая будет содержать news_id ? Конечно, можно, но раз алгоритм изначально не безопасен(куку можно удалить) я бы рекомендовал переписать его на сессии. Если за 1 сессию юзер просмотрел страницу 2 или более раз - засчитать 1 просмотр(что логично, длина сессии, если конфиг пхп не изменен - 15 минут, если цели накрутить не будет у юзера - все хорошо, в противном случае накрутят и с кукой).
    Весь ваш алгоритм превратиться в следующее:
    PHP код:
    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 новости
        

    Писал на коленке, тестить не на чем. Не забудьте в начало скрипта, после <?php добавить session_start(); если этого нет.
    Магическим образом 4 запроса в бд с полными выборками превратились в 1 запрос с выборкой кол-ва (легкий) и 1 UPDATE
    Таблицу с ип-ами можете дропнуть. Да, алгоритм не безопасен, как и алгоритм с куками, но расход ресурсов превыше пары цифр, если конечно на этом не завязана идеология приложения.
    • 1

    Спасибо сказали:

    SergeyNetIt(14.10.2014),
  3. Опытный
    • Регистрация: 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.
    • 0
  4. Новичок Аватар для zenn
    • Регистрация: 12.10.2014
    • Сообщений: 11
    • Репутация: 2
    • Webmoney BL: ?
    SergeyNetIt, я вам дал практически готовый результат, который вы довели непонятно до чего, конечно не будет работать, ведь убрана проверка (in_array())
    • 0
  5. Опытный
    • Регистрация: 06.08.2013
    • Сообщений: 307
    • Репутация: 5
    zenn, не понял. Где я пропустил in_array?
    • 0

Похожие темы

Темы Раздел Ответов Последний пост
количество просмотров записей
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

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры