微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将信息存储在愿望清单和带有Cookie的购物车中$ _COOKIE

如何解决将信息存储在愿望清单和带有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>";
        }
    }
}
?>

PHP语言解决此问题的最佳替代方法是什么?我试图在

中寻找其他选择

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 举报,一经查实,本站将立刻删除。