Я начинающий прогер и работаю джуном всего неделю.У меня стоит задача сделать "Избранное" на сайте.С помощью сессий я сделал сохранение флага в сессии PHP: if (empty($_SESSION['favorite'][(int)$_POST['id']])) { $_SESSION['favorite'][(int)$_POST['id']] = 1; } else { unset($_SESSION['favorite'][(int)$_POST['id']]); } Сейчас стоит задача : Товар добавлен в избранное если он добавлен через сессию, либо есть строчка в этой табличке. т.е. нужно при записи писать и в сессию, и в БД. а при чтении работает условие или. Я реализовал это следующим образом,но работает некорректно, при неоднократном обновлении страницы ,строчки в таблице дублируются и если убрать флажок избранного на странице товара и перейти обратно в каталог товаров,то товар останется выделен Избранным и не будет удален из таблицы, удален будет только тогда когда я перезагружу страницу.Надеюсь доходчиво объяснил. Помогите пожалуйста у меня мало опыта,а проект очень большой. Подумываю может даже о найме и сотрудичестве с ментором. Код на странице каталога товаров(директиву не прикрепляю) PHP: <div class="favoriteContainer" vg-favorite data-id="<?= $good['id'] ?>" data-is-full="true" data-is-favorite="<?= $_SESSION['favorite'][$good['id']] ?>"></div> Код на странице товара: PHP: <div vg-favorite data-id="<?= $id ?>" data-is-full="true" data-is-favorite="<?= !empty($_SESSION['favorite'][$id]) ?>"></div> <div> PHP код : PHP: $favorite = $_SESSION['favorite'][$id]; $userId = $_SESSION['currentUser']; $favoriteCatalog = $_SESSION['favorite'][$good['id']]; $goodId = $good['id']; if (empty($_SESSION['favorite'][(int)$_POST['id']])) { $_SESSION['favorite'][(int)$_POST['id']] = 1; if (empty($favorite)) { mysqli_query(DB::db(), "DELETE FROM users_goods WHERE GOOD_ID = '$id'"); } else { mysqli_query(DB::db(), "INSERT INTO users_goods (GOOD_ID,USER_ID) VALUE ('$id','$userId')"); } if (empty($favoriteCatalog)) { mysqli_query(DB::db(), "DELETE FROM users_goods WHERE GOOD_ID = '$goodId'"); } else { mysqli_query(DB::db(), "INSERT INTO users_goods (GOOD_ID,USER_ID) VALUE ('$goodId','$userId')"); } } else { unset($_SESSION['favorite'][(int)$_POST['id']]); }
Лучше спросить у коллег, они с удовольствием помогут Надо делать отладку, чтобы выяснить в чём причина
Выглядит грязно. Сессия не нужна. И, сдаётся мне, не надо в одном обработчике и удалять, и добавлять. Сделай два "экшена": для добавления и для удаления из избранного. Передавай туда нужные параметры НЕ через сессию, а через $_GET или $_POST.
У меня есть только 1 коллега и он же мой босс, который поставил данную задачу и отказал в помощи , сказав : "Думай.Нужно сделать" --- Добавлено --- Я бы с радостью,но мне сказано сделать именно таким образом, а по скольку я неопытен, знаний не так много и это моя первая работа программистом, то выбора у меня нету,как только делать,то что мне говорят....
Реализовано следующим образом $id = (int)$_POST['id']; $user = User::user(); if (empty($_SESSION['favorite'][$id])) { $_SESSION['favorite'][$id] = 1; if( !empty( $user ) ){ mysqli_query(DB::db(), "INSERT INTO users_goods (GOOD_ID,USER_ID) VALUE ('$id','$user[id]')"); } } else { unset($_SESSION['favorite'][$id]); if( !empty( $user ) ){ mysqli_query(DB::db(), "DELETE FROM users_goods WHERE GOOD_ID = '$id' AND USER_ID = " . $user['id']); } }