用户在同一会话中返回时的未定义索引

时间:2016-02-11 11:57:25

标签: php switch-statement isset

我有一个简单的会话登录系统。当用户成功登录时,用户将被重定向到页面。

问题是,当用户离开我的站点并稍后返回到index.php(同一会话)时,用户将获得“未定义索引”,因为当用户进入我的站点并且仍然登录时没有提供参数。

我使用php开关来控制我的页面。

我首先在index.php中使用此代码:

require_once('function.php');
session_start();

if (!is_user()) {
redirect('signin.php');
} 
?>

带开关的文件如下所示:

<?php




$p=$_REQUEST['p'];          
if (isset($p)) { 
    switch ($p) {

   case "vine":
                include "vine.php";

            break;


}

?>

3 个答案:

答案 0 :(得分:1)

显然 $ _ REQUEST [&#39; p&#39;] 未定义。

如果您希望脚本在用户返回时仍然知道 p 参数,则必须以某种方式将其保存以用于进一步的请求。这可以在 index.php

中完成
<?php
    session_start();
    $p = isset($_REQUEST['p']) ? 
        $_REQUEST['p'] : (
            isset($_SESSION['p']) ? 
                $_SESSION['p'] : 
                false
        )
    );
    if ($p !== false) {
        $_SESSION['p'] = $p;
        switch ($p) {
            case "vine": include "vine.php";
            break;
        }
    } else {
        die ('Unknown category ....');
    }
?>

代码会查找明确指定的参数 p 并获取此参数(如果可用)。否则,它会查找会话参数 p

否则它将 p 设置为false表示没有值可用。

如果给出 p 的值,则设置会话变量 $ _ SESSION [&#39; p&#39;] 。当然,必须在脚本顶部调用 sesssion_start()才能使会话变量可用。

答案 1 :(得分:0)

我认为'无效索引'来自$p=$_REQUEST['p'];。您想检查该数组元素是否存在。

if (isset($_REQUEST['p'])) {

答案 2 :(得分:0)

这个怎么样:

if (isset($_REQUEST['p']))
{
    $p = $_REQUEST['p'];          
    // ...
}

但请注意:http://php.net/manual/en/function.array-key-exists.php#example-5520