这个PHP代码有什么问题,如何验证输入的密码?

时间:2018-06-10 11:20:12

标签: 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"];
    $query  = "SELECT PASSWORD FROM users WHERE username='$uname'";
    $result = $con->query($query);
    $dpass  = $result->fetch_assoc()['password'];

    if ($dpass==$lpass) 
    {
        echo "Passwords Match";
    }
}

我正在尝试匹配用户输入的密码和数据库中的密码,我不知道我使用的方式是否是获取密码的正确方法,任何帮助都将不胜感激。< / p>

3 个答案:

答案 0 :(得分:1)

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.';
    }
}

尝试这样...密码验证是一种更好的做法

答案 1 :(得分:1)

  

请阅读评论。纯文本密码真的不好   理念)。我只是在学习目的上回答你。不要在真实的现场制作中做到这一点!

但要继续你的代码。 $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 {}

我没有尝试过这个例子,但它应该有效。

了解更多相关信息:

答案 2 :(得分:0)

您可以使用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/

由于