在 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
.
这段代码本应比较 $_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
.