Как пользователь делает двойной запрос?

249
22 ноября 2017, 00:50

Ребят, приветствую. На сайте есть функция вывода средств. Потом обнаружил, что один пользователь каким-то образом пополнял 1 раз, а выводил эти же средства по 2 раза.(именно по 2, ни больше ни меньше). Вот у меня и возник вопрос, как он смог это сделать, если у меня идет сначала списание с баланса, а потом сам вывод(в случае ошибки вывода возвращаю на баланс). У меня есть мысль, но не уверен в её правильности. Если я например вставлю функцию sleep с рандомным числом от 0 до 1, поможет ли это устранить эту проблему? Или это решается как-то по другому?

if ( $_POST['amount'] <= $balance ) {
    $payeer = new CPayeer($accountNumber, $apiId, $apiKey);
    if ($payeer->isAuth()) {
        $bal_ret = $balance;
        $balance_res = $balance - $_POST['amount'];
        mysqli_query($CONNECT, "UPDATE `users`  SET `balance` = $balance_res WHERE `id` = '$us_id'");
        $wallet_send = $_POST['payeer'];
        $arTransfer = $payeer->transfer(array('curIn' => $m_curr,'sum' => $_POST['amount'],'curOut' => $m_curr,'to' => $wallet_send,'comment' => 'Вывод средств',));
        if (empty($arTransfer['errors'])) {
            MessageSend(2, 'Средства успешно выведены', '/cashout');
        } else {
            mysqli_query($CONNECT, "UPDATE `users`  SET `balance` = $bal_ret WHERE `id` = '$us_id'");
            MessageSend(1, 'Средства не удалось вывести. Пожалуйста, попробуйте позже.', '/cashout');
        }

    } else {
        MessageSend(1, 'Что-то пошло не так.', '/cashout');
    }
} else {
    MessageSend(1, 'Недостаточно средств', '/cashout');
}
READ ALSO
Вывод сообщений php

Вывод сообщений php

Есть задачаСтраница (страница подтверждения удаления файла) содержит сообщение «Вы действительно хотите удалить этот файл?» и форма с двумя...

579
Правильный JSON

Правильный JSON

Есть файл с данными из которого нужно выбрать определенные данные, сформировать JSON и отправить по запросу на клиентПока это выглядит так

301