又一个通知:未定义的索引问题

时间:2011-03-28 00:03:44

标签: php switch-statement

我一直在

  

注意:未定义的索引:操作

当我使用以下代码时。我用它来查看哪个页面是必需的。无论如何要解决这个问题?我知道你不应该只包含来自用户输入的文件(不先检查输入),但是这个switch语句只有在action设置为view或blah时才有效,否则只显示主页面。

?action = view或?action = blah

switch ($_GET['action']) 
{
    case 'view':
         echo "We are in view";
        require FORUM_ROOT . 'view2.php';
    break;

    case 'blah':
      echo "We are in blah";
    break;

    default:
        "This is default";
        require FORUM_ROOT . 'main.php';
}

4 个答案:

答案 0 :(得分:6)

以这种方式重写代码:

$action = isset($_GET['action']) ? $_GET['action'] : null;

switch ($action) { ... }

答案 1 :(得分:0)

错误意味着您在$ _GET ['action']不存在时尝试使用它。例如,当你转到页面而没有传递page.html?action = xxx

答案 2 :(得分:0)

您正在使用数组元素而不检查它是否存在。您应确保在未定义代码时,您的代码不会尝试阅读$_GET['action']

如果没有给出switch,您可以通过给$_GET['action']一个已定义(但“为空”)值来不需要更改action逻辑的方式执行此操作在查询字符串中:

if (!isset($_GET['action']))
    $_GET['action'] = null;

switch ($_GET['action']) {
   ...
}

答案 3 :(得分:-1)

有一个特定的语法构造@用于在可证明冗余时忽略通知。

switch (@$_GET['action']) {

isset三元用作微优化解决方案,但在您的情况下没有任何实际好处。