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 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
  • ¥20 @microsoft/fetch-event-source 流式响应问题
  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?