我有3个页面:成功.html,登录.php,检查登录.php。我还创建了一个名为userInfo的mysql数据库表。表"用户信息由 3 个用户组成:大卫、简、理查德。当我使用用户David从userInfo输入用户名和密码时,它会直接进入成功.html它会说"登录成功"。但是当我输入Mary作为我的用户名和Mary作为我的密码时,它没有显示消息"无效的用户名和密码"。正确的输出应该在我的浏览器上显示该消息,因为用户 Mary 不存在于用户信息中。但我不知道如何解决这个问题。
Mysql 数据库 "用户信息" :
显示数据库
成功.html :
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Login Success Page - 156020K</title>
</head>
<body>
Login Success!!
</body>
</html>
登录.php :
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Login</title>
</head>
<body>
<?php
$url="http://localhost/156020K/Lab5?link=login.php";
if(isset($_GET['link']))
{
echo "Invalid Username and Password";
}
?>
<form action="checklogin.php" method="post">
Username:
<input type="text" name="uname">
<br/>
<br/>
Password:
<input type="password" name="pw">
<br />
<br />
<input type="submit" value="Login">
</form>
</body>
</html>
检查登录.php :
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Check login</title>
</head>
<body>
<?php
if(isset($_POST["uname"]))
{
$u=$_POST['uname'];
$p=$_POST['pw'];
$conn=mysqli_connect("localhost", "root", "" , "db156020K");
$sql = "SELECT * FROM userInfo WHERE name='" .$u. "' AND pass='" .$p. "' ";
$search_result=mysqli_query($conn, $sql);
$userfound=mysqli_num_rows($search_result);
if($userfound >= 1)
{
header("Location: success.html");
}
else
{
header("Location: login.php");
}
}
mysqli_close($conn);
?>
</body>
</html>
并且 url 应该有来自指定资源的请求,然后在身份验证失败时它会传递回登录页面,它应该是这样的"../login.php?uname=Mary&pw=mary">
我的输出:
单击输出 <--- 当用户名和密码未从用户信息 mysql 数据库创建时不显示无效消息
好吧,在你的login.php
文件中,你使用:
if(isset($_GET['link']))
{
echo "Invalid Username and Password";
}
要回显错误消息,但在checklogin.php
文件中,使用 :
header("Location: login.php");
以在登录失败时重定向。
这里没有$_GET
参数,因此您的错误消息永远不会显示。尝试这样的事情进行重定向:
header("Location: login.php?link=whatever");
编辑:刚刚看到这个:
并且 url 应该有来自指定资源的请求,然后在身份验证失败时它会传递回登录页面,它应该是这样的"../login.php?uname=Mary&pw=mary">
为此,您必须使用此重定向:
header("Location: login.php?uname=" . $u . "&pw=" . $p);
并在您的login.php
中检查这些参数:
if(isset($_GET['uname']) && isset($_GET['pw']))
{
echo "Invalid Username and Password";
}
但请记住,通过$_GET
发送密码(即使是错误的密码(从来都不是一个好主意。