За последние 24 часа нас посетили 17325 программистов и 1264 робота. Сейчас ищут 1452 программиста ...

Создание счётчика галереи изображений.

Тема в разделе "PHP и базы данных", создана пользователем Pavl, 28 апр 2020.

  1. Pavl

    Pavl Новичок

    С нами с:
    3 ноя 2017
    Сообщения:
    44
    Симпатии:
    0
    Добрый день!
    Существует счётчик и он работает. Только он работает таким образом, что он выводит кол-во уникальных посетителей (hosts) сразу всей галереи, а не отдельно по каждой картинке. Нужно, чтобы счётчик выводил на экран количество уникальных посетителей (hosts) отдельно по каждой картинке.
    Возможно, ошибаюсь, но вероятно, нужно к этому счётчику привязать id картинки, но у меня не получается этого.
    Код index.php (галерея):
    PHP:
    1. <?php
    2. mysql_connect('localhost','root','');
    3. $res = mysql_select_db('images');
    4. //var_dump($res);
    5. $res = mysql_query("SELECT * FROM img ORDER BY views DESC");
    6. //var_dump($res);
    7. while (false !== ($row = mysql_fetch_assoc($res))) {
    8.  
    9.     echo "<a href='page3.php?id=".$row[id]."'>$row[name]</a>";
    10.  
    11.     $show_img = base64_encode($row['samfile']);?>
    12. <?php
    13. echo     "<p><a href='page3.php?id=".$row[id]."'>"?><img src="data:image/jpeg;base64, <?=$show_img ?>"alt="" width="200" hegiht="200" /></a></p>
    14. <?php } ?>
    Код page3.php, выводящий на экран количество уникальных посетителей (hosts) и просмотров (views):
    PHP:
    1. <?php
    2. mysql_connect('localhost','root','');
    3. $res = mysql_select_db('images');
    4.  
    5. //Получаем IP-адрес посетителя и сохраняем текущую дату
    6. $visitor_ip = $_SERVER['REMOTE_ADDR'];
    7. $date = date('Y-m-d');
    8.  
    9.  
    10.  
    11. //Узнаём, были ли посещения за сегодня
    12. $res = mysql_query("SELECT visit_id FROM visits") or die("Проблема при подключении к БД");
    13.  
    14.  
    15. //Если сегодня ещё не было посещений
    16. if (mysql_num_rows($res) == 0)
    17. {
    18. //Очищаем таблицу ips
    19. mysql_query("DELETE FROM ips2");
    20.  
    21. //Заносим в базу IP-адрес текущего посетителя
    22. mysql_query("INSERT INTO ips2(ip_address) VALUES ('$visitor_ip')");
    23. $res_count = 0;
    24. //Заносим в базу дату посещения и устанавливаем кол-во просмотров и уник. посещений в значение 1
    25. $res_count = mysql_query("INSERT INTO visits(hosts, views) VALUES (1, 1)");
    26. }
    27.  
    28. //Если посещения сегодня уже были
    29. else
    30. {
    31. //Проверяем, есть ли уже в базе IP-адрес, с которого происходит обращение
    32. $current_ip = mysql_query("SELECT ip_id FROM ips2 WHERE ip_address = '$visitor_ip'");
    33.  
    34. //Если такой IP-адрес уже сегодня был (т. е. это не уникальный посетитель)
    35. if (mysql_num_rows($current_ip) == 1)
    36. {
    37. //Добавляем для текущей даты +1 просмотр (хит)
    38. mysql_query("UPDATE visits SET views = views + 1");
    39. }
    40.  
    41. //Если такого IP-адреса ещё не было (то есть это уникальный посетитель)
    42. else
    43. {
    44. //Заносим в базу IP-адрес этого посетителя
    45. mysql_query("INSERT INTO ips2(ip_address) VALUES('".$_SERVER['REMOTE_ADDR']."')");
    46.  
    47. //Добавляем в базу +1 уникального посетителя (хост) и +1 просмотр (хит)
    48. mysql_query("UPDATE visits SET views = views + 1, hosts = hosts + 1");
    49. }
    50. }
    51.  
    52.  
    53. $res = mysql_query("SELECT views, hosts FROM visits");
    54. $row = mysql_fetch_assoc($res);
    55.  
    56. echo '<p>Уникальных посетителей: ' . $row['hosts'] . '';
    57. echo 'Просмотров: ' . $row['views'] . '</p>';
    58.   ?>
    Просмотры (views) в коде необязательны. Их можно даже удалить из кода. Главное - hosts (уникальные посетители).
    Есть база данных images c 3 таблицами:
    Таблица img.JPG Таблица ips2.JPG Таблица visits.JPG
     
    #1 Pavl, 28 апр 2020
    Последнее редактирование: 28 апр 2020
  2. lastdays

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

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Тут либо добавить и учитывать визиты и хосты в таблице IMG либо создавать для этого дела отдельную таблицу с уникальными ID изображения.

    Т.к. у тебя изображения выводятся ВСЕ, то никакого смысла не имеет отдельно записывать визиты и хосты. Они всегда будут идентичны друг-другу.
     
    Pavl нравится это.
  3. iceblood

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

    С нами с:
    20 фев 2020
    Сообщения:
    83
    Симпатии:
    12
    Не обращая внимания на устаревший код (https://www.php.net/manual/ru/function.mysql-connect.php).
    Если верно понимаю, у тебя есть каталог картинок (ссылок) и ты хочешь подсчитать сколько раз по ним кликнул визитёр(ы).
    При генерации каталога добавляй поле сессии пользователя к каждой ссылке на картинку (расширь таблицу) и записывай, после останется подсчитать.
    IP - зачастую не является уникальным идентификатором пользователя. Добавляй кукушку.
     
    #3 iceblood, 29 апр 2020
    Последнее редактирование: 29 апр 2020
    Pavl нравится это.
  4. Pavl

    Pavl Новичок

    С нами с:
    3 ноя 2017
    Сообщения:
    44
    Симпатии:
    0
    В таблице img уже есть уникальный id у каждой картинки. Может быть в таблицу img добавить поле hosts и связать два поля из этой таблицы (id и hosts), а таблицу visits в таком случае удалить?
    visits (просмотры) в коде и базе данных необязательныы. Их ото всюду можно удалить.
    Прежде всего важно сколько раз кликнули уникальные посетители (hosts) по каждой отдельной картинке. А viwes (просмотры) в коде и в БД необязательны, их можно вообще поудалять.
     
  5. lastdays

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

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Тогда проще добавить только в img поле с визитами, если детали не нужны (типа: клиент, время, другая полезная и не оч. информация).
    Все что не нужно - удаляем сразу.
     
    Pavl нравится это.
  6. iceblood

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

    С нами с:
    20 фев 2020
    Сообщения:
    83
    Симпатии:
    12
    1) Тебе нужно идентифицировать пользователя (Сессия и/или кукушка/IP - зачастую не является уникальным идентификатором пользователя)
    2) Записать UID (UserID) + click(img) в БД
    3) вывести счетчик кликабельности пользователями по картинке.
     
    Pavl нравится это.