如何解决将信息存储在愿望清单和带有Cookie的购物车中$ _COOKIE
很长一段时间没有开发,恢复后不久,我发现自己遇到了一个大问题,该问题在我现在正在用PHP开发的项目中发现,其中包括使用$_COOKIE
进行保存通过请求$_GET
或$_POST
从页面上的愿望清单和购物车中获取信息。我发现请求$_GET
是将信息保存并重定向到计划表中特定位置的最简单方法,例如会话变量甚至数据库。
我正面临以下挑战,当客户添加商品时,物品(书籍)的信息会存储在购物车中,并且仍要完成,用同样的方式保存所需的产品,以便以后购买甚至定购。这是一个要解决的复杂问题,或者我正在使所有编程逻辑都很难找到自己解决此问题的解决方案。
要更详细地说明问题的规格,我必须制作一个购物车,以便客户在首页上有选择,例如将书添加到购物清单中,声明所需的物品数量要进行购买,并通过请购单$_GET
,使用$_SESSION
将商品添加到购物车。最初,此解决方案有效,但后来遇到了最大的挑战,即将会议变成了cookie。最初,我正在编写用于购物车cookie的某些功能,现在仍在使用这些功能,现在,由于愿望清单在将客户的图书愿望存储在其中时遇到了困难,主要是与尝试从愿望清单中删除2项或更多项有关。下面的源代码很好地反映了我正在经历的问题:
conn.PHP
<?PHP
if (!isset($_COOKIE['cart'])) {
setcookie('cart',json_encode([]),time() + 604800);
}
if (!isset($_COOKIE['desire'])) {
setcookie('desire',time() + 604800);
}
if (!isset($_COOKIE['total_value_buy'])) {
setcookie('total_value_buy',time() + 604800);
}
// CART FUNCTIONS
function addbook($id_book,$qtd) {
$book = listbook($id_book);
if ($qtd <= $book["number_copies"] && $qtd > 0) {
$validation = false;
foreach (json_decode($_COOKIE['cart']) as $key => $book) {
if ($book->id_book == $id_book) {
$validation = true;
editbook($id_book,($book->qtd_book + $qtd));
}
}
if ($validation == false) {
$book = ["id_book" => $id_book,"qtd_book" => $qtd,"vl_book" => $book["vl_book"]];
$cart = json_decode($_COOKIE['cart']);
array_push($cart,$book);
setcookie('cart',json_encode($cart),time() + 604800);
}
return ("book added to cart");
} else {
return ("book not added! it is only allowed to purchase items below their available quantity in stock.");
}
}
function editbook($id_book,$qtd) {
foreach (json_decode($_COOKIE['cart']) as $key => $book) {
if ($book->id_book == $id_book) {
$book = listbook($id_book);
if ($qtd <= $book["number_copies"] && $qtd > 0) {
$cart = json_decode($_COOKIE['cart']);
$cart[$key]->qtd_book = $qtd;
$cart[$key]->vl_book = ($book["vl_book"]);
setcookie('cart',time() + 604800);
} else {
}
}
}
}
function deletebook($index) {
$cart = json_decode($_COOKIE['cart']);
foreach ($cart as $key => $book) {
if ($key == $index) {
unset($cart[$key]);
setcookie('cart',time() + 604800);
}
}
}
// WISHLIST FUNCTIONS (apparently they are cart-like functions,but it's not working properly).
function adddesire($id_book) {
$validation = false;
foreach (json_decode($_COOKIE['desire'],true) as $book) {
if ($book['id_book'] == $id_book) {
$validation = true;
editdesire($id_book);
return ("successfully updated");
}
}
if ($validation == false) {
$book = ["id_book" => $id_book];
$desire = json_decode($_COOKIE['desire'],true);
array_push($desire,$book);
setcookie('desire',json_encode($desire),time() + 604800);
return ("book added to wish list");
}
}
function editdesire($id_book) {
foreach (json_decode($_COOKIE['desire'],true) as $book) {
if ($book['id_book'] == $id_book) {
$desire = json_decode($_COOKIE['desire']);
setcookie('desire',time() + 604800);
}
}
}
function deletedesire($index) {
$desire = json_decode($_COOKIE['desire']);
foreach ($desire as $key => $book) {
if ($key == $index) {
unset($desire[$key]);
setcookie('desire',time() + 604800);
}
}
}
?>
cart.PHP
<?PHP include 'conn.PHP'; ?>
<?PHP
// CART UPDATE
if (isset($_POST['update'])) {
// The COUNTER $e within the variables $_POST is constructed by means of a repeat loop (foreach) on the loading of the page
for ($e = 0; $e < (int) $_POST['qtd_items']; $e++) {
if (isset($_POST['id_book' . $e]) && $_POST['qtd_book' . $e] > 0) {
editItem($_POST['id_book' . $e],$_POST['qtd_book' . $e]);
} else {
deleteItem($e);
}
}
setcookie('cart',json_encode(array_values(json_decode($_COOKIE['cart']))),time() + 604800);
}
// APPLICATION OF THE COUPON ON PURCHASE
if (isset($_POST['apply_coupon']) || isset($_COOKIE['user_coupon'])) {
for ($e = 0; $e < (int) isset($_POST['qtd_items']) ? $_POST['qtd_items'] : 0; $e++) {
if (isset($_POST['id_book' . $e]) && $_POST['qtd_book' . $e] > 0) {
editItem($_POST['id_book' . $e],$_POST['qtd_book' . $e]);
} else {
deleteItem($e);
}
}
if (isset($_POST['apply_coupon'])) {
$coupon = listcoupon2($_POST['cd_coupon'])->fetch_all(MysqLI_ASSOC);
setcookie('user_coupon',$_POST['cd_coupon'],time() + 604800);
} else if (isset($_COOKIE['user_coupon'])) {
$coupon = listcoupon2($_COOKIE['user_coupon'])->fetch_all(MysqLI_ASSOC);
setcookie('user_coupon',isset($coupon[0]['cd_coupon']) ? $coupon[0]['cd_coupon'] : 0,time() + 604800);
} else {
setcookie('user_coupon',(isset($coupon['cd_coupon'])) ? $coupon['cd_coupon'] : $_COOKIE['user_coupon'],time() + 604800);
}
}
// CART UPDATE AND PURCHASE COMPLETION
if (isset($_POST['buy'])) {
for ($e = 0; $e < (int) $_POST['qtd_items']; $e++) {
if (isset($_POST['id_book' . $e]) && $_POST['qtd_book' . $e] > 0) {
editItem($_POST['id_book' . $e],time() + 604800);
setcookie('total_value_buy',$_POST["total_value_buy"],time() + 604800);
}
?>
desire.PHP
<?PHP include 'conn.PHP'; ?>
<?PHP
// WISH LIST UPDATE
if (isset($_POST['update'])) {
for ($e = 0; $e <= (int) $_POST['qtd_items']; $e++) {
if (!isset($_POST['id_book' . $e])) {
$desires = json_decode($_COOKIE['desire'],true);
// ERASING ITEMS FROM THE LIST
foreach ($desires as $key => $item) {
if ($key == $e) {
unset($desires[$key]);
setcookie('desire',json_encode($desires),time() + 604800);
}
}
echo "erased<hr>";
}
}
}
?>
中寻找其他选择
how-to-unset-a-json-object,
cannot-use-object-of-type-stdclass-as-array,
how-to-convert-an-array-into-an-object-using-stdclass,
how-to-use-array-push-for-json-encode,
arrays-in-cookies-php >
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。