php中的两个if语句

时间:2014-10-19 09:23:28

标签: php if-statement

我有两个单独的if语句,第一个if语句不起作用,但第二个是。 第一个if语句适用于我的其他页面,我不确定如何正确编写代码,因为我是PHP的初学者。

<?php 
session_start();

if($_SESSION['loggedin'] != 'true') {
    header("location:login.php"); 
} 

if ($_SESSION['admin']=='N') {
    header("location:errorpage.php");
    }
?>

4 个答案:

答案 0 :(得分:1)

您的条件中 true 是什么?它可以是 bool 类型或字符串类型。

如果您这样设置:

$_SESSION['loggedin'] = TRUE;
$_SESSION['loggedin'] = 'true'; 

你有两个不同的变量集。

您可以使用==或===来比较它以包含变量类型。

例如:

$_SESSION['test_1'] = TRUE;
$_SESSION['test_2'] = 'true';
var_dump( $_SESSION );
array(2) { ["test_1"]=> bool(true) ["test_2"]=> string(4) "true" } 

答案 1 :(得分:0)

$ _ SESSION [ '的loggedIn']?

为什么不在登出时清除每个SESSION var以及是否设置了SESSION变量=&gt;用户已登录。 并在header()之后使用; exit();

尝试var_dump($_SESSION['loggedin'])并修改您的问题。

或许你的loggedin var不是一个字符串而是一个布尔值,所以你可以做if(!$_SESSION['loggedin'])

答案 2 :(得分:0)

尝试使用布尔值而不是字符串。我还会使用const作为admin变量。我会做以下事情;

$ _ SESSION [&#39; loggedin&#39;] = true / false;
$ _SESSION [&#39; admin&#39;] = true / false;

 public class Priviledges
 {
    public CONST Admin = 0;
    public CONST User = 1;
    public CONST Contributor = 3;

    //change this to however you want to do it :)
    public static function isAdmin($val)
    { 
      if ($val == Priviledges::Admin)
      { 
        return true; 
      }
      else 
      { 
        return false; 
      }
    }
 }

然后当你设置管理会话变量时,你可以去;

$_SESSION['admin'] = Priviledges::Admin;

if(!$_SESSION['loggedin']) 
{
  header("location:login.php");
  exit() 
} 
else if (!Priviledges::isAdmin($_SESSION['admin']))
{
  header("location:errorpage.php");
  exit()     
}
else
{ //do your stuff if none of these conditions are met.. }

答案 3 :(得分:0)

在发送&#34;位置&#34;后,始终添加exit()die() HTTP标头:

<?php 
session_start();

if($_SESSION['loggedin'] !== 'true') {
    header("location:login.php"); 
    exit();
} 

if ($_SESSION['admin'] === 'N') {
    header("location:errorpage.php");
    exit();
}

检查:php - Should I call exit() after calling Location: header?

来自aaronsaray博客:

  

请记住,仅仅因为浏览器足够智能而不能显示   内容,并不意味着这不危险。所以,它有点儿   如果此页面只显示用户搜索选项,则表示不太危险   或一些信息。如果这是一个页面,那就更危险了   执行一个动作。这是因为整个PHP页面都将执行   如果你没有发表die()声明。

在其他情况下,如果您希望仅在先前条件为假时评估条件,则可以使用&#34; else if&#34;。