【问题标题】:Using a cookie as a variable in a Switch statement in PHP在 PHP 的 Switch 语句中使用 cookie 作为变量
【发布时间】:2015-06-26 06:34:53
【问题描述】:

这个 sn-p 代码假设比较 $_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";
}

****更新****

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

感谢您的解决方案。

【问题讨论】:

  • $_COOKIE['type'] 上没有设置值 ...
  • 什么是$result 值以及您如何获得这些值??
  • 如果您不使用Cookie Helper 访问cookie 或$this->input->cookie() The Manual page
  • 伙计们!我解决了我的问题,我所做的只是用我之前声明的变量 $type 替换了 $_COOKIE['type'] 的两个实例。我有点愚蠢地忽略了这一点,在这个大声笑上浪费了 4 个小时左右。
  • 你不能通过写“已解决”来结束你的问题。您应该接受其中一个答案或发布您自己的答案然后接受它。这就是在 Stack Overflow 上将问题标记为已完成的方式。如果你做对了,你会得到积分。

标签: php codeigniter cookies wampserver


【解决方案1】:

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

【讨论】:

  • 请不要只转储代码作为答案。尝试解释您的想法,以便我们了解您的所作所为。谢谢。
  • 好的,我修正了我的答案。谢谢。
【解决方案2】:

您应该避免将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,因此它将在您的switch 中作为default 处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多