我正在嘗試使用 HTML、PHP 和 SQL 開發(fā)登錄表單。由于我是 PHP 的新手,所以我一直在絞盡腦汁想弄清楚我的問題是什么以及如何解決它,所以我希望得到一些幫助。我想要做的是檢查用戶在 HTML 登錄表單上的輸入(在本例中為密碼)是否與存儲(chǔ)在數(shù)據(jù)庫中的散列密碼相匹配。但是,我目前遇到一個(gè)問題,它沒有這樣做。代碼應(yīng)驗(yàn)證密碼,如果密碼正確,則應(yīng)回顯“密碼和用戶名匹配”,否則應(yīng)回顯“密碼不正確”,但代碼不會(huì)回顯任何內(nèi)容。這是我試過的:使用用戶名獲取密碼我正在使用 PHP 的password_hash插件來散列和驗(yàn)證用戶的密碼。所以我的問題是,如何使用存儲(chǔ)在數(shù)據(jù)庫中的散列密碼安全地驗(yàn)證用戶的輸入(密碼)?這是PHP代碼:if($_SERVER["REQUEST_METHOD"] == "POST") { //declare variables and set values to null $username = $pass = ""; $username = $_POST['username']; $pass = $_POST['pass']; //check if username exists $stmt = $conn->prepare("SELECT userName FROM userDetails WHERE userName=?"); $stmt->bind_param("s", $prepname); $prepname = $username; $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { //if username exists, check if password is linked to user echo "user exists"; $stmt = "SELECT userPass FROM userDetails WHERE userName=?"; $stmt->bind_param("s", $prepname); $prepname = $username; $hashpass = $stmt->execute(); $stmt->bind_result($hashpass); $stmt->fetch(); if (password_verify($pass, $hashpass)) { echo "password and username match"; } else { echo "incorrect password"; } } else { echo "That user does not exist!"; return false; }}編輯:感謝@Jovi,我已經(jīng)修復(fù)了之前的錯(cuò)誤,但是我現(xiàn)在收到了一個(gè)新錯(cuò)誤:Warning: Illegal string offset 'userPass' in /home/toeaimc2/public_html/php/pages/login.php on line 75編輯: @Jovi 現(xiàn)在已經(jīng)解決了這個(gè)問題!感謝大家的幫助!
1 回答

慕田峪4524236
TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
您bind_param
在字符串上調(diào)用該方法,它應(yīng)該是一個(gè)語句對(duì)象。
您缺少為提取密碼的查詢創(chuàng)建準(zhǔn)備好的語句對(duì)象的方法調(diào)用:
$stmt = $conn->prepare("SELECT userPass FROM userDetails WHERE userName=?"); $stmt->bind_param("s", $prepname);
- 1 回答
- 0 關(guān)注
- 101 瀏覽
添加回答
舉報(bào)
0/150
提交
取消