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 ))) {