Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Создание счётчика галереи изображений. / 19 сообщений из 19, страница 1 из 1
08.05.2020, 14:11
    #39955305
Pavll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
Добрый день!
Одна из идей кода заключается в том, чтобы при двух условиях происходила запись в базу данных. А именно нужно, чтобы в промежуточную таблицу ip_id_address заносилось кол-во уникальных посетителей (hosts + 1) и выводилось потом на экран, для каждой картинки по отдельности с условием, что это новый пользователь (ip_address).
Есть файл index.php, в котором находится галерея с картинками. С index.php идёт переход в файл page3.php, в котором происходит запись в БД, выборка из Бд и вывод на экран кол-ва уникальных посетителей.
Файл page3.php:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
<?PHP
// Работа с адресной строкой
$id = intval($_GET['id']);
if (!$id) {
    die('Хьюстон, у ас проблемы');
}
// Кофигурация подключения к СУБД
define("DB_SERVER", "localhost");
//define("DB_PORT", "3306");
define("DB_USERNAME", "root");
define("DB_PASSWORD", "");
define("DB_BASE", "images");
define("DB_CHARSET", "utf-8");
// Подключение к БД
$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_BASE);
mysqli_set_charset($link, DB_CHARSET);
if (!$link) {
    die('Хьюстон, у ас проблемы');
}
// Работаем с данными полученными от пользователя
// Проверяем есть ли такой IP в таблице, можно просто повесить уникальный индекс на колонку :)
$host = $_SERVER['REMOTE_ADDR'];
$result = mysqli_query($link, "SELECT ip_address FROM id_ip_address WHERE ip_address = '" . $host . "'");
if (!mysqli_num_rows($result)) {
    $result = mysqli_query($link, "INSERT INTO id_ip_address SET ip_address = '" . $host . "' ");
}
$user = mysqli_query($link, "SELECT COUNT(ip_address) FROM id_ip_address WHERE ip_address = '" . $host . "' ");
 
// Автоинкремент статистики просмотров
$statistic = mysqli_query($link, "SELECT hosts FROM img WHERE id = " . $id);
if (!mysqli_num_rows($statistic)) {
    $statistic = mysqli_query($link, "INSERT INTO id_ip_address SET hosts = 1");
} else {
    $statistic = mysqli_query($link, "UPDATE id_ip_address SET hosts = hosts + 1");
}
$count = mysqli_query($link, "SELECT SUM(hosts) FROM id_ip_address");
// Необходимо позаботится о безопасности и сделать обработку ошибок :)
$sum = mysqli_fetch_row($count);
echo "Уникальных посетителей: " . mysqli_num_rows($user);
echo "
";
echo "Просмотров: " . $sum[0];
mysqli_close($link);
?>
Я пробую связать два условия в одно (id картинки + ip_address ), например в строку
[PHP]
$user = mysqli_query($link, "SELECT COUNT(ip_address) FROM id_ip_address WHERE ip_address = '" . $host . "' ");
?>


Пробую, добавить AND id = '$id' в строку
Код: php
1.
2.
3.
$user = mysqli_query($link, "SELECT COUNT(ip_address) FROM id_ip_address WHERE ip_address = '" . $host . "' ");
?>
но ничего не получается.


То есть, если я, например, вручную меняю ip_address в таблице (то есть, их становится 2), то и выводится на экран уникальных посетителей должно 2, а этого не происходит. Выводится, по-прежнему Уникальных посетителей: 1.
Как связать эти два условия?
Есть 3 таблицы в БД:
...
Рейтинг: 0 / 0
09.05.2020, 11:41
    #39955529
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
Pavll
Выводится, по-прежнему Уникальных посетителей: 1.
А почему там должно быть что-то другое? С таким запросом только единичка - одна строка в результате.

Pavll
нужно, чтобы в промежуточную таблицу ip_id_address заносилось кол-во уникальных посетителей (hosts + 1) и выводилось потом на экран, для каждой картинки по отдельности с условием, что это новый пользователь (ip_address).
А вот тут нифига не понятно условие. Новый пользователь добавился для картинки или новый пользователь добавился для системы в целом. Или когда картинка явилась инициатором добавления пользователя в систему. Неоднозначненько весьма.

Начните с проработки условий и алгоритма, а код по нему наваять дело нехитрое.
...
Рейтинг: 0 / 0
10.05.2020, 16:03
    #39955696
Pavll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
авторНовый пользователь добавился для картинки или новый пользователь добавился для системы в целом.

Новый пользователь - для картинки !
То есть, счётчик прибавляет "+1 уникальный посетитель" и выводит затем на экран при условии, что это уникальный посетитель для конкретной картинки . С одним ip-адресом, только 1 раз прибавляется "+1 уникальный посетитель" у каждой картинки отдельно. Такая задача.
авторНачните с проработки условий и алгоритма, а код по нему наваять дело нехитрое.

По-правде говоря, у меня сейчас наоборот - знаю задачу и цель, но, как это в коде прописать... не знаю. Пятый день уже идёт с этим заданием.
...
Рейтинг: 0 / 0
10.05.2020, 18:00
    #39955712
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
Pavll
знаю задачу и цель, но, как это в коде прописать... не знаю
И никто не знает. Потому как задачи и цели в коде не пишутся. В коде прописываются правила и последовательность действий на конкретном ЯП, необходимые для решения задачи. То же самое можно сперва написать на человекопонятном языке.

Pavll
Новый пользователь - для картинки !
Если правильно понимаю, в Вашем случае понятие "пользователь" идентично IP-адресу хоста. Для IPv4 это 32-битное целое или 4 байта. В этом смысле нет необходимости в отдельной таблице.

Pavll
уникальный посетитель для конкретной картинки
Следовательно, должна быть таблица, где перечисляются все уже имеющиеся пары "картинка-IP" с уникальным ключом по двум полям. Добавлять соответствие можно запросом INSERT IGNORE. Если запрос добавил строку - значит это новая пара, не было - имеющаяся.
Можно так вот сильно упростить решение.
...
Рейтинг: 0 / 0
11.05.2020, 14:47
    #39955893
Pavll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
Добрый день!
Я изменил код. Теперь файл page.php выглядит так:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
<?php

 mysql_connect('localhost','root','');
$res = mysql_select_db('images');
//var_dump($res);

// Получаем IP-адрес посетителя и сохраняем текущую дату(images = stats, visits = img, visit_id = id)
$id = $_SERVER['REMOTE_ADDR'];
$date = date("Y-m-d");
echo $id;


//Проверяем, есть ли уже в базе IP-адрес, с которого происходит обращение
$current_ip = mysql_query("SELECT ip_address FROM ips2");
//Проверяем, есть ли уже в базе $visitor_ip, с которого происходит обращение
$visitor_ip = mysql_query("SELECT id FROM ips2 WHERE id = '$id'");



function views_update($id) {
	$res = mysql_query("UPDATE img SET hosts = hosts + 1 WHERE id = '$id'");
}


$query = "SELECT ip_address FROM ips2 WHERE id = '" . $id . "'";

$result = mysql_query($query) or die("ERROR: " . mysql_error());

$a = mysql_fetch_array($result);


if ($visitor_ip == $a['ip_address']) {

    echo "Match=$visitor_ip";	

} else {

    echo "Mismatch=$visitor_ip";
	views_update($_GET['id']);
	//Заносим в базу IP-адрес текущего посетителя
	mysql_query("INSERT INTO ips2(ip_address) VALUES ('$id')");
	
}


$res = mysql_query("SELECT * FROM img WHERE id ='{$_GET['id']}'");
//var_dump($res);
while (false !== ($row = mysql_fetch_assoc($res))) {
   echo $nazv =  $row['name'];
   $show_img = base64_encode($row['samfile']);
   ?>
    
   <p><img src="data:image/jpeg;base64,<?php echo $show_img ?>"alt=""/></p>
   
    
	
<?php  } 

$res = mysql_query("SELECT * FROM img WHERE id ='{$_GET['id']}'");

//var_dump($res);
while (false !== ($row = mysql_fetch_assoc($res))) 
{

   echo "Просмотров:";
   echo  $count =  $row['hosts'];
  
  ?>
    
  
<?php 
} 

?>



Одну из баз данных удалил. Остальные две связал. Сейчас их две:
...
Рейтинг: 0 / 0
11.05.2020, 15:11
    #39955903
Pavll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
Дописываю текст.

Результат на данный момент такой, что при каждом клике на картинку с одного ip-адреса происходит увеличение кол-ва уникальных посетителей на единицу (hosts +1), но этого не нужно. Нужно, чтобы такое действие происходило, только 1 раз.
Есть условие:
Код: php
1.
if ($visitor_ip == $a['ip_address'])


Почему же, это действие происходит многократно?

Две таблицы:
...
Рейтинг: 0 / 0
11.05.2020, 16:42
    #39955928
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
Pavll
Одну из баз данных удалил.

Вы не путайте пожалуйста базы с таблицами. И адреса с ID.

Pavll
Остальные две связал.
Таблицы, надо полагать. Показывайте DDL таблиц, посмотрим, как они "связаны". Вроде, нужды в том нет никакой.

Pavll
Почему же, это действие происходит многократно?
Вы серьезно хотите, чтобы кто-нибудь разобрался в Вашем коде и объяснил Вам, как он работает? ;)
Попробуйте сделать это самостоятельно, полностью абстрагировавшись от решаемой задачи, забудьте о ней совсем. По именам переменных попробуйте угадать, что автор кода там хранит, по коду попытайтесь восстановить алгоритм и, наверняка, получите ответ на свой вопрос.
...
Рейтинг: 0 / 0
12.05.2020, 00:52
    #39956049
Pavll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
авторТаблицы, надо полагать. Показывайте DDL таблиц, посмотрим, как они "связаны". Вроде, нужды в том нет никакой.

Не очень понимаю, - где смотреть DDL таблиц.
Если Вы имеете в виду дамп таблиц, то я могу выложить. Только, в таком случае файлом .sql выложить или выложить само содержание этого файла (просто, оно очень длинное)?
...
Рейтинг: 0 / 0
12.05.2020, 01:28
    #39956052
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
SHOW CREATE TABLE table_name;
...
Рейтинг: 0 / 0
12.05.2020, 01:54
    #39956055
Pavll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
Что-то, какими-то небольшими получаются данные (думал будет гораздо объёмнее).
Но, если я Вас правильно понял, то, пожалуйста, результаты двух запросов:
...
Рейтинг: 0 / 0
12.05.2020, 13:49
    #39956263
Pavll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
Извиняюсь, наверное должно выглядеть так:
Раньше никогда не приходилось выполнять подобный запрос. Там нужно было ещё на "+Параметры нажать".
...
Рейтинг: 0 / 0
12.05.2020, 14:37
    #39956310
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
Ага, понятно. А какова суть и цель данного обновления?
...
Рейтинг: 0 / 0
12.05.2020, 15:41
    #39956339
Pavll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
vkle
Ага, понятно. А какова суть и цель данного обновления?

Связать две таблицы по полю id.
Цель в том, чтобы при двух условиях (id-картинки + новый ip_address) происходила запись в таблицу img в поле hosts .
...
Рейтинг: 0 / 0
12.05.2020, 16:11
    #39956356
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
А без каскадного обновления не происходит запись?
...
Рейтинг: 0 / 0
12.05.2020, 16:46
    #39956372
Pavll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
vkle
А без каскадного обновления не происходит запись?

Изменил поле ON UPDATE c "CASCADE" на "RESTRICT".
Запись также происходит, без каких-либо изменений.
...
Рейтинг: 0 / 0
13.05.2020, 02:25
    #39956612
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
Pavll
Изменил поле ON UPDATE
Ох... Вы уверены, что пишите структуру таблиц осознанно, а не методом случайного тыка? Это не поле, совсем не поле... Учебник почитать или мануал - не предлагать?
...
Рейтинг: 0 / 0
13.05.2020, 14:06
    #39956842
Pavll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
авторИзменил поле ON UPDATE
Понимаю, что это не поле таблицы, но, как это правильно называется (выпадающий список, или ещё, как-то?), - не знаю. Думал, что Вы поймёте.
Вы задали вопрос:
авторА без каскадного обновления не происходит запись?

Я Вам ответил, думал, что Вы это спрашивали. Вы, что-то другое имели в виду?
Учебник, мануал - конечно, предлагать! Может, по-меньше глупых и смешных вопросов буду задавать. :)
Только, хотелось бы, чтобы учебник был поближе к практическим задачам. Прочитал - сразу, что-то сделал.
...
Рейтинг: 0 / 0
13.05.2020, 14:53
    #39956883
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
Pavll
авторА без каскадного обновления не происходит запись?

Я Вам ответил, думал, что Вы это спрашивали. Вы, что-то другое имели в виду?Да, другое. Изначально - нафига тут нужна вообще связь таблиц. Потом, когда Вы показали связь - поинтересовался, какова суть и цель оного. Как оно должно работать по Вашей идее, может, какие-то шаги алгоритма реализовывать... А записать данные можно и без связи.
...
Рейтинг: 0 / 0
13.05.2020, 15:09
    #39956893
Pavll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание счётчика галереи изображений.
авторнафига тут нужна вообще связь таблиц

Учитывая то, что результата это не даёт, я и сам не очень понимаю, зачем?
Этот код я заимствовал из интернета, решил его адаптировать под свою задачу. Частично это получилось, частично нет (два условия никак не связываются). Мне, кто-то посоветовал, что лучший вариант в таком случае - связать две таблицы.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Создание счётчика галереи изображений. / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]