0

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

  • 如果所有输入为空,则显示错误“所有字段为空”
  • 如果一个或多个输入(但不是全部)为空,则显示错误“某些字段为空”
  • username长度不得超过 20 个字符
  • password并且repeat password必须相等
  • 密码必须介于 8 到 20 个字符之间
  • email并且repeat 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;
    }
}

非常感谢你的帮助!:)

4

1 回答 1

0

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

于 2013-04-29T18:12:46.540 回答