cashloveyou
@cashloveyou
Хороший чел

Как выводить ошибку если баланс меньше суммы?

Добрый вечер прошу помочь разобраться с функцией , при нажатии на Добавить в ВР (пост) уходит в админ панель на модерацию при этом у пользователя снимается -10 очков с баланса , как сделать чтобы если у пользователя баланс = 0 или баланс меньше чем сумма функция не срабатывала а выводилось сообщение
сейчас все работает баланс снимается но если у пользователя баланс < суммы то пост все равно отправляется на модерацию тоесть срабатывает succes

Функция

function add_deport($val) {
    $expected = array(
        'link' => '',
        'type' => '',
        'reason' => ''
    );

    /**
     * @var $link
     * @var $type
     * @var $reason
     */
    extract(array_merge($expected, $val));
    $time = time();
        $db = db();
         $user_id = get_userid();
    $link = sanitizeText($link);
    $type = sanitizeText($type);
    $reason = sanitizeText($reason);
$credit=get_creditgift_balance($user_id); // отображает баланс пользователя
       $amount=10; // сума транзакции
       $balance=$credit[0]['credit_balance'];
            $new_balance=$balance-$amount;  
            $query=$db->query("UPDATE users SET credit_balance='$new_balance' WHERE id='$user_id'");
    if(!has_deported($link, $user_id)){
        db()->query("INSERT INTO deports (user_id, type, link, message, time) VALUES('".$user_id."', '".$type."', '".$link."', '".$reason."', '".$time."')");
        fire_hook('deport.added', null, array($val));
        return true;
    }  elseif($amount < $balance OR $amount != $balance){
        return false;
    }
}


JS

$(document).on('submit', '#deportModal form', function() {
        $(this).css('opacity', '0.6');
        var sM = $("#deportModal").data('success');
        var eM = $("#deportModal").data('error');
        $(this).ajaxSubmit({
            url : baseUrl + 'deport',
            success : function () {
                $("#deportModal").modal('hide');
                notifySuccess(sM);
                $(this).css('opacity', 1);
            },
            error : function () {
                $("#deportModal").modal('hide');
                notifyError(eM);
            }
        })
        return false;
    });
})
  • Вопрос задан
  • 180 просмотров
Решения вопроса 1
В php коде, после того, как узнали баланс, сравните его с суммой транзакции, и если баланса не хватает – выбросите эксепшн.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@rorc
Перед тем как сделать
UPDATE users SET credit_balance='$new_balance' WHERE id='$user_id'"

Вначале проверить текущий баланс
SELECT credit_balance FROM users WHERE id='$user_id'"

если он менее 10, то переадресовать на страницу пополнения баланса.
Ответ написан
@springimport
Надеюсь что вы придете на светлую сторону чистого кода.

А решение без исключений будет выглядеть как-то так.

function add_deport($val) {
    $expected = array(
        'link' => '',
        'type' => '',
        'reason' => ''
    );

    extract(array_merge($expected, $val));
    $time = time();
    $db = db();
    $user_id = get_userid();
    $link = sanitizeText($link);
    $type = sanitizeText($type);
    $reason = sanitizeText($reason);
    $credit = get_creditgift_balance($user_id); // отображает баланс пользователя
    $balance = $credit[0]['credit_balance'];
    $amount = 10; // сума транзакции

    if ($amount < $balance) {
        $new_balance = $balance - $amount;
        $db->query("UPDATE users SET credit_balance='$new_balance' WHERE id='$user_id'");
        $db->query("INSERT INTO deports (user_id, type, link, message, time) VALUES('" . $user_id . "', '" . $type . "', '" . $link . "', '" . $reason . "', '" . $time . "')");
        fire_hook('deport.added', null, array($val));

        if (has_deported($link, $user_id)) {
            return true;
        }
    }
    
    return false;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы