Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#51 2011-10-16 00:10:41

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

ikv777vlg, На счет скобок всё правильно.
$userROW['id'] так же как и $ip лучше обернуть, intval($userROW['id'])  и db_squote($ip) они являются глобальными и их можно подменить другими значениями с другого плагина и лучше обезопасится.
[hr /]
И по тому что я предлогаю:

$news = array();
foreach ($mysql->select('select * from '.prefix.'_rating') as $row)
{
		$news[$row['news_id']] = $row;
}

И делать проверку для каждый новости:
$news[$newsID] = и тут весь массив тех кто голосовал за эту новость;
и через условия проверять.

Не в сети

#52 2011-10-16 00:18:49

ikv777vlg
Участник
Откуда Волгоград
Зарегистрирован: 2011-10-10
Сообщений: 137
Рейтинг :   

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

ROZARD пишет:

ikv777vlg, На счет скобок всё правильно.
$userROW['id'] так же как и $ip лучше обернуть, intval($userROW['id'])  и db_squote($ip) они являются глобальными и их можно подменить другими значениями с другого плагина и лучше обезопасится.

Понятно wink

Не в сети

#53 2011-10-16 00:19:23

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

ikv777vlg, Я своё сообщение дополнил.

Не в сети

#54 2011-10-16 00:23:19

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

ROZARD пишет:

И делать проверку для каждый новости:
$news[$newsID] = и тут весь массив тех кто голосовал за эту новость;
и через условия проверять.

А как обеспечишь атомарность операции "добавить проголосовавшего"?
Что будет если двое одновременно проголосуют за новость?

Не в сети

#55 2011-10-16 00:26:19

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

vitaly пишет:
ROZARD пишет:

И делать проверку для каждый новости:
$news[$newsID] = и тут весь массив тех кто голосовал за эту новость;
и через условия проверять.

А как обеспечишь атомарность операции "добавить проголосовавшего"?
Что будет если двое одновременно проголосуют за новость?

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

Не в сети

#56 2011-10-16 00:29:37

ikv777vlg
Участник
Откуда Волгоград
Зарегистрирован: 2011-10-10
Сообщений: 137
Рейтинг :   

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

ROZARD пишет:

ikv777vlg, Я своё сообщение дополнил.

Да я вижу smile Но непонятно что-то, массив, цикл... Конструкция незнакомая, знаний PHP не хватает .. neutral
Покурю мануал, попробую, отпишусь...

Не в сети

#57 2011-10-16 00:35:34

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

ikv777vlg, Хотя нет, такое не получится, забудь что я написал cool

Не в сети

#58 2011-10-16 00:36:39

ikv777vlg
Участник
Откуда Волгоград
Зарегистрирован: 2011-10-10
Сообщений: 137
Рейтинг :   

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

OK, но все равно попробую, так, ради интереса smile

Не в сети

#59 2011-10-16 00:38:38

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

ikv777vlg, Не получится, для такого нужно чтобы id_новости не повторялся в таблице, а в таблице на одну новость можно прилагаться много проголосовавших...

Не в сети

#60 2011-10-16 00:39:29

ikv777vlg
Участник
Откуда Волгоград
Зарегистрирован: 2011-10-10
Сообщений: 137
Рейтинг :   

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

Уговорил smile

Не в сети

#61 2011-10-16 13:47:11

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

ikv777vlg, Делай лучше через join как vitaly написал. Запрос тогда получится как:

select * from ng_rating where (user_id='1' or ip='127.0.0.1') and news_id='1' and news_id='2' and news_id='5'

Пример реализации есть в плагине lastnews...

Не в сети

#62 2011-10-16 20:06:31

ikv777vlg
Участник
Откуда Волгоград
Зарегистрирован: 2011-10-10
Сообщений: 137
Рейтинг :   

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

ROZARD пишет:

ikv777vlg, Делай лучше через join как vitaly написал. Запрос тогда получится как:

select * from ng_rating where (user_id='1' or ip='127.0.0.1') and news_id='1' and news_id='2' and news_id='5'

Пример реализации есть в плагине lastnews...

А как понять and news_id='1' and news_id='2' and news_id='5', а если у меня 100 новостей, 500?
А за один раз как по всем новостям пройти, как запрос должен выглядеть? Чувствую такая реализация мне не по силам sad
Посмотрю что там в lastnews...

Не в сети

#63 2011-10-16 20:23:02

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

ikv777vlg, По всем не нужно проходить, а только по тем новостям которые показались юзеру, если ты конечно по 100 новостей на страницу не показываешь))

Не в сети

#64 2011-10-16 20:25:04

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

На странице у тебя отображается не 100 новостей, а пять, например. Вопрос в том, как получить список ID этих новостей, отображаемых на данной странице, чтобы засунуть их в глобальную переменную для последующего решения давать голосовать или нет. Вроде как штатно такая информация нигде не содержится...

Не в сети

#65 2011-10-16 20:27:00

ikv777vlg
Участник
Откуда Волгоград
Зарегистрирован: 2011-10-10
Сообщений: 137
Рейтинг :   

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

Wolverine пишет:

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

Вот это я и хотел сказать smile

Не в сети

#66 2011-10-16 20:40:45

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

Надо vitaly спрашивать о внедрении такой возможности в news_showone, которая отображает все новости. Данные нужные там есть, осталось из записать в какую-нить глобальную переменную, типа $SYSTEM_FLAGS

Не в сети

#67 2011-10-16 20:53:12

ikv777vlg
Участник
Откуда Волгоград
Зарегистрирован: 2011-10-10
Сообщений: 137
Рейтинг :   

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

Wolverine пишет:

Надо vitaly спрашивать о внедрении такой возможности в news_showone, которая отображает все новости. Данные нужные там есть, осталось из записать в какую-нить глобальную переменную, типа $SYSTEM_FLAGS

А это ключ к успеху smile

Функция news_showone находится в news.php, нашел я ее, а как она работает, интересно...
Но она большая конечно yikes

Не в сети

#68 2011-10-16 21:37:44

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

Wolverine пишет:

Надо vitaly спрашивать о внедрении такой возможности в news_showone, которая отображает все новости. Данные нужные там есть, осталось из записать в какую-нить глобальную переменную, типа $SYSTEM_FLAGS

Ты хотел сказать news_showlist()?
Не прокатит, т.к. новости рендерятся по мере получения данных... хотя.. $mysql->select() ведь сразу всё в память выгружает.
В принципе можно сделать сканирование массива перед отрисовкой данных и всем плагинам сразу же давать список ID новостей, которые будут показаны в этом цикле.
Подумаю над идеей.

Не в сети

#69 2011-10-16 21:54:36

ikv777vlg
Участник
Откуда Волгоград
Зарегистрирован: 2011-10-10
Сообщений: 137
Рейтинг :   

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

vitaly пишет:
Wolverine пишет:

Надо vitaly спрашивать о внедрении такой возможности в news_showone, которая отображает все новости. Данные нужные там есть, осталось из записать в какую-нить глобальную переменную, типа $SYSTEM_FLAGS

Ты хотел сказать news_showlist()?
Не прокатит, т.к. новости рендерятся по мере получения данных... хотя.. $mysql->select() ведь сразу всё в память выгружает.
В принципе можно сделать сканирование массива перед отрисовкой данных и всем плагинам сразу же давать список ID новостей, которые будут показаны в этом цикле.
Подумаю над идеей.

Точно. Ради интереса попробовал... Я в news.php в функции news_showlist() объявил глобальную переменную $list_id,
и после

	foreach ($mysql->select($query['result']) as $row) {
		$i++;
		$nCount++;

вставил

$list_id=$list_id.$row['id'].";";

а в начало функции ipcheck() в rating.php вставил

global $list_id;
echo $list_id."<br />";

И за 6 обращений к функции, вывод в браузер получается такой:

1;
1;
1;2;
1;2;
1;2;5;
1;2;5;

по 2 обращения на каждую новость

Vitaly, ты уж придумай что-нибудь wink

Изменено ikv777vlg (2011-10-16 21:56:14)

Не в сети

#70 2011-10-16 21:56:06

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

vitaly пишет:

Ты хотел сказать news_showlist()?

ага

Не в сети

#71 2011-10-16 22:02:08

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

ikv777vlg пишет:

И за 6 обращений к функции, вывод в браузер получается такой:

1;
1;
1;2;
1;2;
1;2;5;
1;2;5;

по 2 обращения на каждую новость

Вот именно, поэтому у тебя и запросы с дубликатами. Зачем у тебя два раза отрабатывает логика на каждую новость?

Не в сети

#72 2011-10-16 22:03:57

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

ikv777vlg, в твоей реализации полный список новостей ты получаешь на  самой последней новости, при этом даже не знаешь какая из них будет последней smile
А несколько вызовов - скорее всего у тебя активен плагин lastnews или подобный ему, плагины тоже могут использовать (и используют) news_showlist() для своих целей.
Так что смотри значение $callingParams['plugin'] - если там что-то есть, то вызов идёт через плагин и ты можешь сам решать что тебе делать (можно из обработчика твоего плагина сделать сразу же return).

Не в сети

#73 2011-10-16 22:12:46

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

vitaly пишет:

ikv777vlg, в твоей реализации полный список новостей ты получаешь на  самой последней новости, при этом даже не знаешь какая из них будет последней smile

По идее надо делать

global $TemplateCache;
if(!isset($TemplateCache['plugin']['rating']['info']))
 $TemplateCache['plugin']['rating']['info'] = получаем_данные_для всех_новостей;

Потом используем здесь же в новости, как if($TemplateCache['plugin']['rating'][$newsID] == true) Ну в зависимости от структуры данных на предыдущем этапе. Нам и знать не надо в какой из новостей получается список, данные получили при первом вызове, а во всех остальные они уже будут доступны без запросов.

Не в сети

#74 2011-10-16 23:06:01

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

Wolverine, проблема в том, что полный список ID'шников ты узнаёшь в самом конце smile
Мысли на самом деле есть, возможно успею сделать до релиза smile

Не в сети

#75 2011-10-16 23:46:31

ikv777vlg
Участник
Откуда Волгоград
Зарегистрирован: 2011-10-10
Сообщений: 137
Рейтинг :   

Re: Защита от накруток в плагине rating, запись IP-адреса юзера в БД

Wolverine пишет:
ikv777vlg пишет:

И за 6 обращений к функции, вывод в браузер получается такой:

1;
1;
1;2;
1;2;
1;2;5;
1;2;5;

по 2 обращения на каждую новость

Вот именно, поэтому у тебя и запросы с дубликатами. Зачем у тебя два раза отрабатывает логика на каждую новость?

Долгая история... smile
Давно еще делал разные блоки голосования для короткой и полной новости, нужно было вывести в шаблон еще одно значение... и функция rating_show($newsID, $rating, $votes) вызывалась 2 раза..
Уже пофиксил, обошелся одним вызовом функции на одну новость, немного в ущерб дизайну(которого нет lol), но суть дела не меняет:

1;
1;2;
1;2;5;

или

SQL queries:
[ 0.0003 ] select * from `ng_category` order by posorder asc
[ 0.0002 ] select * from ng_users where authcookie = '599386dbeb6845f459b6e226045a07c3' limit 1
[ 0.0005 ] SELECT * FROM ng_news WHERE (`approve` = '1') AND (`mainpage` = '1') order by ratesort desc, postdate desc limit 0,3
[ 0.0003 ] select * from ng_rating where (user_id='1' or ip='127.0.0.1') and news_id='1'
[ 0.0002 ] select * from ng_rating where (user_id='1' or ip='127.0.0.1') and news_id='2'
[ 0.0002 ] select * from ng_rating where (user_id='1' or ip='127.0.0.1') and news_id='5'
[ 0.0002 ] SELECT count(*) as count FROM ng_news WHERE (`approve` = '1') AND (`mainpage` = '1')

Теперь по одному запросу на новость. Например - если 20 новостей на странице - плюс 20 запросов в БД smile

Изменено ikv777vlg (2011-10-16 23:54:52)

Не в сети

Подвал раздела

Работает на FluxBB