【问题标题】:php oop switch case does not workphp oop 开关盒不起作用
【发布时间】:2014-11-18 09:46:12
【问题描述】:

我的 switch case 将每个用户重定向到第一个 case,出了什么问题? 我希望“总统”将重定向到 admin.php

<?php require "header.php"; ?>
<?php
if ( ! isset($_SESSION['email']) ) {
$msg = urlencode('U dient ingelogd te zijn om op deze pagina te kunnen komen.');
header('location: login.php?msg=' . $msg);
die();
}

$role = $_SESSION['jobTitle'];
switch($role) {
case 'Finance' AND 'VP Finance':
    header('location: finance.php');
    break;
case 'VP Sales' AND 'Sales Manager (NA)' AND 'Sales Rep':
    header('location: sales.php');
    break;
case 'President':
    header('location: admin.php');
    break;
default:
    session_destroy();
    header('location: login.php');
}
?>
</div>
</body>
</html>

这是我的数据库 http://i57.tinypic.com/2em21aw.png

【问题讨论】:

  • 尝试在 CASE 'Finance' 之后删除 AND 条件
  • case 'Finance''VP Finance': header('location: finance.php');休息;你是这个意思吗?不起作用
  • 只写案例“财务”
  • 你是从哪里得知AND switch case 的用法的?他们在某处被定义为&amp;&amp; 吗?

标签: php oop switch-statement case


【解决方案1】:

AND 语句不能在 switch 案例中使用...尝试以下方法来实现相同的效果:

switch($role) {
    case 'Finance':
    case 'VP Finance':
        header('location: finance.php');
        break;
    case 'VP Sales':
    case 'Sales Manager (NA)':
    case 'Sales Rep':
        header('location: sales.php');
        break;
    case 'President':
        header('location: admin.php');
        break;
    default:
        session_destroy();
        header('location: login.php');
}

【讨论】:

    【解决方案2】:
    1. 我认为您的意思是 OR 而不是 AND。
    2. 您正在尝试将 AND 的结果与 $role 变量进行比较。 AND 的结果始终为真。

    你可以重写

    switch($role) {
        case 'Finance':
        case 'VP Finance':
            header('location: finance.php');
            break;
        case 'VP Sales':
        case 'Sales Manager (NA)':
        case 'Sales Rep':
            header('location: sales.php');
            break;
        case 'President':
            header('location: admin.php');
            break;
        default:
            session_destroy();
            header('location: login.php');
        }
    

    或者你可以用case里面的表达式写一些更复杂的东西。

    switch(true) {
    case ($role == 'Finance' OR $role == 'VP Finance'):
        header('location: finance.php');
        break;
    case ($role =='VP Sales' OR $role =='Sales Manager (NA)' OR $role =='Sales Rep'):
        header('location: sales.php');
        break;
    case $role == 'President':
        header('location: admin.php');
        break;
    default:
        session_destroy();
        header('location: login.php');
    }
    

    【讨论】:

    • 他的意思不是 OR...而且您的答案提供了 AND 解决方案...您的陈述与您的代码不匹配...
    • @RichardBernards,你确定吗?
    • 是的...有人输入AND通常意味着AND...更新的答案确实是使用OR的一个例子。
    • @RichardBernards ,抱歉,变量不能同时等于两个值。它可能等于第一个值或!到第二个值。
    • @RichardBernards 如果您查看问题中代码的意图,您会发现他想为财务和财务副总裁角色运行第一个案例。这意味着需要针对财务或财务副总裁测试角色。正如 sectus 指出的那样,在左侧和右侧都存在相同变量的情况下进行布尔 AND 测试没有任何意义,它永远不会匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多