如果,elseif和其他工作不像预期的那样

时间:2015-01-22 11:58:22

标签: php session if-statement

我试图检查if和elseif如果$ _sessions存在且是否有固定值。
我唯一的问题是会议全部到位并设置为预期值,但我的脚本不会再进行第二次检查。

所以我的问题是在这里我格式化if,elseif,否则不正确或者是我检查会话值的方式吗?我应该以另一种方式做什么?

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

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

你必须反转第二和第三if s。

答案 1 :(得分:1)

首先,您的代码

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子句是不兼容的,即如果第一个为真,则第二个永远不会为真,反之亦然。这是一个很好的例子,你的执行检查第一个子句是否为真,如果是,则遵循第一个分支。如果不成立,则检查第二个子句。如果确实如此,则遵循第二个分支。

请注意,如果第一个子句为true,则不检查第二个 。因此,对于第三和第四个分支的情况,如果第一个或第二个分支是真的,则不管其if条款如何,都不会遵循其他分支。

但是,如果第三/第四分支的子句为真,则第二分支的子句也是如此。因此,执行永远不会到达第三或第四分支,总是在第二(或第一)分支中结束。

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

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

或者简单地交换第4分支和第2分支,使第4分为第2分,第3分为第3分,第2分为第4分。然后在第1分钟后立即检查第4分支。