我有3頁:success.html,的login.php,checklogin.php。我還創建了一個名爲userInfo的mysql數據庫表。表「userInfo由3個用戶組成:David,Jane,Richard。當我使用用戶輸入用戶名和密碼David from userInfo然後直接輸入success.html,它會顯示」Login success「。輸入Mary作爲我的用戶名和瑪麗用於我的密碼,它不會顯示消息「無效的用戶名和密碼」。正確的輸出應該在我的瀏覽器上顯示消息,因爲用戶Mary不存在於userInfo中。知道如何解決這個問題腓登錄 「無效的用戶名和密碼」 用mysql
MySQL數據庫 「用戶信息」:
Success.html:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Login Success Page - 156020K</title>
</head>
<body>
Login Success!!
</body>
</html>
的login.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>
Checklogin.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應該從請求指定資源urce那麼它將傳回時,認證失敗到登錄頁面,就應該是這樣的「../login.php?uname=Mary & PW =瑪麗」
我的輸出:
click output < ---不顯示無效的消息時,用戶名和密碼不從用戶信息mysql數據庫創建
a)您應該**從不**通過GET傳輸認證數據,即使數據無效。 b)通過使用預準備語句來防止** SQL注入**。試想一下有人發佈了密碼''; DROP TABLE userInfo; - 'c),不要**以純文本形式存儲密碼。使用'password_hash()'來創建一個安全的hash和'password_verify'來檢查密碼 –