PHP система промокодов и проверка в бд
Имеется форма для ввода промокода:
<div class="block-head">Активация бонус-кодов</div>
<div class="block-body">
<div class="info_warning">
На данной странице Вы можете активировать, имеющийся у Вас, промо-код. Промо-коды можно найти на серверах,
получить в различных мероприятиях, получить как подарок на какой-либо праздник и т.д. Подробнее о получении и активации
Вы можете узнать в разделе <a href="/faq.html"><b>FAQ по проекту</b></a>.
</div><br>
Если у Вас есть бонус-код, то для получения различных бонусов введите его на этой странице.
Благодаря бонус-кодам Вы можете получить:
<br>
<ul style="list-style: none;">
<li>- Различного рода предметы в игре;</li>
<li>- Денежный бонус на счет;</li>
<li>- Поноценный статус на сервере.</li>
</ul>
<div class="promo_cont_title">Активация промо-кода</div>
<div class="promo_code_line">
Активация Вашего промо-кода<br/>
<span class="promo_code_desc">Введите промо-код в поле</span>
<div class="promo_block_button">
<form method="post" action="">
<input type="text" name="key" value="" placeholder="AAAA-BBBB-CCCC-DDDD" class="promo_tf" maxlength="19" required>
<a class="promo_code_info hint cursor" data-original-title="Промо-код обязательно должен состоять из 16 символов, в котором между каждыми 4-мя должен стоять дефис (тире)."><span class="icon-info"></span></a>
<input type="submit" value="Активировать" class="promo_button">
</form>
</div>
<div style="clear: right;"></div>
</div>
</div>
</div>
В бд есть таблица promocodes в которой есть строка с промокодом code, и строка price в которой должно содержится число, которое является суммой, зачисленной на баланс. Строка с балансом находится в таблице dle_users, в строке money.
Нужно чтобы при нажатии "Активировать" промокод проверялся в строке code(в таблице promocodes), и если он правильный, то изменял строку money(в таблице dle_users) на число, которое было в строке price.
Ответы (1 шт):
Автор решения: Pavel
→ Ссылка
if(isset($_POST['key'] && !empty($_POST['key'])){//так же критически важно провести проверку получаемых данных на содержание sql инъекций
$userID = $_POST['user'];//пример получения id юзера которому идет зачисление
//if(!ctype_digit($userID)) die('Некорректный id');
$localhoctlogin= 'root';
$password = '';
$database = 'database_name';
$code = htmlspecialchars($_POST['key']);
$connection = $mysqli = new mysqli ("127.0.0.1", $localhoctlogin, $password, $database);
if($connection){
$mysqli->query ("SET NAMES 'utf8'");
$getCode = $mysqli->query ("SELECT `price` FROM `promocodes` WHERE `code`='$code' LIMIT 1");
$result = $getCode ->num_rows;
if($result == '0') die('Неверный промокод');
else{
$promo = mysqli_fetch_assoc($getCode);
$money = $promo['money'];
$updMoney= $mysqli->query ("UPDATE `dle_users` SET `money` = `money`+'$money' WHERE `userID` = '$userID' LIMIT 1;");
if($updMoney) echo 'Вам начислено '.$money.' сомони';
else die('Неожиданная ошибка начисления бонусов');
}
}
else die('Ошибка подключения к базе данных');
}