Добрый день! Подскажите, пожалуйста, а то я совсем запуталась Мне надо реализовать вот какую штуку: Когда пользователь вводит код в форму, ему на счет зачисляется n-сумма и этот код срабатывает только 1 раз. Так вот в админке я создала форму, которая в базе в таблицу sert добавляет значения sert_id 2 sert_name jsyehfe22 sert_summa 200 Теперь мне надо чтобы пользователь при вводе jsyehfe22 получал на счет, а именно в таблицу user в колонку user_balance к его уже существующему балансу +200 и еще сделать так чтобы после активации этот код больше ни у кого не срабатывал. Подскажите, пожалуйста, что дописать сюда: HTML: <div class="col-md-4 col-md-offset-4"> <label>Сертификат</label> <input type="text" class="form-control" name="sum"><br/> <input type="submit" class="btn btn-success" value="Активировать"/> </div> (это форма ввода в личном кабинете в файле tpl) И какой php код надо прописать, чтобы это всё заработало?
И в чем проблема? Передавайте форму в обработчик и там играйтесь с данными как Вам надо. Кода обработчика я не вижу. Вижу только форму с 1 полем и кнопкой
надо залезть в бд, забрать строку с этим кодом, проверить флаг или дату, когда она уже использовалась. Если не использовалась - использовать, иначе - дать сообщение об ошибке и ничего не делать.
Только не у него, а у нее=)) В общем, я разобралась, что писать в разработчик, вот это у меня: PHP: if (isset($_POST['sert'])) { $sert = mysql_real_escape_string($_POST['sert']); $q = mysql_query("SELECT * FROM sert WHERE sert_name = '$sert' AND sert_task = '".$task['task_id']."'"); if (mysql_num_rows($q)) { mysql_query("UPDATE users SET user_balance = user_balance + 800 WHERE user_id = '" . $userdata['user_id'] . "'"); } else { $tpl->assign("error", "Ваш сертификат не найден"); } mysql_query("INSERT INTO `sert` SET sert_user = '".$userdata['user_id']."', sert_datestamp = '".time()."' "); } Только пока они нефига не одноразовые получились, можно сколько угодно раз вводить один и тот же код. Предполагаю косяк в этой части: mysql_query("INSERT INTO `sert` SET sert_user = '".$userdata['user_id']."', sert_datestamp = '".time()."' Потому что у меня вместо того, чтобы напротив введенного сертификата появлялось значения юзера и врменеи они создаются ниже. --- Добавлено --- Я пока не настолько профи, к сожалению, я не знаю что писать, что бы реализовать вот эту одноразовость=(
PHP: //добавь в таблицу sert поле status $key = $_POST['sum']; $id = //id юзера if (!empty($key)): //если переменная с кодом не пустая $query = "SELECT * FROM `sert` WHERE `sert_name` = '$key'"; //запрос к таблице sert $result = mysqli_query($link, $query); //отправляем запрос $num_rows = mysqli_num_rows($result); //получаем количество строк в ответе if ($num_rows > 0): //если строк больше 0, значит такой код есть в базе $row = mysqli_fetch_array($result, MYSQLI_ASSOC); //формируем ассоциативный массив, ключами которого, будут названия полей if ($row['status'] == 'active'): //если поле status содержит флаг active, можем начислить юзеру сумму $sum_update = $row['sert_summa']; //сумма пополнения $query_update = "UPDATE `user` SET `user_balance` = (`user_balance` + '$sum_update') WHERE `id` = '$id'"; //запрос на обновление баланса $query_sert_update = "UPDATE `sert` SET `status` = 'notactive' WHERE `sert_name` = '$key'"; //запрос на обновление статуса кода mysqli_query($link, $query_update);//отправляем запрос mysqli_query($link, $query_sert_update);//отправляем запрос echo 'Ваш счет пополнен на '.$sum_update.' рублей!'; //выводим сообщение об удачном зачислении средств else: //если поле status не содержит флаг active, значит код уже был активирован echo 'Этот код уже активирован!'; endif; else: //если строк 0, значит такого кода в базе нет echo 'Вы введи недействительный код!'; endif; else: //если переменная с кодом пустая echo 'Вы не ввели код!'; endif;
Ну простите я не знал у него или у нее! Значит надо прикрутить проверку на: "А вводился ли уже этот код"? Я бы наверное хранил коды в отдельной базе с булевым значением. А при вводе проводил бы проверку. Вобщем без проверки никак!