我正在尝试创建一个登录页面并让它提交给自己,然后根据用户是否经过身份验证进行重定向。但由于某种原因我每次提交时,用错误的用户名或密码,我希望它再次显示登录屏幕,但它只显示空白。但如果我正确登录,那么它就可以了。
<?php
if (!empty($_POST)){
require_once 'includes/db.php';
if($user->login($_POST["username"], $_POST["password"]))
echo "user is logged in";
}else{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>
<body>
<form action="" method="post">
<table align="center">
<tr>
<td>User name:</td>
<td>Password: </td>
</tr>
<tr>
<td><input type="text" name="username" /></td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td><input type="submit" value="Login" /></td>
</tr>
</table>
</form>
</body>
</html>
<?php
}
?>
答案 0 :(得分:1)
那是因为你的!empty($_POST)
子句因为$_POST
变量不为空而触发,因为你只是发送了一些登录凭证(它们可能是错的,但这没关系)。
else
子句只会在未发送任何内容时触发,因此基本上每当您使用表单提交任何内容时,如果登录凭据正确user is logged in
将会出现,如果他们是错的,什么都不会被熄灭。
解决此问题的最简单方法是完全删除else
子句,并将exit()
添加到if
子句中,检查凭据,如下所示:
<?php
if (!empty($_POST)) {
require_once 'includes/db.php';
if ($user->login($_POST["username"], $_POST["password"])) {
echo "user is logged in";
/* Add exit() if you don't want the form to show
up when login attempt was successful. */
}
}
?>
<!-- HTML CODE -->
答案 1 :(得分:0)
正确检查语法......
if($user->login($_POST["username"], $_POST["password"]))
{
//if login success, then redirect to index.php
header('Location:index.php');
}else{
//if username and pass do not match or login fails, redirect to login.php
?>