Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 只需要从我的购物车中删除一个产品,而不是所有具有相同ID的产品_Php_Foreach_Shopping Cart - Fatal编程技术网

Php 只需要从我的购物车中删除一个产品,而不是所有具有相同ID的产品

Php 只需要从我的购物车中删除一个产品,而不是所有具有相同ID的产品,php,foreach,shopping-cart,Php,Foreach,Shopping Cart,我不明白为什么这段代码不仅会删除带有通过URL传递的给定密钥的pizza_id。我回显$\u GET['key']值,以检查是否有所需的数字,并且它工作正常。 键值来自另一个foreach$key=>$value循环,该循环构建购物车,并具有一个包含比萨饼id和$key的删除链接 switch ($action) { case 'add': if ($cart) { $cart .= ','.$_GET['pizza_id']; }

我不明白为什么这段代码不仅会删除带有通过URL传递的给定密钥的pizza_id。我回显
$\u GET['key']
值,以检查是否有所需的数字,并且它工作正常。 键值来自另一个
foreach$key=>$value
循环,该循环构建购物车,并具有一个包含比萨饼id和$key的删除链接

switch ($action) {
    case 'add':
        if ($cart) {
            $cart .= ','.$_GET['pizza_id'];
        } else {
            $cart = $_GET['pizza_id'];
        }
        break;
    case 'delete':
        echo "KEY: ".$_GET['key']."<br>";
        if ($cart) {
            $items = explode(',',$cart);
            $newcart = '';
            foreach ($items as $key => $item) 
            {
                if ($_GET['pizza_id'] != $item && $GET['key']!= $key ) 
                {
                    if ($newcart != '') 
                    {
                        $newcart .= ','.$item;
                    } 
                    else 
                    {
                        $newcart = $item;
                    }
                }
            }
            $cart = $newcart;
        }
        break;
}
开关($action){
案例“添加”:
如果($cart){
$cart.=','.$获取['pizza\u id'];
}否则{
$cart=$\u GET['pizza\u id'];
}
打破
案例“删除”:
回显“键:”.$\u获取['KEY']。“
”; 如果($cart){ $items=分解(“,”,$cart); $newcart=''; foreach($key=>$item的项目) { 如果($\u GET['pizza\u id']!=$item&&$GET['key']!=$key) { 如果($newcart!='') { $newcart.=','.$item; } 其他的 { $newcart=$item; } } } $cart=$newcart; } 打破 }

编辑:也许我还应该提到代码的基础来自此网页

检查这是否有效

foreach ($items as $key => $item) 
                            {
                if ($_GET['pizza_id'] != $item && $GET['key']!= $item ) 

我不明白你的问题。。。但是你在if条件中有一个输入错误

$GET[

缺少下划线…

至少,foreach中不需要$key

if ($cart) {
    // you car is now an array of $items.
    $items = explode(',',$cart);
    $key = $_GET[ 'key' ];
    // are you sure pizza_id is correct too? You may want to echo/log it
    // if there is an $item which corresponds to $key, remove it.
    if( isset( $items[ $key ] ) )
          unset( $items[ $key ] );

    // this loop searches for all indexes of $_GET[ 'pizza_id' ] and removes them
    // comment this out if you don't want to do that. For some reason 
    // I missed it the first go round.
    while( ($pos = $array_search( $items, $_GET[ 'pizza_id' ] ) !== FALSE )
    {
        array_splice( $items, $pos, 1 );
    }
    // implode afterwards
    $cart = implode( ',', $items );
}

另一张海报指出,您的原始代码也有
$GET['key']
。坏消息10000。在开发过程中,是否将警告和错误输出设置为最高级别?

删除?这里没有“删除”代码我添加了代码以使其更完整。当你点击另一个页面上显示“delete”的链接时,有一个GET变量的值为“delete”,它会被传递到url中。我不明白你为什么要对pizza_id和关键参数进行双重检查。无论如何,第二个是$GET['key'],而不是$GET['key']。嗨,是的,pizza\u id也是正确的,因为所需结果的一部分是删除该pizza\u id的JU。事实上,我的代码确实适用于该pizza\u id。问题是,如果我的购物车有多个具有相同id的pizza,它会删除具有相同id的所有pizza,上面的代码如何考虑正在单击的“删除”链接并将您发送到包含此代码的页面?至于打字错误:我使用NetBeans7.0,因为我发现它对我的编码错误要求非常严格。我真的不明白为什么Netbeans会容忍这种情况。这段代码取代了
案例“delete”:
break
之间的内容。至于Netbeans——Netbeans对PHP非常好(有些人可能会说是最好的),但在调试时,您应该仍然将服务器设置为最大错误输出级别。非常感谢您的输入。现在我得到一些小错误,因为我需要适应代码的其余部分,很可能很快会进一步检查它。也谢谢关于服务器的新闻