[英]Getting a result from a query and returning a value? PHP & MySQLi
當我單擊“提交”時,輸入驗證有效,但是即使我正確輸入了用戶名和密碼(存儲在數據庫中的密碼也與輸入時完全一樣),但考慮到哈希值,但我得到的只是錯誤消息,我的組合不正確。
這是我的登錄腳本:
$username = $_POST['username'];
$password = $_POST['password'];
if (isset($_POST['submit']) === true) {
$login = login($username, $password);
if (empty($username) === true || empty($password) === true) {
$errors[] = "Please fill in all fields";
} elseif ($login === false) {
$errors[] = "That username and password combination is incorrect";
} else {
$_SESSION['login'] = $login;
echo 'Logged in';
}
}
這里是函數:
function login($username, $password) {
global $conn;
$query = "SELECT userId FROM users where userName = '$username' AND userPass = '$password'";
$result = mysqli_query($conn, $query);
$row_count = mysqli_num_rows($result);
if ($row_count >= 1) {
return $query['userId'];
} else {
return false;
}
}
我建議您嘗試做的第一件事是手動比較md5哈希密碼與表中列出的密碼。 如果您絕對確定它們相等,請使用來自toad或phpmyadmin的值運行手動查詢,然后查看是否得到結果。 如果不是這樣,問題可能出在查詢中。 如果得到結果,請檢查mysqli_num_rows函數,而不是返回用戶ID,而是在測試環境中回顯它。
您還做了什么調試工作?
您可以簡化它,但是,我建議您不要在沒有XSS清理的情況下接受用戶輸入。 特別是對於諸如登錄之類的表。
function login($username, $password) {
global $conn;
$password = md5($password);
$query = "SELECT userId FROM users where userName = '$username' AND userPass = '$password' LIMIT 1";
$result = mysqli_query($conn, $query);
$row_count = mysqli_num_rows($result);
if ($row_count >= 1) {
return $query['userId'];
} else {
return false;
}
}
我猜您的代碼需要一些修復,因為在查詢數據庫后檢查參數是否為空,然后在檢查用戶密碼是否正確之前獲取用戶ID。等等。
但首先,在行之后
$query = "SELECT userId FROM users where userName = '$username' AND userPass = '$password'";
你為什么不放
die($query);
運行頁面,復制結果,將其粘貼到phpMyAdmin查詢框中,然后查看結果是否符合您的需求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.