[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подмена одного значения другим
LanikSky
Добрый день!
Подскажите, пожалуйста, а то я совсем запуталась sad.gif
Мне надо реализовать вот какую штуку:
Когда пользователь вводит код в форму, ему на счет зачисляется n-сумма и этот код срабатывает только 1 раз.
Так вот в админке я создала форму, которая в базе в таблицу sert добавляет значения
sert_id
2

sert_name
jsyehfe22

sert_summa
200

Теперь мне надо чтобы пользователь при вводе jsyehfe22 получал на счет, а именно в таблицу user в колонку user_balance к его уже существующему балансу +200 и еще сделать так чтобы после активации этот код больше ни у кого не срабатывал.

Подскажите, пожалуйста, что дописать сюда:
<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 код надо прописать, чтобы это всё заработало?
Valick
Для начала в таблицу я бы добавил еще два поля, это время активации и идентификатор пользователя который активировал этот "Сертификат", по этим признакам как раз и можно провести проверку был ли код уже активирован.
Сама задача решается одним запросом, ну или двумя, если необходимо подтверждение активации или вывод сообщения что код уже активирован ранее.
Но судя по тому как вы всё это описали вы достаточно далеки от программирования, следовательно лучший вариант это нанять программиста который бы за денюжку порешал ваши вопросы.

_____________
Стимулятор ~yoomoney - 41001303250491
LanikSky
Цитата (Valick @ 10.04.2017 - 15:42)
Для начала в таблицу я бы добавил еще два поля, это время активации и идентификатор пользователя который активировал этот "Сертификат", по этим признакам как раз и можно провести проверку был ли код уже активирован.
Сама задача решается одним запросом, ну или двумя, если необходимо подтверждение активации или вывод сообщения что код уже активирован ранее.
Но судя по тому как вы всё это описали вы достаточно далеки от программирования, следовательно лучший вариант это нанять программиста который бы за денюжку порешал ваши вопросы.

Спасибо добавила в таблицу колонки.
Больше года работаю с программистами, но пришла к выводу, что пора учиться самой и разбираться во всем самой, потому что когда что-то ломается, устала я слышать, ой у меня землетрясение, пожар, умер хомячок и тд, я буду свободен только через год и то может быть. Потом ищешь нового "спеца", который также до первого бага что-то пишет,просит и получает много денег, а потом след простыл. А проект в это время не работает, а пользователи негодуют.
Объясняю я пока коряво, но хочу понять как это можно реализовать или где на эту тему почитать, как это делается, потому что гугл так же мои корявые запросы не понимает biggrin.gif
Valick
Гугл и не поймёт, пока в не прочитаете хотя бы одну книгу по MySQL
конкретно в вашем случае UPDATE ... JOIN

_____________
Стимулятор ~yoomoney - 41001303250491
LanikSky
Цитата (Valick @ 10.04.2017 - 16:11)
Гугл и не поймёт, пока в не прочитаете хотя бы одну книгу по MySQL
конкретно в вашем случае UPDATE ... JOIN

Спасибо большое! Почитала, должно получиться что-то вроде этого?

if (isset($_POST['sert'])) {
$sert = mysql_real_escape_string($_POST['sert']);
$q = mysql_query("SELECT * FROM sert WHERE sert_name = '$sert'."'");
if (mysql_num_rows($q)) {
mysql_query("UPDATE users SET user_balance = user_balance + sert_summa WHERE user_id = '" . $userdata['user_id'] . "'");
} else {
$tpl->assign("error", "Ваш сертификат не найден");
}

mysql_query("INSERT INTO `sert` SET sert_user = '".$userdata['user_id']."',
sert_datestamp = '".time()."'
");
}
Valick
Почти так, но не совсем так, данный код опасен тем что между update и insert могут вклиниться другие процессы. Вечером если будет время напишу вам запрос smile.gif
и почитаете пока про mysql now()

_____________
Стимулятор ~yoomoney - 41001303250491
LanikSky
Цитата (Valick @ 10.04.2017 - 16:47)
Почти так, но не совсем так, данный код опасен тем что между update и insert могут вклиниться другие процессы. Вечером если будет время напишу вам запрос smile.gif
и почитаете пока про mysql now()

Спасибо большое!=)
LanikSky
В общем, мой запрос

if (isset($_POST['sert'])) {
$sert = mysql_real_escape_string($_POST['sert']);
$q = mysql_query("SELECT * FROM sert WHERE sert_name = '$sert'."'");
if (mysql_num_rows($q)) {
mysql_query("UPDATE users SET user_balance = user_balance + sert_summa 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()."'
");
}
Kusss
оборачивайте ваш php код в теги php . Выделяете текст - и жмете соответствующую кнопку в верхнем списке.

if (isset($_POST['sert'])) {
$sert = mysql_real_escape_string($_POST['sert']);
$sql = "
SELECT
user_id
FROM
`sert`
WHERE
sert_name = '
$sert'
"
;
$q = mysql_query($sql);
if (mysql_num_rows($q) == 1) {
$userdata = mysql_fetch_assoc($q);

// user_id - не уверен на счет этого в строке
// user_id = '" . $userdata['user_id'] . "' , поменял на id


$sql = "
UPDATE
`users`
SET
user_balance = user_balance + sert_summa
WHERE
id = '"
. $userdata['user_id'] . "'
"
;
mysql_query($sql);


} else {
$tpl->assign("error", "Ваш сертификат не найден");
die();
}
}


// Для чего этот запрос вообще ???
$sql = "
INSERT INTO
`sert`
SET
sert_user = '"
.$userdata['user_id']."',
sert_datestamp = '"
.time()."'
"
;
mysql_query($sql);
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.