在php中删除购物车项目时,会话数组不会被取消

时间:2014-10-01 05:18:27

标签: php ajax xml

我编写此代码用于在单击删除购物车项目按钮时取消设置会话数组:

$i=0;
    foreach ($_SESSION["items"] as $cart_itm) //loop through session array var
    {           
    //echo count($_SESSION['items']);
        if($cart_itm["id"] == $item_Id){ //item id is equal
            if(count($_SESSION['items']) == 1)
            {
            //echo "count1";
                unset($_SESSION['items']);
                $empty = 'Y';
            }
            else
            {

            echo $i."--";
            echo $cart_itm["id"];
            echo "------";
                unset($_SESSION['items'][$i]);
                $empty = 'N';

            }
        }
        $i++;
     }

但是,当第一次单击删除购物车项目时,它会取消购物车表格中的第一行。但是,如果单击第二行删除购物车项目,则不会取消设置该数组,并且不会从购物车中删除该项目。 此外,如果我单击第3行的删除购物车项目,则删除第二行而不是第3行。

请让我知道为什么会这样。

3 个答案:

答案 0 :(得分:0)

如何使用foreach来取消设置$ _SESSION [“items”],

如果你这样做会有什么问题:

 if(isset($_SESSION["items"]) && count($_SESSION["items"])>0)
 unset($_SESSION["items"]);

由于

答案 1 :(得分:0)

尝试这种方法

for($i=0; $i < count($_SESSION["items"]); $i++)
{           
    if($_SESSION["items"][$i] == $item_Id){
        unset($_SESSION['items'][$i]);
        break;
    }
}

如果我错过了什么,请告诉我。

答案 2 :(得分:0)

此问题可能是由于您的循环传递了错误的密钥以取消设置所需的会话值。 您可以简单地使用KEY =&gt;而不是使用$ i ++方法。 VALUE PAIR。

示例:

foreach ($_SESSION["items"] as $sessionKey=>$cart_itm) //loop through session array var
{           
    //echo count($_SESSION['items']);
    if($cart_itm["id"] == $item_Id){ //item id is equal
        if(count($_SESSION['items']) == 1)
        {
            //echo "count1";
            unset($_SESSION['items']);
            $empty = 'Y';
        }
        else
        {

            echo $sessionKey."--";
            echo $cart_itm["id"];
            echo "------";
            unset($_SESSION['items'][$sessionKey]);
            $empty = 'N';

        }
    }        
 }

尝试这种方法,可能会有帮助。