За последние 24 часа нас посетили 21980 программистов и 1110 роботов. Сейчас ищут 739 программистов ...

Исключение повторного подсчета количества просмотров статьи

Тема в разделе "PHP для новичков", создана пользователем ddem, 27 сен 2017.

  1. ddem

    ddem Новичок

    С нами с:
    24 май 2017
    Сообщения:
    32
    Симпатии:
    0
    Здравствуйте. Помогите пожалуйста разобраться как правильно исключить повторный подсчет количества просмотров статьи и связать его с данным решением http://bloggood.ru/wordpress/kak-vyvesti-populyarnye-zapisi-na-wordpress-bez-plagina.html/
    Вар. №1 связать cookie и счетчик просмотров
    Как сделать проверку?Если cookies нет, тогда вызвать wpb_set_post_views(get_the_ID());, потом устанавить куки.
    Но так по многим причинам не рекомендуют делать
    https://ru.stackoverflow.com/questions/454939/Счетчик-уникальных-просмотров-через-cookie
    Вар. №2?
     
    #1 ddem, 27 сен 2017
    Последнее редактирование: 27 сен 2017
  2. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Если пользователь зареган, то отследить перешёл ли он на новость по ссылке, если перешёл, то в базу добавить, что он эту новость просмотрел, при повторном просмотре, проверить, нету ли в базе записи.
     
  3. ddem

    ddem Новичок

    С нами с:
    24 май 2017
    Сообщения:
    32
    Симпатии:
    0
    Прочитав различные статьи много всего пишут, я пытаюсь разобраться какое решение более простое и как его связать с приведенным кодом.
    Читал http://www.cyberforum.ru/php-beginners/thread1626274.html, но еще больше вопросов.
    --- Добавлено ---
    Dimon2x, спасибо!А если не делать регистрацию пользователей?
    Также прочитал такой ответ, но не совсем понимаю подходит ли для моего случая - "Можно использовать сессии. В этом случае у юзера хранится только кука с уникальным идентификатором, а вся остальная информация (массив просмотренных страниц и остальное) - на веб-сервере.
    И запись статистики получается довольно простая:
    if(!isset($_SESSION[$_GET['id']])) // если юзер перешёл на страницу site.ru?id=x, где x - номер страницы, и на такую страницу он не заходил ранее
    {
    mysql_query('INSERT/UPDATE ...'); // +1 к просмотрам в БД
    $_SESSION[$_GET['id']] = true; // Пометка, что статья была просмотрена юзером
    }"
     
  4. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Думаю незарегестрированных пользователей, проконтролироваьь нереально.
     
  5. ddem

    ddem Новичок

    С нами с:
    24 май 2017
    Сообщения:
    32
    Симпатии:
    0
    Сделав выжимку с разных постов привожу ее ниже. Как вы считаете будет ли так правильно?
    - данные хранить в БД (записывать просмотры в отдельную таблицу, записывать id новости, ip просматривающего материал пользователя и время);
    - записывать только в случае если записи с таким id материала и ip не обнаружено или запись time() старее 24 часов;
    - как метод дополнительной (клиентской) проверки, учитывать просмотр только после 10-15ти секунд нахождения пользователя на странице. Например устанавливая на странице с новостью таймер на 15 секунд который по завершении будет отправлять ajax запрос на добавление просмотра текущего материала.

    Время загрузки стр. увеличится, но может можно еще упростить?Насколько правильно так сделать?
    <?php
    $db = mysql_connect('localhost', 'root'); //подключаемся к серверу MySQL
    mysql_select_db("copyright"); //выбираем нашу БД
    $idcount = isset($_GET['id']) ? (int) $_GET['id'] : 0;

    $ip = $_SERVER['REMOTE_ADDR']; //получаем ip пользователя
    $result1 = mysql_query("SELECT * FROM ip_article WHERE ip_znach='$ip' and id_article_ip='$idcount'"); //проверяем его наличие в БД
    $row2 = mysql_num_rows($result1);

    if ($row2 < 1) //если нет, то...
    {
    mysql_query("INSERT INTO ip_article (id_article_ip, ip_znach) VALUES (\"$idcount\", \"$ip \")") or die(mysql_error());
    mysql_query("UPDATE article SET count_show=count_show+1 WHERE id = '$idcount'");
    }
    ?>
     
  6. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    реально, через таблицу визитов ( с привязкой ip) и таблицей просмотров. Только просмотры будут суммироваться не как +1+2+3, а записывать в базу либо пользователей, которые просмотрели статью, либо их ip. Но данный метод будет не совсем корректен, если ip изменится
    Или одинаковые ip у пользователей
     
  7. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Ip меняется, на одном сайте, меня забанили по ip, что бы мне его открыть, приходится это делать, через другой браузер.
     
  8. ddem

    ddem Новичок

    С нами с:
    24 май 2017
    Сообщения:
    32
    Симпатии:
    0
    Тогда может лучше решение через сессии $_SESSION ? Можно добавить проверку, чтобы избежать не засчитывания просмотра, если заходило несколько человек с одного ip.
     
  9. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    я и говорю - тут уже не совсем корректный подсчет будет, но хэй - если пользователи не зарегистрированы, то какой может идти разговор про точность просмотров?
     
    artoodetoo нравится это.