PHP中的购物车无法正常工作

时间:2013-02-21 18:41:04

标签: php session cart shopping

我一直在努力购买购物车的PHP代码。

特别是,以一种方式添加项目的功能很容易让项目具有多个数量的订单。

这是我所拥有的,但它似乎不适用于添加第二项:

function addtocart($pid,$q)
    {
        if($pid<1 or $q<1) return;
        if (is_array($_SESSION['cart']))
            {
                $max=count($_SESSION['cart']);
                $_SESSION['cart'][$max]['itemId']=$pid;
                $_SESSION['cart']['itemId']['qty']= $_SESSION['cart']['itemId']['qty'] + $q;
                $max=count($_SESSION['cart']);
                echo "SECOND";
            }
            else
            {
                $_SESSION['cart']=array();
                $_SESSION['cart'][0]['itemId']=$pid;
                $_SESSION['cart'][0]['qty'] = $q;
                $max=count($_SESSION['cart']);
            }
    }

有什么建议吗?

由于

3 个答案:

答案 0 :(得分:1)

你过于复杂了。

function addtocart($pid,$q) {
    if($pid<1 or $q<1) return;

    // has the main 'cart' array been set up in session yet? If not, do it
    if (!array_key_exists('cart', $_SESSION) || !is_array($_SESSION['cart']))
        $_SESSION['cart']=array();

    // has this item been added to the cart yet? If not, do it (0 qty)
    if (!array_key_exists($pid, $_SESSION['cart'])) {
        $_SESSION['cart'][$pid] = array(
            'itemId'=>$pid,
            'qty'=>0
        );  
    }

    // add the requested quantity of items to the cart
    $_SESSION['cart'][$pid]['qty'] = $_SESSION['cart'][$pid]['qty'] + $q;
}

第一次使用此函数添加项目时,它将在会话数组中设置正确的条目。随后使用该函数添加相同项将增加qty密钥。如果说完了,你就会有这样的事情:

array(
    '54'=>array(
        'itemId'=>54,
        'qty'=>4
    ),
    '99'=>array(
        'itemId'=>99,
        'qty'=>2
    ),  
)

文档

答案 1 :(得分:0)

您的功能可以简化为类似的东西..

function addtocart($pid,$q)
    {
        if($pid<1 or $q<1) return;

        //if the cart is not defined, define it
        if (!is_array($_SESSION['cart'])) $_SESSION['cart']=array();

        //See if an arry item for the part number exists, or add it
        if (!$_SESSION['cart'][$pid]) 
            $_SESSION['cart'][$pid]=$q;
        else
            $_SESSION['cart'][$pid]+=$q;
    }

然后稍后阅读......

foreach($_SESSION['cart'] as $item=>$qty){
    echo $item.': '.$qty;
}

此方法很好,因为如果您将相同的项目添加两次,则数量将一起添加

答案 2 :(得分:0)

也许这会对你有所帮助。第二个索引应为$max,而不是'itemId'

function addtocart($pid,$q)
    {
        if($pid<1 or $q<1) return;
        if (is_array($_SESSION['cart']))
            {
                $max=count($_SESSION['cart']);
                $_SESSION['cart'][$max]['itemId']=$pid;
                $_SESSION['cart'][$max]['qty']= $_SESSION['cart'][$max]['qty'] + $q;
                $max=count($_SESSION['cart']);
                echo "SECOND";
            }
            else
            {
                $_SESSION['cart']=array();
                $_SESSION['cart'][0]['itemId']=$pid;
                $_SESSION['cart'][0]['qty'] = $q;
                $max=count($_SESSION['cart']);
            }
    }