我是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",但必须有更优雅的方式。
如果在另一个问题中已经涵盖了这一点,我会发现任何事情都没有道歉。谢谢
答案 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)
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;用于检查长度,字符等的功能,那么您还需要发布该代码。
希望这有帮助。