Как в PHP запретить выполнение двух одновременных запросов

I
На сайте с 23.12.2010
Offline
25
#61
if($protect[$k] == $protect[$k-1])

что будет если селект вернет только одну запись?

у вас получается нельзя пользоваться вашим сервисом чаще чем раз в сутки на одинаковую сумму?

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

PS подумайте что произойдет если в базе появится запись в момент когда ваш код пройдет эту проверку, но до апдейтов.

goodier
На сайте с 10.03.2009
Offline
36
#62
iopiop:
PS подумайте что произойдет если в базе появится запись
в момент когда ваш код пройдет эту проверку, но до апдейтов.

В любом случае когда каждую следующую минуту крон будет обращаться к нашему новому файлу,
будет происходить проверка по колонке state=0 и в условии будет сравнивать текущий с
предыдущим значением из массива, просто я другого решения не нашел и стал использовать массив.
Происходит что то типа такого:
если("userlogin-1326839241-100" == "userlogin-1326839241-100"){
то заблокировать и состояние у запроса на выплату обработать как отменено
} иначе {
проверить баланс на отрицательную сумму и если сумма не отрицательная,
только потом выплатить реальные деньги.
}

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

Ragnarok
На сайте с 25.06.2010
Offline
239
#63

зачем такие извращения? ну правда, нафига?

что если, теоретически, в ту же секунду, как создадутся 2 запроса на вывод, деньги закажет ещё один человек и они занесутся в базу в виде

- первый дублирующийся запрос

- хороший запрос

- второй дубль

if($protect[$k] == $protect[$k-1]) уже не сработает так, как задумано

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

и не нужно больше выделять болдом всё сообщение

//TODO: перестать откладывать на потом
goodier
На сайте с 10.03.2009
Offline
36
#64
Ragnarok:
что если, теоретически, в ту же секунду, как создадутся 2 запроса на вывод, деньги закажет ещё один человек и они занесутся в базу в виде
- первый дублирующийся запрос
- хороший запрос
- второй дубль

if($protect[$k] == $protect[$k-1]) уже не сработает так, как задумано

Я тоже думал над этим, всякое может произойти и придумал, что если проверять в массиве совпадения вот так:

if(in_array($protect[$k] , $protect)) Уже сработает

Ragnarok:
сделай очередь заявок и обрабатывай по порядку, без таких вот извращений

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

I
На сайте с 23.12.2010
Offline
25
#65

я не понимаю как может срабатывать ваша проверка т.к. я не вижу где устанавливается нулевой элемент массива $protect

---------- Добавлено в 03:33 ---------- Предыдущее сообщение было в 03:17 ----------

goodier:

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

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

goodier
На сайте с 10.03.2009
Offline
36
#66

Проверяю в любом случае на наличие блокировки и минусового баланса плюс добавил условие в

файл где юзер создает запрос на выплату.

$pay_date = mysql_fetch_row(mysql_query("SELECT `date` FROM `payout` WHERE `login`='$username' ORDER BY `id` DESC LIMIT 1"));
if(in_array(time() , $pay_date)){
exit("Повторите запрос еще раз!");
}

и кто знает, может это условие все бы решило.

Ragnarok
На сайте с 25.06.2010
Offline
239
#67
goodier:

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

скрипт на кроне будет делать выплаты, допустим, по 1 проверке и выплате в минуту.

это сработает, если у вас создаётся меньше 60 заявок на выплаты в час

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий