我正在爲我的網站創建一個登錄系統,但我沒有得到太多的運氣。我散列了這樣的密碼$pw = password_hash($pw, PASSWORD_BCRYPT, array('cost' => 14));
,我被告知必須使用password_verify檢查登錄表上的密碼,然後再次檢查,但我不明白我必須做什麼。有人可以請一步一步解釋我必須做什麼嗎?PHP登錄系統
GLOBAL $username;
GLOBAL $pw;
if (empty($_POST["username"])) {
echo"fill in username to sign in";
} else {
if (empty($_POST["pw"])) {
echo"fill in password to sign in";
} else {
//check if form is submitted
if (isset($_POST['signin'])) {
$username = mysqli_real_escape_string($conn, $_POST['username']);
$pw = mysqli_real_escape_string($conn, $_POST['pw']);
$valid = password_validate($password, $hash);
$sql = mysqli_query($conn, "SELECT * FROM users WHERE username = '" . $username. "' and pw = '" . $pw. "'");
if ($row = mysqli_fetch_array($sql)) {
// if insert checked as successful echo username and password saved successfully
echo "successfully logged in";
} else {
$errormsg = "Incorrect username or Password!!!";
}
}
}
}
功能是'password_verify()','不password_validate()'。另外,你從哪裏得到'$ hash'?你將變量定義爲'$ pw',但試圖用它作爲'$ password'。 – Qirel
你不會選擇'WHERE' PW是你的哈希.. password_hash每次都會創建一個新的鹽。不,您從數據庫中檢索散列並根據原始密碼輸入進行測試。 –
轉義用戶名和密碼會導致更改用戶輸入的值。使用準備的參數化查詢 – RiggsFolly