我正在使用以下代码更新购物车,但此代码正在更新单个产品的购物车。如何更新多种产品的购物车?
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>";
?>
答案 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
)