#php #authentication
Вопрос:
Так что это мой код, и я понятия не имею, что я сделал не так. В результате того, что бы я ни сделал неправильно, каждый раз, когда я пытаюсь войти в систему с заполненными обоими полями, то есть с введенным паролем и именем пользователя, я получаю сообщение об ошибке, в котором говорится, пожалуйста, заполните все поля, как будто я не заполнял ни одно из них.
login.php
include_once 'header.php';
?>
<section class="signup-form" style="text-align:center;">
<h2>Log In</h2>
<form action="includes/login.inc.php" method="post">
<input type="text" name="uid" placeholder="Username/Email">
<br><br>
<input type="password" name="pwd" placeholder="Password">
<br><br>
<button type="submit" name="submit">Log In</button>
</form>
<?php
if(isset($_GET["error"])){
if($_GET["error"] == "empty input") {
echo "<p style='color:red; text-align:center;'>Please fill in all fields!</p>";
}
if($_GET["error"] == "wronglogin") {
echo "<p style='color:red; text-align:center;'>wrong login info. Try again</p>";
}
}
?>
</section>
login.inc.php
<?php
if(isset($_POST["submit"])){
$username = $_POST['uid'];
$pwd = $_POST['pwd'];
require_once 'dbh.inc.php';
require_once "functions.inc.php";
if (emptyInputLogin($username, $pwd) !== false) {
header('location: ../login.php?error=empty input');
exit();
}
loginUser($conn, $username, $pwd);
}
else {
header('location: ../login.php');
exit();
}
functions.inc.php
function emptyInputLogin( $username, $pwd ) {
$resu<
if (empty($username) || empty($pwd)){
$result = false;
}
return $resu<
}
Комментарии:
1. Я думаю, что в этом и заключается проблема
if(emptyInputLogin($username, $pwd) !== false)
2. Вам нужно показать функцию
emptyInputLogin
3. Просмотрите функцию emptyInputLogin($имя пользователя, $pwd) …. Кажется, это возвращается на круги своя
4. Почему этот вопрос был поднят (даже дважды), когда в нем отсутствует ключевая информация, например, код, который выполняет фактическую проверку, о которой они спрашивают?
5. Вам нужно вернуть значение из функции
return $resu<
, иначе оно всегда будет оцениваться какnull
, что сделает!== false
всегда истинным. php.net/manual/en/functions.returning-values.php
Ответ №1:
Вам нужно вернуться true
, если какие-либо из них пусты, а false
если нет.
function emptyInputLogin( $username, $pwd ) {
$result = false; // default value to return
if (empty($username) || empty($pwd)){
$result = true;
}
return $resu<
}
Эта функция также может быть записана как:
function emptyInputLogin( $username, $pwd ) {
return empty($username) || empty($pwd);
}
так empty($username) || empty($pwd)
как будет оцениваться как истина/ложь.
Ваше утверждение if также можно изменить на просто
if (emptyInputLogin($username, $pwd))
что облегчает чтение.
Или еще проще, вообще пропустите эту функцию в своем login.inc.php
файле:
if (empty($username) || empty($pwd)) {
header('location: ../login.php?error=empty input');
exit;
}
Комментарии:
1. @sketchmanluke —
loginUser()
не является встроенной функцией PHP. Вам нужно написать свою собственную систему аутентификации (или использовать фреймворк, готовый к использованию, поскольку аутентификация может быть небезопасной, если вы не знаете, что делаете). Существует множество различных способов аутентификации пользователей, поэтому для PHP было бы невозможно использовать универсальную функцию «LoginUser ()».