[英]Whats wrong with this PHP code, how to validate the entered password?
require_once "require.php";
$con = new mysqli($hn,$un,$pas,$db);
if ($con->connect_error)
{
die("Unbale to connect to the Server");
}
if (isset($_POST["login"]))
{
$uname = $_POST["uname"];
$lpass = $_POST["lpass"];
$query = "SELECT PASSWORD FROM users WHERE username='$uname'";
$result = $con->query($query);
$dpass = $result->fetch_assoc()['password'];
if ($dpass==$lpass)
{
echo "Passwords Match";
}
}
我正在嘗試匹配用戶輸入的密碼和數據庫中輸入的密碼,我不知道我使用的方式是否是獲取密碼的正確方式,我們將不勝感激。
require_once "require.php";
$con = new mysqli($hn,$un,$pas,$db);
if ($con->connect_error)
{
die("Unbale to connect to the Server");
}
if (isset($_POST["login"]))
{
$uname = $_POST["uname"];
$lpass = $_POST["lpass"];
$query = "SELECT PASSWORD FROM users WHERE username='$uname'";
$result = $con->query($query);
$dpass = $result->fetch_assoc()['password'];
$newhash = password_hash($dpass, PASSWORD_DEFAULT);
if (password_verify($lpass, $newhash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
}
嘗試這樣...密碼驗證是一種更好的做法
請閱讀評論。 純文本密碼確實不是一個好主意)。 我只是出於學習目的回答您。 不要在實際的現場制作中這樣做!
但是繼續執行您的代碼。 $result->fetch_assoc()
返回一個數組。 因此,您必須遍歷它或正確解決它。 本示例期望查詢結果。 因此,您必須檢查是否有結果,否則會出現錯誤。
看一下查詢LIMIT 1
和$result->fetch_assoc()
,然后看$dpass[0]['password']
<?php
require_once "require.php";
$con = new mysqli($hn, $un, $pas, $db);
if ($con->connect_error) {
die("Unbale to connect to the Server");
}
if (isset($_POST["login"])) {
$uname = $_POST["uname"];
$lpass = $_POST["lpass"];
// LIMIT1
$query = "SELECT passwordFROM users WHERE username='$uname' LIMIT 1";
$result = $con->query($query);
// fetch all
$dpass = $result->fetch_assoc();
// Check there is 1 result
if ($result->num_rows == 1) {
// check your password
if ($dpass == $lpass[0]['password']) {
echo "Passwords Match";
} else {
echo "Wrong Password";
}
// No User match
} else {
echo "No User foound";
}
} else {}
我沒有嘗試該示例,但它應該可以工作。
進一步了解:
您可以使用password_hash()生成並可以使用password_verify()驗證密碼。
注意:始終養成對第三方的每個數據進行驗證,清理和轉義的習慣。 您可以從有關此主題的WordPress文章中獲取概念https://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data https://vip.wordpress.com/2011/10/13/key-differences-between-validation-and-sanitization/
謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.