функция php возвращает false и значение переменной $ не работает

У меня есть функция входа в систему, и я хотел бы вернуть значение переменной, если false:

function login($email, $password, $mysqli) {
[...]
// check if username exists
if ($stmt->num_rows == 1) {
// check
if ($db_password == $password) {
//check
} else {
// Invalid password
$error = '2';
return false;
} else {
// No user exists.
$error = '1';
return false;

И это процесс

// the login function is included in this page
if (login($email, $password, $mysqli) == true) {
// Login success
header('Location: /index.php');
} else {
// Login failed
header("Location: /login.php?error=$error");
}

Я бы хотел, чтобы функция возвращала значение переменной error, но она не работает.

В чем дело??

Спасибо!

-1

Решение

это должно сделать свое дело 🙂

function login($email, $password, $mysqli) {
[...]
// check if username exists
if ($stmt->num_rows == 1) {
// check
if ($db_password == $password) {
//check
return true;
} else {
// Invalid password
$error = '2';
return $error;
} else {
// No user exists.
$error = '1';
return $error;
......// the login function is included in this page
if (login($email, $password, $mysqli) === true) { //check for type (bool)true
// Login success
header('Location: /index.php');
} else {
// Login failed
header("Location: /login.php?error=$error");

}
0

Другие решения

Вы не можете иметь еще два условия в одном и том же операторе if, и вы должны вернуть переменную $ error вместо возврата false, если вам действительно нужно знать номер ошибки, но только для вашей известной. Как сказал один пользователь, старайтесь не сообщать пользователю, где именно находится ошибка входа в систему. Просто скажите клиенту, что логин / пароль неверны

0

Как уже говорилось ранее, мы не должны сообщать пользователям, было ли имя пользователя неверным или пароль был неверным.
Но это было только упражнение (я все еще начинал php).

Мы можем безопасно удалить два других.

function login($email, $password, $mysqli) {
[...]
$exit = false;
// check if username exists
if ($stmt->num_rows > 0) {
// check
if ($db_password == $password) {
// checked
$exit = true;
} else {
// Invalid password
$exit = 2;
}
} else {
// No user exists.
$exit = 1;
}

return $exit;
}

Не нужно сравнивать, оно пройдет, только если login () вернет true

// the login function is included in this page
if (login($email, $password, $mysqli)) {
// Login success
header('Location: /index.php');
} else {
// Login failed
header("Location: /login.php?error=$error");
}
0
По вопросам рекламы [email protected]