使用isset()但仍然获得未定义的索引

时间:2012-11-29 03:14:33

标签: php

在我的下面的代码中,我试图检索moduleid,使用它来运行查询,以便能够找到属于该模块id的模块编号和模块名称,然后包含moduleid,module的会话变量编号和模块名称。

我遇到的问题是,即使我使用(isset(),我也会获得$_SESSION['idmodule']和'$ _SESSION ['namemodule'] . Now $ _ SESSION ['的未定义索引module']`工作正常,该会话变量没有问题,但是其他2个会话变量我遇到了问题。

现在查询是正确的,所以查询没有问题,只是我猜测我如何调用$ _SESSION变量的问题。

以下是代码:

if (isset($_POST['module']))
{
    $query = "SELECT ModuleNo, ModuleName FROM Module WHERE ModuleId = ?";

    $stmt = $mysqli->prepare($query);

    $stmt->bind_param('s', $_POST['module'] );

    $stmt->execute();

    $stmt->bind_result($moduleno, $modulename); 

     while ( $stmt->fetch() ) { 
           // session data
          if (isset($moduleno)){
          $_SESSION['idmodule'] = $moduleno;
      }
      if (isset($modulename)){
          $_SESSION['namemodule'] =  $modulename;
            }
    }

    $_SESSION['module'] = $_POST['module'];

}

1 个答案:

答案 0 :(得分:1)

if (isset($moduleno)){
    $_SESSION['idmodule'] = $moduleno;
}
if (isset($modulename)){
    $_SESSION['namemodule'] =  $modulename;
}

这两种陈述都可能会导致$_SESSION['idmodule']$_SESSION['namemodule']无法设置,所以当您稍后引用它们时,您可能会收到警告。

为防止这种情况发生,稍后在代码中您可能需要这样做:

if (isset($_SESSION['idmodule'], $_SESSION['namemodule']) {
    // your code here

更好的方法是清理一些事情:

while ( $stmt->fetch() ) {
    // inside here $moduleno and $modulename are already set
    $_SESSION['idmodule'] = $moduleno;
    $_SESSION['namemodule'] = $modulename;
}

如果找不到该模块,最好跳过剩下的代码,只显示错误信息。