2016-11-15 229 views
1

我有3頁:success.html的login.phpchecklogin.php。我還創建了一個名爲userInfo的mysql數據庫表。表「userInfo由3個用戶組成:David,Jane,Richard。當我使用用戶輸入用戶名和密碼David from userInfo然後直接輸入success.html,它會顯示」Login success「。輸入Mary作爲我的用戶名和瑪麗用於我的密碼,它不會顯示消息「無效的用戶名和密碼」。正確的輸出應該在我的瀏覽器上顯示消息,因爲用戶Mary不存在於userInfo中。知道如何解決這個問題腓登錄 「無效的用戶名和密碼」 用mysql

MySQL數據庫 「用戶信息」:

show database

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: &nbsp; 
    <input type="text" name="uname"> 

    <br/> 
    <br/> 

    Password: &nbsp; 
    <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數據庫創建

+8

a)您應該**從不**通過GET傳輸認證數據,即使數據無效。 b)通過使用預準備語句來防止** SQL注入**。試想一下有人發佈了密碼''; DROP TABLE userInfo; - 'c),不要**以純文本形式存儲密碼。使用'password_hash()'來創建一個安全的hash和'password_verify'來檢查密碼 –

回答

0

那麼,在你的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 =瑪麗& PW =瑪麗」

要做到這一點,你必須使用此重定向:

header("Location: login.php?uname=" . $u . "&pw=" . $p); 

而且在檢查這些參數你login.php

if(isset($_GET['uname']) && isset($_GET['pw'])) 
{ 
    echo "Invalid Username and Password"; 
} 

但請記住,發送密碼絕不是一個好主意,即使是錯誤的,通過$_GET

相關問題