删除 $_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"]) &amp;&amp; count($_SESSION["cart_array"]["minicart"]) &lt;= 1) @Orangepill 我仍然在第 73 行得到undefined index:minicart if (count($_SESSION["cart_array"]["minicart"]) &lt;= 1) 应该是if (isset($_SESSION["cart_array"]["minicart"]) &amp;&amp; count($_SESSION["cart_array"]["minicart"]) &lt;= 1) 那是你必须先问isset()的地方。否则,您将使用 count 函数访问不存在的索引。 您最好使用empty-函数。如果在空数组/字符串上使用count,它将返回undefined index 错误。 【参考方案1】:

尝试改变

if (isset($_POST['index_to_remove']) &amp;&amp; $_POST['index_to_remove'] != "")

if (isset($_POST['index_to_remove']) &amp;&amp; ($_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 时未定义的索引的主要内容,如果未能解决你的问题,请参考以下文章

使用内连接 SQL 语句时未定义的索引

数组中存在键时未定义的索引错误

在数据库上插入记录时未定义的索引

删除“text/javascript”属性时未定义 Jquery

使用删除与隐藏时未调用自定义动画

变量存在时未定义的变量 laravel