Как сохранить значение кнопки после обновления страницы?
Здравствуйте!
На странице оформления заказа пользователь может ввести код купона.
Запросом проверяется наличие и статус купона в БД - если есть, то под формой пишутся скидка и сообщение "Купон активирован".
Вопрос: как после обновления страницы сохранить эти данные, мол купон такой-то активирован. У меня код купона, его скидка и статус пишутся в массив $_SESSION.
Можно ли как-то при обновлении страницы проверять, если значение $_SESSION['discount-status'] = "set", то выводить под формой сообщение "Купон активирован" и его скидку, а текст кнопки менять на "Деактивировать".
Соответственно после ее нажатия я уже буду менять статус и удалять значения из сессии - это уже смогу.
Просто не пойму можно ли или как лучше такое реализовать?
dollar, по факту как раз должна быть метка в бд что есть купон и он активирован. И на товар такой-то оформлена эта скидка. А в кукисах (и даже в сессии) такое хранить не стоит, это значимая информация, она не должна теряться при (условно) закрытии браузера.
ThunderCat, Так я не предлагал отказаться от БД. Локальное хранилище позволяет:
1) Пропустить лишний ajax к базе данных.
2) Убрать скидку для ещё не залогиненного (или только что разлогиненного) пользователя.
dollar, в бд хранятся промокоды, как от них отказаться. промокод создается плагином на сайте и его данные хранятся в бд. к бд идет обращение только 1 раз - когда проверяется есть ли такой промокод или нет
....
//Проверяем локальный кэш на сайте, и обращаемся к БД в случае его остуствия
if (!localStorage.promo_code) {
Check_BD_Promise = new Promise( ......... );
else if (localStorage.promo_status == "in database") {
document.getElementById("promo_button").disabled = false;
}
.....
//Запоминаем ответ БД
Check_BD_Promise.then((code, status)=> //после обращения к БД
localStorage.promo_code = code; //"XYZ";
localStorage.promo_status = status; //"in database"; //для примера
);
.....
//При нажатии на кнопку тоже что-то делаем в соответствии с бизнес-логикой
document.getElementById("promo_button").addEventListener("click", ()=>{
......... //отправка запроса на изменение бд
if (localStorage.promo_code) {
localStorage.promo_status = "already not in database";
}
});
Грязный код. Могут быть ошибки и опечатки. Но, надеюсь, суть вы сможете уловить и переделать под себя.
Вопрос: как после обновления страницы сохранить эти данные, мол купон такой-то активирован. У меня код купона, его скидка и статус пишутся в массив $_SESSION.
В бд. Если вы делаете что-то с данными пользователя, это надо писать в бд, иначе при заходе с другого устройства вы получите лажу. В сесси хранить можно только временную информацию, не относящуюся к критичным данным и не требующую запоминания (как например статус "залогинен", его нам хранить вечно не надо, можно и в сессии хранить).
так у нас нет личного кабинета. просто клиент поставил задачу - мол он ввел промокод, активировал его, потом вернулся на страницу Каталога и добавил еще пару товаров. Вернулся в корзину и там опять надо вводить промокод. Хочет чтобы до момента оформления заказа или деактивации промокода, он сохранялся как-то