Php 只需要从我的购物车中删除一个产品,而不是所有具有相同ID的产品
我不明白为什么这段代码不仅会删除带有通过URL传递的给定密钥的pizza_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']; }
$\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非常好(有些人可能会说是最好的),但在调试时,您应该仍然将服务器设置为最大错误输出级别。非常感谢您的输入。现在我得到一些小错误,因为我需要适应代码的其余部分,很可能很快会进一步检查它。也谢谢关于服务器的新闻