Php 使用会话创建购物车对象
如何创建购物车对象而不每次覆盖会话/对象?我下面的代码无法正常工作,因为当我每次单击submit按钮添加项目时,它会从头开始并覆盖篮子 请参见此处的实时版本: 我的代码是:Php 使用会话创建购物车对象,php,session,shopping-cart,Php,Session,Shopping Cart,如何创建购物车对象而不每次覆盖会话/对象?我下面的代码无法正常工作,因为当我每次单击submit按钮添加项目时,它会从头开始并覆盖篮子 请参见此处的实时版本: 我的代码是: session_start(); include('oopCart.php'); $basket = new shoppingCart($_SESSION['cart']); if (isset($_POST['submit'])){ $id = $_POST['id']; $qty =
session_start();
include('oopCart.php');
$basket = new shoppingCart($_SESSION['cart']);
if (isset($_POST['submit'])){
$id = $_POST['id'];
$qty = $_POST['qty'];
$basket->addItem($id, $qty);
}
?>
<form method="POST" action="products.php">
<input type="hidden" value="dog" name="id">
<input type="hidden" value="10" name="qty">
<input type="submit" value="buy 10 dogs" name="submit">
</form>
<?php
echo '<BR>items in basket: '. $basket->countItems();
echo '<BR>Total number of dogs (201): '. $basket->numberOfProduct('dog');
echo '<BR>is dog in basket? '. $basket->isInCart('dog');
?>
}可能您的会话设置配置错误。如果php.ini文件中的会话路径不正确,则如果将错误报告设置为0,则可能没有实际保存会话
检查php.ini会话部分。问题似乎出在您的
shoppingCart
类中。你能把密码贴出来吗?或者如果它很长,那么只需在构造函数依赖的类中发布构造函数函数和任何其他方法。顺便说一句,PHP中类的标准约定是它们以大写字母开头,例如,class ShoppingCart
而不是class ShoppingCart
。除非你有充分的理由不这样做,否则最好遵循这个惯例。
class ShoppingCart{
protected $id;
protected $qty;
protected $cart = array();
// constructor accepts the session variable to create cart object
function __construct($cart=""){
$this->cart = $cart;
}
function addItem($id, $qty=1){
if (($this->isInCart($id)) == false ){
$this->cart[$id] = array( 'id' => $id, 'qty' => $qty);
} else{
$this->cart[$id]['qty'] += $qty;
}
}
function isInCart($id){
$inCart=false;
if ($this->cart[$id]){
return $inCart=true;
break;
}
return $inCart;
}
public function isEmpty(){
return (empty($this->cart));
}
function countUniqueItems(){
if ($this->isEmpty()==false){
foreach($this->cart as $item){
if($item['id']){
$uniqueItems++;
}
}
}
return $uniqueItems;
}