PHP登录-如果(空)$password不存在';我的代码不工作,为什么?

PHP登录-如果(空)$password不存在';我的代码不工作,为什么?,php,encryption,login,md5,Php,Encryption,Login,Md5,所以我在玩我的简单登录系统,有一件事我似乎不明白,为什么登录允许我创建一个只有用户名的帐户,并将此数据发送到我的数据库事件,尽管我指定了 if($_SERVER['REQUEST_METHOD'] == 'POST') { $username = mysql_real_escape_string($_POST['username']); $password = mysql_real_escape_string(md5($_POST['password'])); 及 当我删除转义字符串中的(m

所以我在玩我的简单登录系统,有一件事我似乎不明白,为什么登录允许我创建一个只有用户名的帐户,并将此数据发送到我的数据库事件,尽管我指定了

 if($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string(md5($_POST['password']));

当我删除转义字符串中的(md5)时,它会工作,但是没有加密,并且密码在数据库中可见。因此,反之亦然。有人看到我的错误或误解在哪里吗


快速总结:应该给出“您需要填写密码”但是,当我在字符串中使用md5解密时,它不会出现,但是当我删除它时,它允许我使用。
md5
将生成一个字符串,即使输入是空的。您需要直接从
$\u POST
检查原始输入。如果要验证输入,请在处理它之前始终进行检查,作为后续过程尽管原始输入是空的,但使用ssing(正如您在本例中所看到的)可能会导致非空变量。

空字符串仍然有MD5哈希,因此您可以正确检查密码是否等于某个值。

MD5将对任何内容进行编码,即使是空字符串。这将使变量成为“非空”


意思:首先检查空,然后对密码进行编码。

在分配md5之前,您可以检查字段是否为空-

if($_SERVER['REQUEST_METHOD'] == 'POST') 
{
    if (mysql_real_escape_string(empty($_POST['password']))) {
        // do nothing
    } 
    else 
    {
   `    $username = mysql_real_escape_string($_POST['username']);
        $password = mysql_real_escape_string(md5($_POST['password']));

        if(empty($username)) {
             echo("Du ma fylle inn et brukernavn!");
        } {
        if(empty($password)) {
             echo("Du ma fylle inn et passord!");
        } else {
        }
   }

}

不要用MD5散列密码。使用Bcrypt或pbkdf2。MD5是不够的。非常感谢你们所有人!修复了它,特别是感谢Kev和Femaref对它进行了更深入的研究。我收回了它,但实际上仍然无法修复它。我无法在某个地方放置一个结尾….>
if($_SERVER['REQUEST_METHOD'] == 'POST') 
{
    if (mysql_real_escape_string(empty($_POST['password']))) {
        // do nothing
    } 
    else 
    {
   `    $username = mysql_real_escape_string($_POST['username']);
        $password = mysql_real_escape_string(md5($_POST['password']));

        if(empty($username)) {
             echo("Du ma fylle inn et brukernavn!");
        } {
        if(empty($password)) {
             echo("Du ma fylle inn et passord!");
        } else {
        }
   }