я пытаюсь установить функцию входа в систему, которая соответствует имени пользователя и паролю, существующим в моей базе данных. Однако первое условие работает отлично, а второе - нет.
<?php
if (isset($_POST['loginButton'])){
//taking user input
$username = $_POST['loginUsername'];
$password = $_POST['loginPassword'];
//Call of the login function through acccount variable
$result = $account->login($username, $password);
if ($result == true){
header('location:index.php');
}
}
?>
<?php
class Account{
...
public function login($un , $pw){
$pw = md5($pw);
$query = mysqli_query($this->con , "SELECT * FROM users WHERE username = '$un' AND passwords = '$pw' ");
if (mysqli_num_rows($query) == 1){
return true;
}
else{
array_push($this->errorArray , Constants::$loginFailed);
return false;
}
}
}
?>
<?php
class Constants{
//Login constants
public static $loginFailed = "Your username or password was incorrect";
}
?>
я за исключением того, что он возвращает true, поэтому он перенаправляет меня на страницу индекса, но фактический ввод является ложным
вы можете проверить свою функцию login, чтобы увидеть, действительно ли она возвращается false






Ваш запрос всегда будет возвращать false, потому что он не может найти пользователя с заданным паролем, это неправильный способ проверки хешированного пароля.
//this is where the problem is, do not verify password like this:
$pw = md5($pw);
$query = mysqli_query($this->con , "SELECT * FROM users WHERE username
= '$un' AND passwords = '$pw' ");
Это правильный способ проверки хешированных паролей (https://www.php.net/manual/en/function.password-verify.php):
if (password_verify($pw, $hash)) { //$hash password is from the DB
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
Итак, в вашем sql-запросе сначала получите пользователя с заданным именем пользователя.
$query = mysqli_query($this->con , "SELECT * FROM users WHERE username = '$un'");
затем сопоставьте пароль из БД с текущим паролем, заданным пользователем $pw с функцией password_verify. так что будет примерно так:
if ($query){
$data = mysqli_fetch_row($query);
if (password_verify($pw, $data['passwords'])) { //$data['password'] password is from the DB
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
}
Покажите свой полный код, где вы создаете экземпляр своего класса?