isset() 的未定义索引错误?

undefined index error with isset() in place?

提问人:DMSJax 提问时间:3/29/2014 最后编辑:VickelDMSJax 更新时间:1/15/2019 访问量:3305

问:

我是否在这里遗漏了一些我没有看到的东西,这些内容会为此代码抛出未定义的索引错误?在测试未传递的函数 .php 的代码添加时,它会在下面抛出未定义的索引错误,但是针对完全相同的 POST 变量“sub”的相同测试在第 494 行上方执行约 12 次而不会抛出错误。我错过了什么?$_POST['sub']isset()

来自PHP的错误

注意:未定义的索引:sub in /home/path/public_html/dtest/includes/functions.php 第 494 行

代码 494

if (isset($_POST['sub']) && $_POST['sub'] == "ritem") {
    $id = $_POST['ritemid'];
    unset($_SESSION['cart']['items'][$id]);
    header("Location: ".$_SERVER['HTTP_REFERER']."");
    die();
} else {
    echo $_POST['sub'];
}
php isset 未定义索引

评论

0赞 Chitowns24 3/29/2014
您必须先使用 isset,然后检查它是否为“ritem”
0赞 Mike B 3/29/2014
@Chitowns24 但是他的错误说未定义的索引 - 我认为这不是全部代码
0赞 Chitowns24 3/29/2014
是的,我只是重新看了一遍,我同意
0赞 DMSJax 3/29/2014
@MikeB 这就是它的所有代码,但下面的答案是正确的 - 现在我从上到下查看它,该语句的 ELSE 部分应该在一段时间前被删除。看起来它被留在了那里。
0赞 Mike B 3/29/2014
这就是为什么有线长限制和标准不允许单线控制结构的原因。干净的代码如下所示 codepad.org/BTGPtnbE

答:

1赞 Shankar Narayana Damodaran 3/29/2014 #1

从负责此操作的部分中删除 并替换为语句。echo $_POST['sub'];elseUndefined index noticeecho

应该是这样的..

<?php

if (isset($_POST['sub']) && $_POST['sub']=="ritem") {
    $id=$_POST['ritemid'];
    unset ($_SESSION['cart']['items'][$id]);
    header("Location: ".$_SERVER['HTTP_REFERER']."");die();}
else
{
 echo "The subject is not set";    
}

那是因为..当失败时,这意味着未设置,因此当涉及到部分时,您正在尝试输出实际上未设置的输出(这是此问题的实际根源if$_POST['sub']else$_POST['sub'])

评论

1赞 DMSJax 3/29/2014
谢谢 - 回顾后,ELSE 语句应该在早期修订版中删除,有人忽略了它并留在其中。删除它解决了这个问题 - 对不起,这是一件微不足道的事情,我想我和其他开发人员一样对忽视它感到内疚
0赞 Rahul Prasad 3/29/2014 #2

这是因为其他情况

if (isset($_POST['sub']) && $_POST['sub']=="ritem") {
  $id=$_POST['ritemid'];
  unset ($_SESSION['cart']['items'][$id]);
  header("Location: ".$_SERVER['HTTP_REFERER']."");
  die();
} else if(isset($_POST['sub'])) {
  echo $_POST['sub'];
} else {
  // Do something else here
}