Php 用于验证用户名和密码不起作用的函数
可能重复:Php 用于验证用户名和密码不起作用的函数,php,validation,if-statement,Php,Validation,If Statement,可能重复: 在我的表单页面上,我试图让它只接受我的用户名和密码的字母数字字符,并要求它们是6到15个字符。当我输入无效数据时,它会将其插入数据库,而不是抛出我在CheckAlNum函数中定义的用户错误 functions.php function checkAlNum($whichField) { if (preg_match('/[A-Za-z0-9]+/', $_POST[$whichField])){ if ( (!count(strlen($whichFiel
在我的表单页面上,我试图让它只接受我的用户名和密码的字母数字字符,并要求它们是6到15个字符。当我输入无效数据时,它会将其插入数据库,而不是抛出我在CheckAlNum函数中定义的用户错误 functions.php
function checkAlNum($whichField)
{
if (preg_match('/[A-Za-z0-9]+/', $_POST[$whichField])){
if ( (!count(strlen($whichField) >= 6)) OR (!count(strlen($whichField) <= 15 ))) {
$message1 = '<p> Username and password must be between 6 and 15 characters </p>';
return user_error($message1);
}
else{
return true;
}
}
else {
$message = '<p>Username and password can only be numbers or letters</p>';
return user_error($message);
}
}
函数checkAlNum($whichField)
{
如果(预匹配('/[A-Za-z0-9]+/',$后[$whichField])){
如果(!count(strlen($whichField)>=6))或(!count(strlen($whichField)0){
//验证输入
$errorMessages=array();
//验证用户名
$item5=checkAlNum('username');
如果($item5!==true){
$errorMessages[]=$item5;
}
//验证密码
$item6=checkAlNum(“密码”);
如果($item6!==true){
$errorMessages[]=$item6;
}
//验证firstName和lastName
$item1=checkNameChars('firstName');
如果($item1!==true){
$errorMessages[]=$item1;
}
$item2=checkNameChars('lastName');
如果($item2!==true){
$errorMessages[]=$item2;
}
//验证办公室名称
$item3=支票办公室卡(“办公室”);
如果($item3!==true){
$errorMessages[]=$item3;
}
//验证电话号码
$item4=验证电话号码(“电话号码”);
如果($item4!==true){
$errorMessages[]=$item4;
}
//检查是否有任何故障
如果(计数($errorMessages)==0){
$newEmployee=新员工;
$newEmployee->insert();
}
else{//else,重新打印表单以及一些错误消息
回声“错误:”;
foreach($errorMessages作为$msg){
回声“”$msg.”;
}
}
}
?>
我试过处理checkAlNum函数的if-else语句和regex语句的嵌套(尽管我很确定regex是正确的)。也许我错过了一些非常愚蠢的东西?函数checkAlNum($whichField)
function checkAlNum($whichField)
{
if (preg_match('/^[a-z0-9]{6,15}$/i', $_POST[$whichField])) {
return true;
}
else {
$message = '<p>Username and password can only be numbers or letters, 6-15 characters long</p>';
return user_error($message);
}
}
{
if(preg_match('/^[a-z0-9]{6,15}$/i',$_POST[$whichField])){
返回true;
}
否则{
$message='用户名和密码只能是数字或字母,长度为6-15个字符;
返回用户错误($message);
}
}
如果没有
^
和$
锚,您的正则表达式只检查字段中是否有字母数字,而不是整个内容是否是字母数字。并将+
更改为{6,15}
在这里执行长度检查,因此您可以删除代码中的额外检查。我认为第二个if语句不正确。它应该是这样的:
if ( !( (!count(strlen($whichField) >= 6)) OR (!count(strlen($whichField) <= 15 )) ) ) {
// ... do something
}
if(!((!count(strlen($whichField)>=6))或(!count(strlen($whichField)Barmar的答案是最好的。但是如果您想保留if语句来检查字符串长度,您需要删除count()
,因为您已经在使用strlen()
检查长度了
如果(!(strlen($whichField)>=6))或者(!(strlen($whichField))顺便说一下,我确实需要functions.php格式的类。您可以将长度检查合并到正则表达式中,例如:[A-Za-z0-9]{6,15}
谢谢大家!Barmar的回答很有魅力。我会记住这些提示。我之所以使用if语句,首先是因为我不擅长正则表达式,并认为这对我的经验水平来说是一个更容易的修复方法。
if ( !( (!count(strlen($whichField) >= 6)) OR (!count(strlen($whichField) <= 15 )) ) ) {
// ... do something
}
if ( (!(strlen($whichField) >= 6)) OR (!(strlen($whichField) <= 15 ))) {