我已经开始学习 PHP 和 MySQL 一段时间了,但我仍然认为自己是初学者!
我创建了一个简单的注册表单,还编写了 PHP 代码来验证它……
我想知道是否有更好、更智能的方法来实现我的目标。
我的表单基于 5 个输入:username
、password
、repeat password
、email
,repeat 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;
}
}
非常感谢你的帮助!:)