因为某些原因。 IF 语句正在工作....我试过 If/else 也没有运气[关闭]

Posted

技术标签:

【中文标题】因为某些原因。 IF 语句正在工作....我试过 If/else 也没有运气[关闭]【英文标题】:For some reason. IF statement is working....Ive tried If/else with no luck either [closed] 【发布时间】:2021-12-29 23:25:30 【问题描述】:

只有“管理员”if 语句才能正确运行。其他任何东西都会跳转到未嵌套的 else...有什么原因吗?

注意:是的,我已经检查了排名的拼写...它们拼写正确

用户成功登录后重定向 (login-successful.php):

<?php
  session_start();

  if(isset($_SESSION["username"]))
    if ($_SESSION["rank"] == 'Admin')//Check if Admin
      header("location:/panel/admin/profile.php");
     elseif ($_SESSION["rank"] == 'Faculty')//Check if Faculty
      header("location:/panel/student/profile.php");
     elseif ($_SESSION["rank"] == 'Student')//Check if Student
      header("location:/panel/faculty/profile.php");
    
  else
    header("location:log-in.php");
  
 ?>

登录页面(login.php):

<?php
session_start();
$host = "localhost";
$username = "username";
$password = "password!";
$database = "database";
$message = "";
try

     $connect = new PDO("mysql:host=$host; dbname=$database", $username, $password);
     $connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     if(isset($_POST["login"]))
     
          if(empty($_POST["username"]) || empty($_POST["password"]))
          
               $message = '<label class="red-text text-darken-2">All fields are required</label>';
          
          else
          
               $query = "SELECT * FROM login WHERE username = :username AND password = :password";
               $statement = $connect->prepare($query);
               $statement->execute(
                    array(
                         'username'     =>     $_POST["username"],
                         'password'     =>     $_POST["password"]
                    )
               );
               $count = $statement->rowCount();
               if($count > 0)
               
                    $_SESSION["username"] = $_POST["username"];
                    $_SESSION["rank"] = $statement->fetchColumn(3);
                    header("location:login_success.php");

               
               else
               
                    $message = '<label class="red-text text-darken-2">Wrong Email or Password</label>';
               
          
     

catch(PDOException $error)

     $message = $error->getMessage();

?>

登录表: Login Table

【问题讨论】:

无复制~3v4l.org/qP4Tm 可以显示登录表吗?想看看第 3 列的内容 一个好的做法是在header('Location:... 之后放置一个出口,以防止进一步的代码执行 提供登录表 您能否打印 $_SESSION["rank"] 并在每次获得正确的排名名称时进行检查? 【参考方案1】:

哇....不敢相信我只花了一个小时在这个....凌晨 2 点,我筋疲力尽...一定是这个滑倒的原因.... elseif ($_SESSION["rank"] == 'Faculty')//检查是否是Faculty header("location:/panel/student/profile.php"); elseif ($_SESSION["rank"] == 'Student')//检查Student header("location:/panel/faculty/profile.php");链接到错误目录的文件迫使它返回登录页面(因为不允许排名)非常感谢大家...我觉得自己像个笨蛋...现在要睡觉了

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】:

不知道确切原因(需要更多代码)但是尝试这样做

    if (empty($_SESSION['username']) && empty($_SESSION['rank']))
        header("location:log-in.php");
    
    else if ($_SESSION["rank"] == 'Admin')//Check if Admin
      header("location:/panel/admin/profile.php");
     else if ($_SESSION["rank"] == 'Faculty')//Check if Faculty
      header("location:/panel/faculty/profile.php");
     else if ($_SESSION["rank"] == 'Student')//Check if Student
      header("location:/panel/student/profile.php");
    

【讨论】:

不...不走运 :( 那只是我的 login-success.php 文件....我用初始登录 php 更新了帖子 您的情况似乎对我有效,甚至对上述评论中的@Phil 也有效。你能检查一下排名是否正确分配,以防万一。 等级在登录 php 文件中正确分配。 $_SESSION["rank"] = $statement->fetchColumn(3); 找到解决方案....代码拍摄到错误的目录...对不起那个人...感谢您的帮助...非常感谢 发生很多次...

以上是关于因为某些原因。 IF 语句正在工作....我试过 If/else 也没有运气[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

MySql SELECT 与 if 语句和 LIKE 运算符

无法让打印语句工作 PS4 模拟棒

设置变量等于 if 语句条件

如何取出包含数学表达式并给出结果的字符串的某些部分

如何在 oracle sql 脚本中创建 if-then-else 语句?

Meteor + Blaze - If else 语句