Русский English Deutsch Українська Қазақша

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

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

Вы не вошли.

#51 2011-10-15 23: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-15 23:18:49

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

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

ROZARD пишет:

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

Понятно ;)

Вне форума

#53 2011-10-15 23:19:23

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

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

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

Вне форума

#54 2011-10-15 23:23:19

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

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

ROZARD пишет:

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

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

Вне форума

#55 2011-10-15 23:26:19

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

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

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

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

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

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

Вне форума

#56 2011-10-15 23:29:37

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

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

ROZARD пишет:

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

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

Вне форума

#57 2011-10-15 23:35:34

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

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

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

Вне форума

#58 2011-10-15 23:36:39

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

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

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

Вне форума

#59 2011-10-15 23:38:38

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

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

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

Вне форума

#60 2011-10-15 23:39:29

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

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

Уговорил :)

Вне форума

#61 2011-10-16 12: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 19: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 19:23:02

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

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

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

Вне форума

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

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

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

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

Вне форума

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

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

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

Wolverine пишет:

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

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

Вне форума

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

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

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

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

Вне форума

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

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

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

Wolverine пишет:

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

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

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

Вне форума

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

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

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

Wolverine пишет:

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

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

Вне форума

#69 2011-10-16 20: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, ты уж придумай что-нибудь ;)

Отредактировано ikv777vlg (2011-10-16 20:56:14)

Вне форума

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

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

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

vitaly пишет:

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

ага

Вне форума

#71 2011-10-16 21: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 21:03:57

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

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

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

Вне форума

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

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

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

vitaly пишет:

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

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

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

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

Вне форума

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

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

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

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

Вне форума

#75 2011-10-16 22: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 запросов в БД =)

Отредактировано ikv777vlg (2011-10-16 22:54:52)

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 1
[Bot] ClaudeBot

Подвал форума

Под управлением FluxBB 1.5.11
Модифицировал Visman

[ Сгенерировано за 0.023 сек, 7 запросов выполнено - Использовано памяти: 637.34 Кбайт (Пик: 690.34 Кбайт) ]