dtnnpt11795 2017-02-16 22:47
浏览 29
已采纳

Php mysQli脚本与AND运算符不按预期工作

I keep writing queries that seem to never work the way I want them to. In this script, if the user who tries to login has user_level 'Admin' he should be direct to adminhome.php elseif user has user_level 'Employee' he should be directed to employeehome.php. I've created these two users Amanda with user_level Admin and Hugo with user_level 'Employee' to test the script but no matter who i'm login with, it fires $error.

login.php

<?php 
 if($_SERVER["REQUEST_METHOD"] == "POST") {

    $myusername = mysqli_real_escape_string($db,$_POST['username']);
    $mypassword = $_POST['password'];          


    $hashedPasswordQry = "SELECT password FROM users WHERE username = '$myusername'";

   $userLevel = mysqli_query($db, "SELECT user_level FROM users WHERE username='".$myusername."'");

    $result = mysqli_query($db,$hashedPasswordQry);
    $row = mysqli_fetch_array($result,MYSQLI_ASSOC);

    $count = mysqli_num_rows($result);

    // If result matched $myusername and $mypassword, table row must be 1 row
    if($count == 1 && (password_verify($mypassword, $row['password'])) && $userLevel  == 'Admin') {

        $_SESSION['login_user'] = $myusername;


        header("location: user/adminhome.php");

    }elseif($count == 1 && (password_verify($mypassword, $row['password'])) && $userLevel == 'Employee'){

           $_SESSION['login_user'] = $myusername;


        header("location: user/employeehome.php");
    }
else{
     $error = '<h5 style="text-align: center;" class="alert alert-danger" >Your username  or password is invalid</h5>';

}
}
?>
  • 写回答

1条回答 默认 最新

  • douyicao2199 2017-02-16 23:39
    关注

    You're using two very similar selects, when one is only necessary. You can select multiple columns in a query by separating them with a comma SELECT this_column, that_column FROM ... And while you were executing both queries, you're only accessing the results of the password query and not the $userLevel result. A more correct version would look like:

    $query = "SELECT password, user_level FROM users WHERE username = '$myusername'";
    
    $result = mysqli_query($db, $query);
    $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
    
    $count = mysqli_num_rows($result);
    
    if($count == 1 && (password_verify($mypassword, $row['password'])) && $row['user_level']  == 'Admin')
    {
        // do stuff
    } elseif ($count == 1 && (password_verify($mypassword, $row['password'])) && $row['user_level'] == 'Employee')
    {
        // do stuff
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)