php中的两个if语句


two if statements in php

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

<?php 
session_start();
if($_SESSION['loggedin'] != 'true') {
    header("location:login.php"); 
} 
if ($_SESSION['admin']=='N') {
    header("location:errorpage.php");
    }
?>

在您的条件下,true是什么?它可以是bool类型或string型。

如果你这样设置:

$_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" } 

$_SESSION['loggdin']?

为什么不在注销时清除每个SESSION变量,如果SESSION var设置为=>则用户已登录。并在header()之后使用;exit();

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

或者,您的loggedin var不是字符串,而是布尔值,因此您可以执行if(!$_SESSION['loggedin'])

请尝试使用布尔值而不是字符串。我也会为管理变量使用const。我会做以下事情;

$_SESSION['loggdin']=真/假
$_SESSION['admin']=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.. }

发送"Location"HTTP标头后始终添加exit()die()

<?php 
session_start();
if($_SESSION['loggedin'] !== 'true') {
    header("location:login.php"); 
    exit();
} 
if ($_SESSION['admin'] === 'N') {
    header("location:errorpage.php");
    exit();
}

Check:php-在调用Location:header之后,我应该调用exit()吗?。

来自aaronsaray博客:

记住,仅仅因为浏览器足够智能,不会显示内容,并不意味着这不危险。所以,这有点如果该页面只是显示用户搜索选项,则危险性较小或者一些信息。如果这是一个页面执行动作。这是因为整个PHP页面将执行如果你不放一个die()语句。

在其他情况下,如果您希望仅在前一个条件为false时评估条件,则可以使用"else-if"。