PHP中的简单密码验证

时间:2015-05-01 14:32:03

标签: php passwords

我是PHP的初学者,正在尝试学习验证表单数据的基础知识。我想检查密码是否已设置,是否有进一步检查是否是正确的长度并且具有正确的字符等。

//check if set
if (empty($_POST['password']) {

    //further validate - check length, characters etc
    if (myFunction(($_POST['password'])) {
        //success
        $password = $_POST['password'];
    }
    else {
        $error = "Password must be at least 8 characters and contain at least one number";
    }
}
else {
    $error = "Password is required";
}

我遇到的问题是,如果用户输入" 0"作为密码,empty()函数将其视为空,并且他们会给出"密码是必需的"错误,而不是"密码必须有......"等错误。

使用isset()函数不会起作用,因为空字段会返回一个空字符串,这将被视为已设置。

目前我有一个解决方法,我还有一个条件来检查密码是否设置为" 0",但必须有更优雅的方式。

如果在另一个问题中已经涵盖了这一点,我会发现任何事情都没有道歉。谢谢

6 个答案:

答案 0 :(得分:4)

使用isset()(可能是strlen(trim()),而不是空()。虽然显示此代码的方式,但它只会处理一个空密码,并给输入密码的任何人一个错误。

if(isset($_POST['password']) && strlen(trim($_POST['password']))){
   //process
}else{
   //error 
}

答案 1 :(得分:0)

您可以使用is_null()功能或:

if ($_POST['password']==NULL)

答案 2 :(得分:0)

在使用$ _POST确保没有XSS脚本attacK之前,请不要忘记使用htmlspecialchars。 在您的情况下,Isset函数优于空。 另外,如果您希望用户获得至少8个字符并包含一个数字,请使用正则表达式,这样会好得多。

答案 3 :(得分:0)

在PHP中,

0被认为是空的。 (来源:http://php.net/empty

你可以通过检查它是否为空或者字符串中是否有任何内容,或者如果它完全为空来解决这个问题,如下所示:

if ((empty($_POST['password']) || ($_POST['password']=='') ||
 ($_POST['password']===null) ) {

  ...
 }

这应该涵盖你的所有基础,但是很容易检查出来的东西,而不是检查否定(我认为它更容易认知),例如确保输入密码,而不是检查是否< em>不进入

答案 4 :(得分:0)

如果您只是学习基础知识,请使用以下功能。但是,请记住在实时环境中,您需要正确地散列密码。请阅读此链接以获取更多信息:http://php.net/manual/en/faq.passwords.php

    function PasswordCheck($password_string)
    {
        $password_string = trim($password_string);
        if($password_string == '')
        {
            die("Password not entered");
        }
        elseif(strlen($password_string) < 8)
        {
        die("Password must be more than 8 characters in length");
        }
        elseif(!(preg_match('#[0-9]#', $password_string)))
        {
            die("Password must contain at least one number");
        }
        else
        {
        //Success, now process password
        }
    }

    $password = $_POST['password'];
    PasswordCheck($password);

答案 5 :(得分:0)

PHP类型比较表&#39;是你的朋友 http://php.net/manual/en/types.comparisons.php

检查密码是否已设定。     

// Check if it has been set and contains characters.
if (isset($_POST['password']) && strlen($_POST['password']) > 0)
{
    // Passed, now check for the right length, characters, etc.
    if (myFunction(($_POST['password']))
    {
        // Success.
        $password = $_POST['password'];
    } else {
        // Error.
        $error = "Password must be at least 8 characters and contain at least one number";
    }
} else {
    // Failed.
    $error = "Password is required";
}

如果您需要帮助您的myFunction()&#39;用于检查长度,字符等的功能,那么您还需要发布该代码。

希望这有帮助。