在开发登录部分时,我收到了错误。
结果总是显示错误的声明。这段代码有什么问题
任何人都可以通过“preg_match”指导我,Wolud喜欢详细了解preg_match。
代码是:
if (isset($_POST['submit']))
{
if (preg_match('%^[A-Za-z0-9]\S{8,20}$%', stripslashes(trim($_POST['userid']))))
{
$u = $_POST['userid'];
echo $u.'<br />';
}
else
{
$u = FALSE;
echo '<p><font color="red" size="+1">Please enter a valid User ID!</font></p>';
}
if (preg_match ('%^[A-Za-z0-9]\S{8,20}$%', stripslashes(trim($_POST['password']))))
{
$p =$_POST['password'];
$p=sha1($p);
echo $p;
}
else
{
$p = FALSE;
echo '<p><font color="red" size="+1">Please enter a valid Password!</font></p>';
}
}
答案 0 :(得分:3)
在您的用户名验证器中,您只允许使用一个字符。将一个长度说明符放在结束括号后面,就像在密码验证器中一样。
为什么要限制密码中允许的字符?用户应该能够使用他想要的任何特殊字符,并且您也不应该限制最大长度。
答案 1 :(得分:2)
%^ [A-ZA-Z0-9] \ S {8,20} $%
意思是:
A-Z或a-z中的1或0-9 \ s
的8到20我怀疑那是你的意思吗?
也许在[]
中尝试\ S.答案 2 :(得分:2)
您可能想要以下内容:
<?php
if( isset( $_POST['submit'] ) ){
# An array to capture and hold errors - makes testing for, and displaying them
# easier down the track.
$errors = array();
# First Sanitising of the Form Data
$P = array_map( 'trim' , $_POST );
# User ID Check
if( !isset( $P['userid'] ) || $P['userid']=='' ){
$errors['userid'] = 'Please enter your desired User ID of between 8 and 20 characters/digits (no spaces)';
}elseif( !preg_match( '/[a-z0-9]{8,20}/i' , $P['userid'] ) ){
$errors['userid'] = 'Your User ID must contain between 8 and 20 characters/digits (no spaces)';
}
# Password Check
if( !isset( $P['password'] ) || $P['password']=='' ){
$errors['password'] = 'Please enter a password of between 8 and 20 characters/digits (no spaces)';
}elseif( !preg_match( '/[a-z0-9]{8,20}/i' , $P['userid'] ) ){
$errors['password'] = 'Your Password must contain between 8 and 20 characters/digits (no spaces)';
}
}
....
?><form>
User ID:
<?php echo ( isset( $errors['userid'] ) ? '<p><font color="red" size="+1">'.$errors['userid'].'</font></p>' : '' ); ?>
<input type="text" name="userid" value="<?php echo ( isset( $P['userid'] ) ? $P['userid'] : '' ); ?>" /><br>
Password:
<?php echo ( isset( $errors['password'] ) ? '<p><font color="red" size="+1">'.$errors['password'].'</font></p>' : '' ); ?>
<input type="password" name="password" /><br>
以上将需要一个UserID和密码,每个都在8到20个字符之间(A到Z或0到9)。 如果提交表单并发现验证测试失败,则表单将显示在无效字段附近的错误消息。它还包括已提交的用户名(因此用户可以根据需要进行编辑),但不包括密码(因为通常不会这样做)。
进行一些Google搜索PHP正则表达式(有很多教程和网站可以帮助您了解更多信息)。
还要看看MD5和SHA-1散列系统,在将密码存储到数据库时应该始终使用它们 - 否则,像索尼一样,如果有人危及您的系统,他们可以看到每个人(可能是重复使用的)密码并可能妥协其他网站上的其他帐户。 (不酷。)