如果、elseif 和 else 没有按预期工作

If, elseif and else not working like expected

我正在尝试检查 if 和 elseif 乘以 $_sessions 是否存在以及它们是否具有固定值。
我唯一的问题是所有会话都已到位并设置为预期值,但我的脚本没有进行第二次检查。

所以我的问题是我是否格式化了 if、elseif、else 不正确,还是我检查会话值的方式?我应该以其他方式做什么?

脚本可以在这里找到:http://pastebin.com/cpbCZJ0k
它有 145 行,所以我真的不会 post 在这里,因为它太长了,会占用整个页面。

如有任何帮助,我们将不胜感激。

第二个表达式如果 isset($_SESSION['gedaanx']) && $_SESSION['gedaanx'] == 2 && isset($_SESSION['pre']) && $_SESSION['pre'] == 1 也用在第三个中,所以只有两种可能性:脚本将执行第二个 if 或者它会跳到 else (因为该表达式返回 false,第三个 if 也会失败)。

你必须颠倒第二个和第三个 ifs。

首先,你的代码

if (isset($_SESSION['gedaanx']) && $_SESSION['gedaanx'] == 1 ){
...
elseif (isset($_SESSION['gedaanx']) && $_SESSION['gedaanx'] == 2 &&
       isset($_SESSION['pre']) && $_SESSION['pre'] == 1  ) {
...
elseif (isset($_SESSION['gedaanx']) && $_SESSION['gedaanx'] == 2 &&
       isset($_SESSION['pre']) && $_SESSION['pre'] == 1 &&
       isset($_SESSION['gedaan1']) && $_SESSION['gedaan1'] == 1 ) {
...
elseif (isset($_SESSION['gedaanx']) && $_SESSION['gedaanx'] == 2 &&
       isset($_SESSION['pre']) && $_SESSION['pre'] == 1 && 
       isset($_SESSION['gedaan1']) && $_SESSION['gedaan1'] == 1 && 
       isset($_SESSION['gedaan2']) && $_SESSION['gedaan2'] == 1) {
...

现在,请注意第一个和第二个 if 子句不兼容,即如果第一个为真,第二个永远不会为真,反之亦然。这是一个很好的案例,您的执行检查第一个子句是否为真,如果为真,则遵循第一个分支。如果不正确,则检查第二个子句。如果为真,则执行第二个分支。

请注意,如果第一个子句为真,则第二个子句不会被选中。因此对于第三个和第四个分支的情况,如果第一个或第二个为真,则不会遵循其他分支,无论它们的 if 子句如何。

然而,如果third/fourth分支的子句为真,那么第二个分支的子句也为真。因此执行永远不会到达第三或第四个分支,总是在第二个(或第一个)分支结束。

记住关于不兼容子句的注释,您可能想要使子句不兼容,例如,使第二个分支看起来像

elseif (isset($_SESSION['gedaanx']) && $_SESSION['gedaanx'] == 2 &&
       isset($_SESSION['pre']) && $_SESSION['pre'] == 1 &&
       !isset($_SESSION['gedaan1'])  ) {
...

或者简单地交换第 4 个分支和第 2 个分支,使第 4 个是第 2 个,第 3 个是第 3 个,第 2 个是第 4 个。然后第 4 个分支将在第 1 个分支之后立即被检查。