繁体   English   中英

更智能的php登录表单验证

[英]smarter php login form validation

我已经开始学习PHP和MySQL了一段时间,但我仍然认为自己是一个初学者!
我创建了一个简单的注册表单,还编写了PHP代码对其进行验证。
我想知道是否有更好,更聪明的方法来实现我的目标。
我的表单基于5个输入: usernamepasswordrepeat passwordemailrepeat email并且它通过POST发送,它们的内容和一个按钮的值。 执行提交时,它必须检查以下条件:

  • 如果所有输入都为空,则显示错误“所有字段为空”
  • 如果一个或多个输入(但不是全部)为空,则显示错误“某些字段为空”
  • username长度不能超过20个字符
  • passwordrepeat password必须相等
  • 密码必须在8到20个字符之间
  • emailrepeat email必须是有效的电子邮件,并且必须相等
  • 显示发生错误的错误消息

我写了这个函数(它在一个类中),它可以完成我上面说的所有操作,但是我可以改进它以减少重复的代码吗? 还有其他PHP函数可用于此吗? 最后,我的代码有多安全?

就这个!

public function processRegisterInfo($POSTArray = array())
{   
    if (count(array_filter($POSTArray)) > 1) // button don't have to be counted
    {
        if (count(array_filter($POSTArray)) < 6)
        {
            $this->errorMsg = "Some fields are empty";
            return FALSE;
        }
        else
        {
            $username = $POSTArray["username"];
            $password = $POSTArray["password"];
            $repPassword = $POSTArray["repPassword"];
            $email = $POSTArray["email"];
            $repEmail = $POSTArray["repEmail"];

            $isValid = TRUE;

            // Checking username length
            if (strlen($username) > 20)
            {
                $this->errorMsg .= " Username too long.";
                $isValid = FALSE;
            }

            // Checking password length and equality
            if (strcmp($password, $repPassword) == 0)
            {
                if (strlen($password) < 8)
                {
                    $this->errorMsg .= " Password must be at least 8 characters.";
                    $isValid = FALSE;
                }
                else if (strlen($password) > 20)
                {
                    $this->errorMsg .= " Password must be max 20 characters long.";
                    $isValid = FALSE;
                }
            }
            else
            {
                $this->errorMsg .= " Passwords don't match.";
                $isValid = FALSE;
            }

            // Checking email validation and equality
            if (strcmp($email, $repEmail) == 0)
            {
                if (!filter_var($email, FILTER_VALIDATE_EMAIL))
                {
                    $this->errorMsg .= " Email provided is not valid.";
                    $isValid = FALSE;
                }
            }
            else
            {
                $this->errorMsg .= " Emails don't match.";
                $isValid = FALSE;
            }

            if (isset($this->errorMsg) && !empty($this->errorMsg))
                $this->errorMsg = substr($this->errorMsg, 1);

            return $isValid;
        }
    }
    else
    {
        $this->errorMsg = "All fields are empty";
        return FALSE;
    }
}

非常感谢你的帮助! :)

如果您只能使用php,那将是我想得到的。 这些检查可以通过Jquery(javasript)来执行。 使用jquery的优点是,您不必首先提交它,并且可以轻松标记哪个字段的值错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM