在PHP中的Switch语句中使用cookie作为变量

时间:2015-06-16 10:30:46

标签: php codeigniter cookies wampserver

这段代码假设比较$_COOKIE变量的值并相应地向前移动,但我得到错误

  

未定义的索引=类型

这是代码 -

if ($result != false) {
$session_data = array(
'username' => $result[0]->username, //THIS WAS PREVIOUSLY user_name
'password' => $result[0]->password,
'type' => $result[0]->type,
);
// Add user data in session
$this->session->set_userdata('logged_in', $session_data);


if (in_array($_COOKIE['type'], array("Admin", "User", "Library")))
switch ($_COOKIE['type']) {
case "Admin":
$this->load->view('admin_page');
break;

case "User":
$this->load->view('viewtry');
break;

case "Library":
    echo "yes";
    break;
default:
    echo "no";
}

**** **** UPDATE

我解决了我的问题,我所做的只是将$_COOKIE['type']的两个实例替换为我先前声明的变量$type。有点愚蠢的我忽略了这一点。

感谢您的解决方案。

2 个答案:

答案 0 :(得分:2)

$COOKIE没有type密钥。因此,在获得type的值之前,您应该检查type是否已定义。您可以使用名为isset的函数来检查密钥。

if ($result != false) {
$session_data = array(
'username' => $result[0]->username, //THIS WAS PREVIOUSLY user_name
'password' => $result[0]->password,
'type' => $result[0]->type,
);
// Add user data in session
$this->session->set_userdata('logged_in', $session_data);


if (isset($_COOKIE['type']) && in_array($_COOKIE['type'], array("Admin", "User", "Library")))
switch ($_COOKIE['type']) {
case "Admin":
$this->load->view('admin_page');
break;

case "User":
$this->load->view('viewtry');
break;

case "Library":
    echo "yes";
    break;
default:
    echo "no";
}

答案 1 :(得分:0)

您应该避免在switch块中使用if逻辑。请考虑以下内容:

$user_type = 
    (in_array($_COOKIE['type'], array("Admin", "User", "Library"))) 
    ? $_COOKIE['type'] 
    : NULL;

switch ($user_type) {
    case "Admin":
        $this->load->view('admin_page');
    break;

    case "User":
        $this->load->view('viewtry');
    break;

    case "Library":
        echo "yes";
    break;

    default:
        echo "no";
}

这样,如果$user_type未传递到请求中,NULL设置为$_COOKIE['type'],那么它将作为default中的switch进行处理}}