Php 如果不正确,如何添加登录详细信息确认?

Php 如果不正确,如何添加登录详细信息确认?,php,html,Php,Html,如果不正确,如何添加登录详细信息确认?我想发生的是,当用户输入他/她的凭据时,他们的用户名和密码是正确的,但是用户类型是错误的,如果用户按下登录按钮,它会说“错误的凭据”,如果他们输入错误的凭据,用户名和密码也是错误的 <?php include "includes/config.php"; session_start(); if(isset($_POST['loginbutton'])){ $username = $_POST['username']; $pass

如果不正确,如何添加登录详细信息确认?我想发生的是,当用户输入他/她的凭据时,他们的用户名和密码是正确的,但是用户类型是错误的,如果用户按下登录按钮,它会说“错误的凭据”,如果他们输入错误的凭据,用户名和密码也是错误的

<?php
include "includes/config.php";

session_start();
if(isset($_POST['loginbutton'])){

$username = $_POST['username'];
$password = $_POST['password'];
$usertype = $_POST['usertype'];

if ($username != "" && $password != ""){
   
    $sql_query = "SELECT * FROM tbl_useraccounts WHERE employee_id='".$username."' and password='".$password."' and usertype='".$usertype."'";
    $result = mysqli_query($con,$sql_query);
    while ($row=mysqli_fetch_array($result)) {
        if ($row['employee_id']==$username && $row['password']==$password && $row['usertype']=='Admin'){
            $_SESSION['username'] = $_POST['username'];
          header('location: home.php');
        }
        elseif ($row['employee_id']==$username && $row['password']==$password && $row['usertype']=='SuperAdmin') {
           $_SESSION['username'] = $_POST['username'];
           header('location: HomeForSuperAdmin.php');
        }      
}
}
}


?>
是正确的

您对SQL注入非常开放,应该使用参数化的预处理语句,而不是手动构建查询

如果在某些针对MySQL的SQL中嵌入字符串,则必须使用MySQL的函数(mysqli_real_escape_string)对该字符串进行转义,并在登录失败时触发db query进行输入

修改代码:

     <?php
    include "includes/config.php";
    
    session_start();
    if(isset($_POST['loginbutton'])){
    
    $username = $_POST['username'];
    $password = $_POST['password'];
    $usertype = $_POST['usertype'];
    $loginFlag = true;
    
    if ($username != "" && $password != ""){
    
        $sql_query = "SELECT * FROM tbl_useraccounts WHERE employee_id='".$username."' and password='".$password."' and usertype='".$usertype."'";
        $result = mysqli_query($con,$sql_query);
        while ($row=mysqli_fetch_array($result)) {
            if ($row['employee_id']==$username && $row['password']==$password && $row['usertype']=='Admin'){
                $_SESSION['username'] = $_POST['username'];
              header('location: home.php');
              $loginFlag = true;
            }
            elseif ($row['employee_id']==$username && $row['password']==$password && $row['usertype']=='SuperAdmin') {
               $_SESSION['username'] = $_POST['username'];
               header('location: HomeForSuperAdmin.php');
               $loginFlag = true;
                } 
         else {
              $loginFlag = false;
         }
        }
        }
        if($loginFlag == false){
    #real_escape_string is used to prevent sql injection
    $username = real_escape_string($_POST['username']); 
    $password = real_escape_string($_POST['password']);
    $usertype = real_escape_string($_POST['usertype']);
# query assume table name log
           $sql_query = "INSERT INTO log (username, password, usertype, ip_address)
VALUES ('$username ', '$password ', '$usertype ', '".$_SERVER['REMOTE_ADDR']."')";

        }
      }    
    
    ?>

切勿以明文或使用MD5/SHA1存储密码!仅存储使用PHP创建的密码哈希,然后可以使用进行验证。看看这篇文章:了解到目前为止你尝试了什么?代码不包含任何错误的检查credentials@NicoHaase如果凭据不正确,我还没有输入任何代码来尝试。我仍然在网上寻找答案。
如果(!password_verify(/*…*/){echo'Invalid credentials';}
看看我前一段时间写的内容,我的课程中还没有安全性。但这让我了解了sql注入是如何工作的。但是谢谢你把这些放进去。我仍然有一个问题,如果用户输入了错误的凭据,登录将如何通知用户。您可以在登录失败时返回请求数据,并在客户端(如200 420)进行检查…该代码仍然容易受到SQL注入的攻击-请不要建议使用此类易受攻击的代码,特别是如果您声称要避免它