powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Создание счётчика галереи изображений.
19 сообщений из 19, страница 1 из 1
Создание счётчика галереи изображений.
    #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
Создание счётчика галереи изображений.
    #39955529
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavll
Выводится, по-прежнему Уникальных посетителей: 1.
А почему там должно быть что-то другое? С таким запросом только единичка - одна строка в результате.

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

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

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

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

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

Pavll
уникальный посетитель для конкретной картинки
Следовательно, должна быть таблица, где перечисляются все уже имеющиеся пары "картинка-IP" с уникальным ключом по двум полям. Добавлять соответствие можно запросом INSERT IGNORE. Если запрос добавил строку - значит это новая пара, не было - имеющаяся.
Можно так вот сильно упростить решение.
...
Рейтинг: 0 / 0
Создание счётчика галереи изображений.
    #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
Создание счётчика галереи изображений.
    #39955903
Pavll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дописываю текст.

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


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

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

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

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

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

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

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

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

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

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

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


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