Изменить количество данных в SQL через PHP

Привет, у меня есть таблица в sql, называемая премиум, теперь, когда «пользователь» с премией (в таблице есть 1 номер, это премиум, а 0 — нет), то в коде перед вами у меня есть авангард, который каждый час при нажатии должен получить что-то взамен в этом случае это таблица с именем userMana Теперь я хочу премиальное имя Получит больше (то есть заплаченные деньги), тогда это правильно?

Первую часть я попробовал, а после этого использовал нижнюю часть

if (isset($_GET['daily'])) {
    if ($user->checkHours($user->hourEvent)) {
        $time = date("Y-m-d H:i:s", time());
        $mysqli->prepare("UPDATE `users` SET `hourEvent` = ?, `userMana` = `userMana` + 10, `userCitizens` = `userCitizens` + 1 WHERE userId = ?")->execute([$time, $user->userId]);
        header("Location: /אזור-משחק/בסיס");
    } else if ($user->premium > 0) {
       if ($user->checkHours($user->hourEvent)) {
            $time = date("Y-m-d H:i:s", time());
            $mysqli->prepare("UPDATE `users` SET `hourEvent` = ?, `userMana` = `userMana` + 101, `userCitizens` = `userCitizens` + 1 WHERE userId = ?")->execute([$time, $user->userId]);
            header("Location: /אזור-משחק/בסיס");
        }
    }
}

################################ Separator ###########################

if (isset($_GET['daily'])) {
    if ($user->checkHours($user->hourEvent)) {
        $time = date("Y-m-d H:i:s", time());
        $mysqli->prepare("UPDATE `users` SET `hourEvent` = ?, `userMana` = `userMana` + 10, `userCitizens` = `userCitizens` + 1 WHERE userId = ?")->execute([$time, $user->userId]);
        header("Location: /אזור-משחק/בסיס");
    }
    if ($user->premium > 0 && $user->checkHours($user->hourEvent)) {
        $time = date("Y-m-d H:i:s", time());
        $mysqli->prepare("UPDATE `users` SET `hourEvent` = ?, `userMana` = `userMana` + 11, `userCitizens` = `userCitizens` + 1 WHERE userId = ?")->execute([$time, $user->userId]);
        header("Location: /אזור-משחק/בסיס");
    }
}

Вы используете MySQLi или PDO? Передача массива значений параметров в execute() работает только в PDO, а не в MySQLi.

Barmar 10.04.2019 18:09
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Первый не будет работать должным образом.

Условие else if будет проверено только тогда, когда $user->checkHours($user->hourEvent) вернет false. Но вложенный блок if выполняется только тогда, когда это же выражение возвращает true. Если результат этого не изменится между этими двумя тестами, второй никогда не будет успешным. Таким образом, премиум-пользователи никогда не получат бонус.

Вторая версия будет давать бонусы два премиум-пользователям. Сначала они получат тот же бонус 10, что и все остальные, а затем получат дополнительный бонус 11, потому что они являются премиум-пользователями. Думаю, будет понятнее написать так:

$normal_bonus = 10;
$premium_bonus = 21;
if (isset($_GET['daily']) && $user->checkHours($user->hourEvent)) {
    $bonus = $user->premium ? $premium_bonus : $normal_bonus;
    $mysqli->prepare("UPDATE `users` SET `hourEvent` = ?, `userMana` = `userMana` + ?, `userCitizens` = `userCitizens` + 1 WHERE userId = ?")->execute([$time, $bonus, $user->userId]);
    header("Location: /אזור-משחק/בסיס");
}

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

Привет, если я хочу сделать это с другим параметром, это почти то же самое, верно? вместо : $normal_bonus Делаю $normal_bonus1 Потом ставит вопросительный знак (?) К тому же изменению в SQL Потом пишет: $bonus1 вместо $bonus Верно? Или это больше, чем это.

Kfir Ben SHimon 10.04.2019 19:23

Это точно. Вы можете использовать любое количество переменных и параметров.

Barmar 10.04.2019 19:23

Другие вопросы по теме