我有一个登录功能,如果为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;
这是process_login
// 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");
}
我希望函数返回错误变量的值,但它不起作用。
怎么了?
谢谢!
答案 0 :(得分:0)
这应该可以解决问题:)
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");
}
答案 1 :(得分:0)
你不能在同一个if语句中有两个else条件,你应该返回变量$ error而不是返回false,如果你真的需要知道错误号但只是你已知的。正如一位用户告诉您尝试不告诉用户确切的登录错误。只需告诉客户端登录/密码详细信息不正确
答案 2 :(得分:0)
如前所述,我们不应该让用户知道用户名或密码是错误的。 但这只是一个练习(我还在开始使用php)。
我们可以安全地删除其他两个。
// 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");
}
无需比较,只有在login()返回true时才会传递
now