2017-09-27 121 views
0

這是我的代碼,即使點擊提交按鈕後,登錄成功。提供錯誤的用戶名和密碼時登錄成功

$username = isset($_POST['username']); 
$password = isset($_POST['password']); 
//sql dtabase conn 
    $conn = mysqli_connect("localhost","root","","login"); 
    //query the dtabase for user 

    $result = mysqli_query($conn, "select * from users where username = 
    '$username' and password = '$password'")or die("failed to query database".mysqli_connect_error()); 

    $row = mysqli_fetch_array ($result); 

    if($row['username'] == $username && $row['password'] == $password && ("" 
    !== $username || "" !== $password)){ 
     echo "Login success".$row['username']; 
    }else{ 
     echo "Failed to login"; 
    } 

我是初學者。請幫助我

+0

不要使用isset來分配變量。使用一些轉義函數或其他東西。你應該把isset放在if語句上 –

+0

首先修復這行兩行'$ username = isset($ _ POST ['username'])? $ _POST ['username']:「」; $ password = isset($ _ POST ['password'])? $ _ POST [ '密碼']: 「」;' –

回答

2

您正在使用isset來檢查用戶名/密碼後有效負載。這返回一個true/false,而不是一個值。所以你永遠不會匹配一個數據庫中的記錄,你永遠不會匹配您的憑據檢查條件(匹配或""

試着這麼做

$username = isset($_POST['username']) ? $_POST['username'] : false; 

將設置$username等於如果未設置,則值$_POST['username']的值爲false。然後你可以用類似的方法測試它:

if (($username && $password) and ($username == $row['username'] and $password == $row['password'])) 

這應該讓你比你更近。

另外一點 - 你需要使用某種哈希機制來設置密碼。你得到它的方式看起來像你正在尋找一個明文密碼值(除非你在前端散列,我猜)。切勿將密碼作爲純文本存儲在數據庫中。

0

您在IF聲明中的最後一個條件是真的,密碼不是空的,因爲你的isset()將總是返回一個值,它將永遠是成功的。

$username = $_POST['username']; 
$password = $_POST['password']; 

//sql dtabase conn 
$conn = mysqli_connect("localhost","root","","login"); 
//query the dtabase for user 

$result = mysqli_query($conn, "select * from users where username = 
'$username' and password = '$password'")or die("failed to query database".mysqli_connect_error()); 

$row = mysqli_fetch_array ($result); 

if($row['username'] == $username && $row['password'] == $password){ 
    echo "Login success".$row['username']; 
}else{ 
    echo "Failed to login"; 
} 
相關問題