更新购物车

时间:2016-04-20 05:46:47

标签: php

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

update.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>";
?>

1 个答案:

答案 0 :(得分:0)

我仍然不能100%确定你的意思,所以我会给你一个简单的多种形式演示。您可能有也可能没有购物车的类别或功能,因此我为演示目的制作了一个非常简单的类别。您需要在表单上排列输入。

<强> /classes/ShoppingCart.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']);
            }
    }

<强> /update.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
    )