Сценарий входа администратора с PHP и MySQL именем пользователя и паролем неверен, несмотря на правильный ввод - PullRequest
0 голосов
/ 04 апреля 2020

Я новичок в PHP и MySQL, и я делаю сценарий входа для администратора, но я не могу найти проблему с кодом ниже. Имя пользователя и пароль по-прежнему неверны, даже если они существуют в базе данных и были правильно введены в форму.

Here is the screenshot of my

<?php

if(isset($_POST['adminlogin-submit'])){

    require 'dbh.inc.php';

    $username = $_POST['adminusername'];
    $password = $_POST['adminpassword'];

    if(empty($username) || empty($password)){
        header("Location: ../adminlogin.php?error=emptyfields");
        exit();
    }
    else{
        $sql = "SELECT * FROM admin WHERE username=?;";
        $stmt = mysqli_stmt_init($conn);
        if(!mysqli_stmt_prepare($stmt, $sql)){
            header("location: ../adminlogin.php?error=sqlerror");
            exit();
        }
        else{
            mysqli_stmt_bind_param($stmt, "s", $username);
            mysqli_stmt_execute($stmt);
            $result = mysqli_stmt_get_result($stmt);
            if($row = mysqli_fetch_assoc($result)){
                $passwordCheck = password_verify($password, $row['password']);
                if($passwordCheck == false){
                    header("location: ../adminlogin.php?error=wrongpassword");
                    exit();
                }
                else if($passwordCheck == true){
                    session_start();
                    $_SESSION['id'] = $row['id'];
                    $_SESSION['adminusername'] = $row['username'];

                    header("location: ../adminlogin.php?login=success");
                    exit();
                }
                else{
                    header("location: ../adminlogin.php?error=unknownerror");
                    exit();
                }
            }
            else{
                header("location: ../adminlogin.php?error=nouser");
                exit();
            }
        }
    }
}
else{
    header("location: ../adminlogin.php");
    exit();
}

1 Ответ

0 голосов
/ 04 апреля 2020

password_verify принимает га sh пароля в качестве второго параметра, а не сам пароль. в таблице значение в поле пароля должно быть не простым паролем, а его ha sh.

check password_ha sh

Для вставки верный хешированный пароль в вашей таблице, используйте

$hashed_password = password_hash( $password, PASSWORD_DEFAULT );

$sql = "UPDATE admin SET password = ? WHERE username=?";
$stmt = mysqli_stmt_init($conn);
mysqli_stmt_prepare($stmt, $sql)) or die("SQL error");
mysqli_stmt_bind_param($stmt, "ss", $hashed_password, $username);
mysqli_stmt_execute($stmt);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...