复杂If语句不触发[PHP]

时间:2014-06-03 16:20:29

标签: php if-statement

如果用户未登录,我尝试进行重定向。 所以它应该是这样的:

如果未设置FName且$ page不等于'新主机'或者'登录' 然后将header设置为login并设置错误消息。

所有部件都可以自行工作,但不是在我尝试组装时。

编辑,我现在正在使用交换机,但我仍然对为什么 无法正常工作感兴趣。

||如果任一条件为真,则表示为真。

并检查领先和以下条件是否为真。

我应该使用&&或者这会有所作为吗?

这是我的代码:

if ( !isset($_SESSION['FName']) and 
( $page == '/e-Party/Login/Login.php' ||  $page == '/e-Party/NewHost/NewHost.php')){

echo "not logged in";

$_SESSION['Error'] =
 "you must login to use our site,<br>. Or create a account if you don't have one"; 
  header( 'Location: /e-Party/Login/Login.php' );
  exit();
 } 

编辑,这是我的工作开关。

if ( !isset($_SESSION['FName']))
switch ($page) {
   case '/e-Party/NewHost/NewHost.php':    
   break;

   case '/e-Party/Login/Login.php':    
   break;  

   default:
   $_SESSION['Error'] =
   "you must login to use our site,<br>. Or creat a account if you dont   have one"; 
   header('Location: /e-Party/Login/Login.php');
   exit();
}

评论比投票更有帮助,谢谢你的阅读。

3 个答案:

答案 0 :(得分:5)

您的ifswitch 等效:switch版本等同于

if (!isset($_SESSION['FName']) && $page != '/e-Party/Login/Login.php' &&  $page != '/e-Party/NewHost/NewHost.php') {
  ...
}

答案 1 :(得分:0)

我将if更改为一个开关,它按照我的意图完美地工作。

if ( !isset($_SESSION['FName']))
switch ($page) {
  case '/e-Party/NewHost/NewHost.php':    
  break;

  case '/e-Party/Login/Login.php':    
  break;  

  default:
  $_SESSION['Error'] =
  "you must login to use our site,<br>. Or creat a account if you dont   have one"; 
  header('Location: /e-Party/Login/Login.php');
  exit();
}

答案 2 :(得分:0)

你写了

  

如果未设置FName且$ page不等于'new host'或'login'...

但你写的(在PHP中)

if  !isset($_SESSION['FName']) and 
 ($page == '/e-Party/Login/Login.php' ||  $page == '/e-Party/NewHost/NewHost.php')

即,页面等于A或页面等于B.要使PHP匹配英语:

if  !isset($_SESSION['FName']) and 
 ($page != '/e-Party/Login/Login.php' ||  $page != '/e-Party/NewHost/NewHost.php')

有缺陷。它相当于

if  !isset($_SESSION['FName'])