Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果、elseif和else未按预期工作_Php_Session_If Statement - Fatal编程技术网

Php 如果、elseif和else未按预期工作

Php 如果、elseif和else未按预期工作,php,session,if-statement,Php,Session,If Statement,我试图用if和elseif检查是否存在和是否有固定值的$\u会话 我唯一的问题是会话都已就位并设置为预期值,但我的脚本没有进行第二次检查。 所以我的问题是,我是否设置了if,elseif,else的格式不正确,或者这是我检查会话值的方式?我该怎么做呢 可以在此处找到脚本: 这是145行,所以我真的不打算在这里张贴,因为它是如此之长,将占用整个页面 任何帮助都将不胜感激 第二个ifisset($\u SESSION['gedaanx'])&$\u SESSION['gedaanx']==2&&is

我试图用if和elseif检查是否存在和是否有固定值的$\u会话
我唯一的问题是会话都已就位并设置为预期值,但我的脚本没有进行第二次检查。

所以我的问题是,我是否设置了if,elseif,else的格式不正确,或者这是我检查会话值的方式?我该怎么做呢

可以在此处找到脚本:
这是145行,所以我真的不打算在这里张贴,因为它是如此之长,将占用整个页面


任何帮助都将不胜感激

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


如果s,则必须反转第二个和第三个

首先,您的代码

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子句是不兼容的,即如果第一个if子句为true,那么第二个if子句将永远不会为true,反之亦然。这是一个很好的情况,您的执行将检查第一个if子句是否为true,如果为true,则遵循第一个分支。如果为false,则检查第二个if子句。如果为true,则遵循第二个分支

请注意,如果第一个子句为true,则不检查第二个子句。因此,对于第三个和第四个分支,如果第一个或第二个子句为true,则不会遵循任何其他分支,无论它们的
if
子句如何

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

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

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

或者简单地交换第四个分支和第二个分支,使第四个是第二个,第三个是第三个,第二个是第四个。然后在第一个分支之后立即检查第四个分支。

var\u dump($\u会话);执行打印($\u会话)在页面顶部,您看到了什么?同时将您的会话\u start移至页面顶部。所有会话都已设置,并且“是”会话已正确启动,否则它将不会执行前2个检查。因此,我将条件检查更改为:if cookie=1 elseif cookie=2等,并更新了我的其他脚本,更简单且有效:)因此,我将条件检查更改为:if cookie=1 elseif cookie=2等,并更新了我的其他脚本,更简单且有效:)