更新购物车中的多个产品


Update multiple products in shopping cart

我使用以下代码更新购物车,但此代码正在更新单个产品的购物车。如何更新多个产品的购物车?

更新.php (此页面是在文本框中输入,即数量)

<?php
session_start();
?>
<html>
<body>
    <form action="update1.php" method="post">
        Quantity:
        <input type="text" name="qty" value="">
        <br><br>
        <input type="submit" name="submit" value="Submit">
    </form>
</body>
</html>

update1.php(此代码用于更新购物车的数量)

// foreach ( $value as $key=> $final_val ){
foreach($value as $product)
{
    if($_REQUEST['pro_id'] == $product['pro_id'])
    {     
        $found = true;
        break;
    }
}
if($found)
{
    $_SESSION['cart'][$_REQUEST['pro_id']]['qty'] ;
    $_SESSION[$x]=$product['qty'];
    $_SESSION["$qty"] = $_SESSION[$x]+$qty1;
    echo "qty:".$_SESSION["$qty"]; 
}
else
{
    // go get new product and add to $_SESSION['cart']
    echo"not done";
}
//}
echo "<h4 align='center'>  click here to <a href='shoppingcart.php'>see list</a> </h4>";
?>

我仍然不能 100% 确定你的意思,所以我会给你一个形式的多个的简单演示。您的购物车可能有也可能没有类或函数,所以我做了一个非常简单的用于演示目的。您需要将输入排列在表单上。

/

类/购物车.php

<?php
class   ShoppingCart
    {
        public  function initialize()
            {
                if(!isset($_SESSION['cart']))
                    $_SESSION['cart']   =   array();
            }
        public  function addToCart($id,$qty = 1)
            {
                if(empty($_SESSION['cart'][$id]))
                    $_SESSION['cart'][$id]  =   $qty;
                else
                    $_SESSION['cart'][$id]  +=  $qty;
            }
        public  function resetItem($id,$qty = 1)
            {
                $_SESSION['cart'][$id]  =   $qty;
            }
        public  function removeItem($id,$qty = false)
            {
                if(!$qty || !is_numeric($qty)) {
                    if(isset($_SESSION['cart'][$id]))
                        unset($_SESSION['cart'][$id]);
                }
                else {
                    if(empty($_SESSION['cart'][$id]))
                        return false;
                    $amt    =   ($_SESSION['cart'][$id] - $qty);
                    if($amt <= 0)
                        unset($_SESSION['cart'][$id]);
                    else
                        $_SESSION['cart'][$id]  =   $amt;
                }
            }
        public  function getItem($id)
            {
                return (!empty($_SESSION['cart'][$id]))? $_SESSION['cart'][$id] : 0;
            }
        public  function clearCart()
            {
                if(isset($_SESSION['cart']))
                    unset($_SESSION['cart']);
            }
    }

/更新.php

<?php
session_start();
// Using spl_autoload_register() would be better than manual include
require_once(__DIR__.'/classes/ShoppingCart.php');
// Start the cart
$cartEngine =   new ShoppingCart();
?>
<html>
<body>
    <form action="" method="post">
        <input type="hidden" name="action" value="update" />
        <ul>
            <li>
                <h4>Product 1</h4>
                QTY<input type="text" name="item[1][qty]" value="<?php echo $cartEngine->getItem('ITM1'); ?>" />
                <input type="hidden" name="item[1][prod_id]" value="ITM1" />
            </li>
            <li>
                <h4>Product 2</h4>
                QTY<input type="text" name="item[2][qty]" value="<?php echo $cartEngine->getItem('ITM2'); ?>" />
                <input type="hidden" name="item[2][prod_id]" value="ITM2" />
            </li>
            <li>
                <h4>Product 3</h4>
                QTY<input type="text" name="item[3][qty]" value="<?php echo $cartEngine->getItem('ITM3'); ?>" />
                <input type="hidden" name="item[3][prod_id]" value="ITM3" />
            </li>
        </ul>
        <input type="submit" name="submit" value="Submit">
    </form>
    <form action="" method="post">
        <input type="hidden" name="action" value="clear" />
        <input type="submit" value="CLEAR CART" />
    </form>
</body>
</html>

这在提交时为您提供了一个数组:

Array
(
    [action] => update_cart
    [item] => Array
        (
            [1] => Array
                (
                    [qty] => 1
                    [prod_id] => ITM1
                )
            [2] => Array
                (
                    [qty] => 2
                    [prod_id] => ITM2
                )
            [3] => Array
                (
                    [qty] => 1
                    [prod_id] => ITM3
                )
        )
    [submit] => Submit
)

我个人不会有一个全新的页面来处理,除非你正在做ajax。我会将此部分粘贴在页面顶部并重新加载同一页面,但这只是我。处理数组将是这样的:

// Using spl_autoload_register() would be better than manual include
require_once(__DIR__.'/classes/ShoppingCart.php');
// Start the cart
$cartEngine =   new ShoppingCart();
// See if action happens
if(!empty($_POST['action'])) {
    // Start the cart
    $cartEngine->initialize();
    // Do the cart stuff
    switch($_POST['action']) {
        case('update'):
            foreach($_POST['item'] as $item) {
                $cartEngine->resetItem($item['prod_id'],$item['qty']);
            }
            break;
        case('clear'):
            $cartEngine->clearCart();
            break;
    }
}

购物车很简单(如果你想通过存储更多的数据而不仅仅是数量和项目代码来使其更复杂),但这是为了演示,这将输出一个简单的数组,如下所示:

[cart] => Array
    (
        [ITM1] => 1
        [ITM2] => 2
        [ITM3] => 4
    )