【发布时间】:2013-10-21 10:34:44
【问题描述】:
这是我的 php 验证码!
<?php //------------------------------------------------------------------------------>PHP VALIDATION
$user="";
$pass="";
$nameErr="";
$passErr="";
//$pattern='/^[a-zA-Z0-9@_ ]*$/';
if($_SERVER['REQUEST_METHOD']=='POST')
{
if(empty($_POST['uname']))
{
$nameErr='Enter Your Name!';
}
else
{
$user = test_input($_POST['uname']);
if(!preg_match('/^[a-zA-Z0-9@_]*$/',$user))
{
$nameErr=' Re-Enter Your Name! Format Inccorrect!( only alpha, numbers,@_ are allowed)';
}
}
if(empty($_POST['pas']))
{
$passErr='Enter Your Password!';
}
else
{
$user = test_input($_POST['pas']);
if(!preg_match('/^[a-zA-Z0-9@_]*$/',$pass))
{
$passErr='Invalid Format! Re-Enter Password!';
}
}
}
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
HTML:
<html>
<body>
<div id='shw'><?php echo $user;?></div>
<fieldset id='fld'>
<form method='post' name='f1' action='<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>'>
<table>
<tr>
<td>
User Name:<input type='text' id='uname' name='uname' class='uname' placeholder='USERNAME' autocomplete='off' autofocus maxlength='25'><span class='error'>*</span>
Password:<input type='password' id='pass' class='pass' name='pas' placeholder='PASSWORD' autocomplete='off'>
<input type='submit' name='submit' id='loggin' value='LOGIN' class='login' onclick='val()'>
</td>
</tr>
</table>
</form>
</fieldset>
<div class='errormsg' id='errmsg'><?php echo $nameErr;?></div>
</div>
</body>
</html>
我在验证时遇到问题我想在提交后显示用户名。 问题是我的用户名如果其他运行良好,但它会跳过密码部分。我希望它也验证 pass 字段然后只显示用户名! 请帮忙!
【问题讨论】:
-
在检查的开头添加
var_dump($_POST);以查看发送的内容。只是一个提示,为他们的工作命名函数,因为 test_input 不进行测试;) -
你混合 post 和定义的变量,比如要求 empty($_POST['pas']) ,然后用 $user = test_input($_POST['pas']);但是在 preg_match 中检查 $pass,并且 $pass 在顶部被定义为非值 ""。
-
不需要清理密码,因为无论如何您都想使用适当的哈希函数来存储它,请参阅函数password_hash()。
-
为什么要限制密码格式?