X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Создание счётчика уникальных посетителей галереи изображений.
Pavl_mw
Pavl_mw
Topic Starter сообщение 2.5.2020, 19:27; Ответить: Pavl_mw
Сообщение #1


Добрый день!
Существует счётчик для галереи изображений, но он не совсем правильно работает.
Есть два файла: index.php (в нём находится галерея, выводимая из БД) и page3.php (в нём срабатывает счётчик).
В index.php есть такая строка:

echo "<a href='page3.php?id=".$row['id']."'>$row[name]</a>";

при клике на которую происходит переход на page3.php и срабатывает счётчик.

Проблема в том, что, почему-то, в поле hosts таблицы img кол-во кликов записывается (следственно потом и выводится на экран), только значение одной картинки, а нужно, чтобы выводились значения кол-ва уникальных посетителей всех картинок, несмотря на то, что я прописываю в коде WHERE id = '".$_GET["id"]."', чтобы в поле hosts записывались значения для каждой картинке при клике на неё.
Вот полный код файла page3.php:

<?php
mysql_connect('localhost','root','');
$res = mysql_select_db('images');
//Получаем IP-адрес посетителя и сохраняем текущую дату
$visitor_ip = $_SERVER['REMOTE_ADDR'];
$date = date('Y-m-d');
$id = $_GET['id'];
echo $id;
$current_ip = mysql_query("SELECT ip_id FROM ips2 WHERE ip_address = '$visitor_ip'");
$hosts = $a['hosts'];
if(mysql_num_rows($current_ip) != 1) {
//Заносим в базу IP-адрес текущего посетителя
mysql_query("INSERT INTO ips2(ip_address) VALUES('$visitor_ip')");
//Добавляем в базу +1 уникального посетителя (хост)
mysql_query("UPDATE img SET hosts = hosts + 1 WHERE id = '".$_GET["id"]."'");
}
$res = mysql_query("SELECT * FROM img");
$row = mysql_fetch_assoc($res);
echo '<p>Уникальных посетителей: ' . $row['hosts'] . '<br />';
?>

Так выглядят две таблицы базы данных images:
Прикрепленное изображение
Прикрепленное изображение


Помогите разобраться, в чём здесь проблема?


Сообщение отредактировал Pavl - 2.5.2020, 19:28
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MattCutts_mw
MattCutts_mw
сообщение 2.5.2020, 22:44; Ответить: MattCutts_mw
Сообщение #2


ты серьезно, еще кто-то пользуется mysql?
какая у тебя версия пыха?
в твоем случае надо использовать либо COUNT либо SUM

"SELECT COUNT(1) FROM img"

при условии, что img у тебя уникальный,тогда данные у тебя будут корректные
а так твои запросы дырявые sql-injection прям из учебника можно провести, жанные надо экранировать, перед записью в базу


Сообщение отредактировал MattCutts - 2.5.2020, 22:35
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
miketomlin
miketomlin
сообщение 3.5.2020, 12:30; Ответить: miketomlin
Сообщение #3


(MattCutts @ 3.5.2020, 01:44) *
ты серьезно, еще кто-то пользуется mysql?
Вы бы поточнее выражались. Могут не так понять ;)


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Pavl_mw
Pavl_mw
Topic Starter сообщение 3.5.2020, 15:59; Ответить: Pavl_mw
Сообщение #4


MattCutts_mw
Использую версию php - 5.5. Есть возможность включить версию 7.0 и выше, но я сейчас изучаю php по видеоурокам, в которых рекомендуется  версия 5.5 - поэтому её и использую.
Прописал строку "SELECT COUNT(1) FROM img" - данные совсем не выводятся.
Прописал экранирование строки $id = mysql_real_escape_string($id); - ничего не изменилось.
Не понимаю, почему счётчик заносит значение в поле hosts, только один раз. Срабатывает один раз, несмотря на то, что я пишу WHERE id = '".$_GET["id"]."'");    При каждом клике по ссылке должно срабатывать, ведь так?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MattCutts_mw
MattCutts_mw
сообщение 3.5.2020, 16:31; Ответить: MattCutts_mw
Сообщение #5


Pavl_mw, выкинь эти курсы, они устарели оооочень давно, пятая версия уже года два как не поддерживается, если брать библиотеку, то хотя бы mysqli
при клике ничего не должно срабатывать.
php серверный язык программирования и он не может отслеживать события в браузере. для этого есть javascript, он отслеживает события в браузере, а потом может инициализировать обновления в бд через ajax
или просто при переходе на страницу, тогда да, можно обновить запись.
а твоя проблема в этом условии

if(mysql_num_rows($current_ip) != 1) {

обновление происходит в нем, а следовательно он не попадает в условие и повторное обновление не происходит

а если с одного IP зайдут два пользователя?  ) у тебя немного некорректно составлена логика

вынеси из условия

mysql_query("UPDATE img SET hosts = hosts + 1 WHERE id = '".$_GET["id"]."'");



Сообщение отредактировал MattCutts - 3.5.2020, 16:41
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MattCutts_mw
MattCutts_mw
сообщение 3.5.2020, 16:48; Ответить: MattCutts_mw
Сообщение #6


и тебе нужно не $row = mysql_fetch_assoc($res); а mysql_num_rows($res)
открой документацию или на курсе не учат ее читать?
mysql_num_rowsВозвращает количество рядов результата запроса
mysql_fetch_assocВозвращает ряд результата запроса в качестве ассоциативного массива

разницу видишь?

https://www.php.net/manual/ru/ref.mysql.php


Сообщение отредактировал MattCutts - 3.5.2020, 16:51
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Pavl_mw
Pavl_mw
Topic Starter сообщение 3.5.2020, 16:52; Ответить: Pavl_mw
Сообщение #7


MattCutts_mw
Если изменить код на:

if(mysql_num_rows($current_ip) === 1) {

то в базу данных вообще ничего не записывается. В ячейках таблицы одни нули.
Тоже самое, если убрать:

mysql_query("UPDATE img SET hosts = hosts + 1 WHERE id = '".$_GET["id"]."'");  

тоже - одни нули в таблицах.

То, что Вы пишите об устаревших курсах - это спасибо, я учту.

(MattCutts @ 3.5.2020, 19:31) *
а если с одного IP зайдут два пользователя?  )
 
А как с одного ip могут зайти два разных пользователя?  :huh:  С двух разных ip  - один пользователь может зайти, а двое с одного как?
Это, наверное уже другая тема? (нужно будет куки и сессии подключать, насколько понимаю).
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MattCutts_mw
MattCutts_mw
сообщение 3.5.2020, 16:55; Ответить: MattCutts_mw
Сообщение #8


(Pavl @ 3.5.2020, 19:52) *
А как с одного ip могут зайти два разных пользователя? :huh: С двух разных ip - один пользователь может зайти, а двое с одного как?

наверное они находятся в одной подсети, например у предприятия может быть один статичный IP адрес и 100 сотрудников выходя в сеть будут светить им, для тебя это будет один пользователь, а сессия ненадежна, закрыл браузер и все. нужна более уникальная связка данных, поищи в интернете.

сейчас найду пятый пых )


Сообщение отредактировал MattCutts - 3.5.2020, 17:01
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Pavl_mw
Pavl_mw
Topic Starter сообщение 3.5.2020, 17:02; Ответить: Pavl_mw
Сообщение #9


(MattCutts @ 3.5.2020, 19:55) *
наверное они находятся в одной подсети, например у предприятия может быть один статичный IP адрес и 100 сотрудников выходя в сеть будут светить им.  
 
Вообще-то, да. Например, в какой-либо организации есть wi-fi, который идёт от одного компьютера (с одного ip-адреса) на разные компьютеры. Но это, как раз следующая тема. Куки, сессии я дальше буду изучать.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MattCutts_mw
MattCutts_mw
сообщение 3.5.2020, 17:03; Ответить: MattCutts_mw
Сообщение #10


бросай ты этот курс лучше сразу, учись правильным вещам изначально, уже 20-й год на  дворе
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) как заслужить право на создание новой темы?
7 writer80 2208 12.3.2024, 22:54
автор: Lumex
Открытая тема (нет новых ответов) <Braga/> Создание Telegram-ботов, web-приложений, крипто-бирж, сайтов.
2 newbraga 1778 10.3.2024, 22:04
автор: newbraga
Открытая тема (нет новых ответов) СОЗДАНИЕ : / САЙтЫ / ЛЕНДЫ / БОТЫ ТГ / ВАЙТЫ / КРЕО / СОФТЫ / ДИЗАЙН [PHP, JS, HTML/CSS] и другое
5 CULA 3402 19.12.2023, 18:55
автор: CULA
Открытая тема (нет новых ответов) Создание и ведение аккаунтов в соцсетях ("В контакте"/Telegram)
Услуги от профессионального журналиста и SMM-менеджера
2 AvtorXXX 1708 13.11.2023, 23:47
автор: AvtorXXX
Открытая тема (нет новых ответов) Продается сайт фотосток ИИ изображений
Хороший вариант!
20 alexey 3277 25.6.2023, 15:28
автор: alexey


 



RSS Текстовая версия Сейчас: 20.4.2024, 8:30
Дизайн