Php加入购物车问题

时间:2011-05-09 16:01:08

标签: php oop shopping-cart

我正在尝试创建一个将商品添加到购物车的PHP功能。我想要它做的是检查数组是否已经在那里,如果它是增加数量,如果没有在购物车中创建项目。

它正在做的是它添加一个项目,它将在第一次工作(如果项目已经存在它只是增加数量)但是如果你添加另一个项目它继续创建该项目的新实例在购物车中 e.g

第1项 - 数量4 第2项 - 数量1 第2项 - 数量1 第2项 - 数量1 ......依此类推......

下面是我到目前为止的代码?

function add_item ($id, $qty)
    {
        $count=$this->countItems;
        echo  "uytfdgghjkl;kj<br>";
        $added = false;
        if($count>0)
        {
            $i=0;
            while($added == false)
            {
                echo "fghjkl<br>";
                $tid = $this->items[$i]->getId();
                echo "new ID: ".$tid."<br>";
                echo "old ID: ".$id."<br>";
                echo $i;
                if($tid == $id)
                {
                    $amount = $this->items[$i]->getQty();
                    $this->items[$i]->setQty($amount+1);
                    $added = true;
                    //$i++;
                    //break;
                }
                if($added == true)
                {
                    break;
                }
                else //if($added == false)
                {
                    $this->items[$this->countItems] = new OrderItem($id, $qty);
                    //$this->total = $total+ ($qty *$price);
                    $this->countItems++;
                    $added = true;
                    //break;
                }
                //else break;
                $i++;
            }

        }
        else
        {
            $this->items[$this->countItems] = new OrderItem($id, $qty);
            //$this->total = $total+ ($qty *$price);
            $this->countItems++;
        }
    }

3 个答案:

答案 0 :(得分:0)

问题在于您不是先搜索整个数组以查看该项是否存在。下面的代码应该可以使用,但我可能会输入错字或其他内容,所以请务必仔细检查它。

function add_item ($id, $qty)
    {
        $count=$this->countItems;
        echo  "uytfdgghjkl;kj<br>";
        $added = false;
        if($count>0)
        {
            for($i=0; $i < $count; $i++)
            {
                echo "fghjkl<br>";
                $tid = $this->items[$i]->getId();
                echo "new ID: ".$tid."<br>";
                echo "old ID: ".$id."<br>";
                echo $i;
                if($tid == $id)
                {
                    $amount = $this->items[$i]->getQty();
                    $this->items[$i]->setQty($amount+1);
                    $added = true;
                    break;
                }
            }

        }
        if(!$added)
        {
            $this->items[$this->countItems] = new OrderItem($id, $qty);
            //$this->total = $total+ ($qty *$price);
            $this->countItems++;
        }
    }

更好的选择是使用字典

$arr = array();
$arr['item_id'] = new OrderItem(...);

然后你可以使用:

检查项目是否在数组中
if(isset($arr[$id])){
    ...
}

答案 1 :(得分:0)

逻辑是有缺陷的。只有恰好是购物车中的第一个商品,代码才会增加商品的数量。否则,它将添加该项目。证据在这里:

if($added == true) // if this cart item's quantity was incremented
{
    break;
}
else // add item
{
    $this->items[$this->countItems] = new OrderItem($id, $qty);
    // etc...
}

相反,您应该从循环中删除new OrderItem($id, $qty)并在循环浏览所有购物车项目后检查$added的值。为此,您需要使用for通过$count(而不是一段时间)循环播放。

答案 2 :(得分:0)

类产品扩展了CI_Controller {

function  __construct(){
    parent::__construct();

    // Load cart library
    $this->load->library('cart');

    // Load product model
    $this->load->model('product');
}

function index(){
    $data = array();

    // Fetch products from the database
    $data['products'] = $this->product->getRows();

    // Load the product list view
    $this->load->view('products/index', $data);
}

function addToCart($proID){

    // Fetch specific product by ID
    $product = $this->product->getRows($proID);

    // Add product to the cart
    $data = array(
        'id'    => $product['id'],
        'qty'    => 1,
        'price'    => $product['price'],
        'name'    => $product['name'],
        'image' => $product['image']
    );
    $this->cart->insert($data);

    // Redirect to the cart page
    redirect('cart/');
}

}