// Валидация 1: Проверка реального достижения условий if ($currentProgress < $requiredVal) { header('Location: /arch.php'); exit(); }
// Валидация 2: Проверка на повторное получение if ($isAlreadyReceived === 1) { $_SESSION['msg'] = '<div class="text center"><font color="tomato">Вы уже получили награду за это достижение</font></div>'; header('Location: /arch.php'); exit(); }
// АТОМАРНАЯ СУБД-ТРАНЗАКЦИЯ: Выдача наград и фиксация статуса в один неделимый клик // Условие WHERE arch_X = 0 намертво блокирует уязвимости Race Condition и дюп валюты $stmtReward = DB::$link->prepare(" UPDATE `users` SET `gold` = `gold` + :gold, `crystals` = `crystals` + :silver, `arch_{$targetArchId}` = 1 WHERE `id` = :id AND `arch_{$targetArchId}` = 0 AND `{$checkField}` >= :req_val ");