我正在使用PHP创建登录系统,但无法正常工作
这是我的登录页面:
<div class="container">
<form method="post" action="index.php?page=login">
<div class="form-group row">
<label for="loginFormInputEmail" class="col-sm-2 col-form-label">Email:</label>
<div class="col-sm-10">
<input id="loginFormInputEmail" class="form-control" type="email" name="email" value="<?php if(!empty($_POST['email'])) echo $_POST['email'];?>" />
</div>
</div>
<div class="form-group row">
<label for="loginFormInputPass" class="col-sm-2 col-form-label">Pass:</label>
<div class="col-sm-10">
<input id="loginFormInputPass" class="form-control" type="password" name="password" />
</div>
</div>
<div class="form-group row">
<div class="offset-sm-2 col-sm-10">
<input class="btn btn-primary" type="submit" value="login" />
</div>
</div>
</form>
</div>
这是我放置登录系统的Usercontroller文件:
public function login() {
if(!empty($_POST)) {
if(!empty($_POST['email']) && !empty($_POST['password'])) {
$existing = $this->userDAO->selectByEmail($_POST['email']);
if(!empty($existing)) {
if (password_verify($_POST['password'], $existing['password'])) {
$_SESSION['user'] = $existing;
} else {
$_SESSION['error'] = 'Unknown username / password';
}
} else {
$_SESSION['error'] = 'Unknown username / password';
}
} else {
$_SESSION['error'] = 'Unknown username / password';
}
}
header('Location: index.php');
exit();
}
问题是,如果我进入登录页面,它将自动返回索引页面,因为我的位置为:index.php。但是我不知道如何更改它以使其工作。
答案 0 :(得分:1)
验证用户时,您需要添加header()。用户通过验证后,标头可以走到哪里。
public function login() {
if(!empty($_POST)) {
if(!empty($_POST['email']) && !empty($_POST['password'])) {
$existing = $this->userDAO->selectByEmail($_POST['email']);
if(!empty($existing)) {
if (password_verify($_POST['password'], $existing['password'])) {
$_SESSION['user'] = $existing;
header('Location: some_where_else.php');
// dont forget the exit as header does not stop the flow of execution
exit;
} else {
$_SESSION['error'] = 'Unknown username / password';
}
} else {
$_SESSION['error'] = 'Unknown username / password';
}
} else {
$_SESSION['error'] = 'Unknown username / password';
}
}
// This is now run only when validation failed
header('Location: index.php');
exit();
}