删除 $_SESSION 时未定义的索引
Posted
技术标签:
【中文标题】删除 $_SESSION 时未定义的索引【英文标题】:Undefined index in deleting $_SESSION 【发布时间】:2013-07-13 18:00:10 【问题描述】:我有这段代码可以从购物车中删除任何想法...我需要删除两个$_SESSION
。
1) $_SESSION["cart_array"]
2 $_SESSION["minicart"]
如果没有我添加$_SESSION["minicart"]
,它确实会删除$_SESSION["cart_array"]
,但是当我添加它时,我得到了minicart
部分,我得到了undefined index: minicart
。所以我
试过
if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) && !isset($_SESSION["minicart"]) || count($_SESSION[ “迷你车”])
上面的代码检查 // 如果购物车会话变量未设置或购物车数组为空*
到原始 if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"])
所以 我的问题
查看尝试过我在 如果这仍然不清楚,请发表评论,我会尽力再次解释。<?php
// if user wants to remove an item from cart
if (isset($_POST['index_to_remove']) && $_POST['index_to_remove'] != "")
// Access the array and run code to remove that array index
$key_to_remove = $_POST['index_to_remove'];
if (count($_SESSION["cart_array"]["minicart"]) <= 1)
unset($_SESSION["cart_array"]["minicart"]);
else
unset($_SESSION["cart_array"]["minicart"] ["$key_to_remove"]);
sort($_SESSION["cart_array"]["minicart"]);
?>
if
语句中做错了什么以及我在statement
中做错了什么以删除($_SESSION["cart_array"]) AND ($_SESSION["minicart"])
【问题讨论】:
只需在尝试取消设置之前测试密钥是否存在。if (isset($_SESSION["cart_array"]["minicart"]) && count($_SESSION["cart_array"]["minicart"]) <= 1)
@Orangepill 我仍然在第 73 行得到undefined index:minicart
if (count($_SESSION["cart_array"]["minicart"]) <= 1)
是
应该是if (isset($_SESSION["cart_array"]["minicart"]) && count($_SESSION["cart_array"]["minicart"]) <= 1)
那是你必须先问isset()
的地方。否则,您将使用 count 函数访问不存在的索引。
您最好使用empty
-函数。如果在空数组/字符串上使用count
,它将返回undefined index
错误。
【参考方案1】:
尝试改变
if (isset($_POST['index_to_remove']) && $_POST['index_to_remove'] != "")
到
if (isset($_POST['index_to_remove']) && ($_POST['index_to_remove']))
或!empty
而不是isset
【讨论】:
我这样做了,但它不再删除该项目 试试!empty
而不是isset
当删除按钮被按下时,我不需要使用isset
似乎正在从form
发布一些东西
首先为什么要为$_POST['index_to_remove']
添加isset 两次?您是否正确发布了表单参数?
blo
是的,我是...我所做的 php 代码是 // Access the array and run code to remove that array index
【参考方案2】:
if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"])
&& !isset($_SESSION["minicart"]) || count($_SESSION["minicart"]) < 1)
这里有一个布尔逻辑问题。这不会阻止 $_SESSION['minicart'] 或 $_SESSION['cart_array'] 在未设置的情况下被访问。未设置时的访问是给您错误的原因。检查你的否定(!),以及你是否真的想要||在那里。
我不明白在取消设置这些 $_SESSION 值之前您需要检查什么,我没有足够的信息和上下文。因此,我不能给你代码复制粘贴到你的。我所能做的就是告诉你为什么你会得到未定义的索引错误。如果未设置 $_SESSION['cart_array'] 和 $_SESSION['minicart'] ,则应该阻止访问它们的 if 语句没有按照您的意图进行。追踪它并检查你的逻辑。如果你不能让它工作,那就把它分解成多个嵌套的 if 语句来简化它。
如果您想要复制和粘贴代码,则需要进一步说明您在做什么。用 count() 部分检查什么,在什么情况下要取消设置变量,以及要取消设置哪些变量。
【讨论】:
你缺少大约 3 个)
这完全阻止了一个项目被添加到我的购物车
好的,你关注的是我答案的错误部分,所以我改变了它。检查你的 if 语句,它们并没有按照你的意图去做。
我以自己的方式修复了它,但不知道这样做是否正确...我从该页面中删除了所有['minicart']
,因此只剩下会话变量['cart_array']
,然后我计算我做的总价$cartTotal = $minicart = money_format("%n", (double)$cartTotal);
和我把minicart
放在一个会话中`$_SESSION['smallcart']=$minicart;`以上是关于删除 $_SESSION 时未定义的索引的主要内容,如果未能解决你的问题,请参考以下文章