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

Using a cookie as a variable in a Switch statement in PHP

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

Undefined index = type

这是代码-

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";
}

****更新****

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

感谢您的解决方案。

$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";
}

您应该避免将 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";
}

这样,如果 $_COOKIE['type'] 未传递到请求中,$user_type 将设置为 NULL,因此它将作为 default 在您的 switch.