0

在我的函数文件中,我有以下代码:

function password($password, $dbpassword = false){
    if($dbpassword){
        $password = mysqli_real_escape_string($GLOBALS["mysqli"], $_POST["$dbpassword"]);
        if(empty($password))
            $password = mysqli_real_escape_string($GLOBALS["mysqli"], $_GET["$dbpassword"]);
            if(empty($password))
                return false;
    }
    $hasher = new PasswordHash(8, false);
    if (strlen($password) > 72)
        return false;
    else{
        if($dbpassword){
            $check = $hasher->CheckPassword($password, $dbpassword);
            if ($check)
                return true;
            else
                return false;
        }else{
            $hash = $hasher->HashPassword($password);
            if (strlen($hash) >= 20) 
                return $hash;
            else
                return false;
        }
    }
}

在另一个文件中(包含函数和 PHPASS php 文件)我有这个代码:

$pass = password("Vlad");
if(password("Vlad", $pass)){
    echo 11;
}else{
    echo 22;
}

它返回 22。这是为什么呢?

4

1 回答 1

0

当您password使用第二个变量 not 调用函数时,除非在调用页面时设置了or变量NULL,否则它将返回。falsePOSTGET

该名称POSTGET变量的名称必须是您第一次使用函数时散列的密码的密码散列:

$_POST["$dbpassword"]

或者

$_GET["$dbpassword"]

我怀疑表单中表单字段的名称会不断变化,这可以解释为什么该函数总是false在您第二次调用它时返回。

于 2013-12-27T18:50:44.213 回答