2012-01-26 31 views
1

我想做表单验证,但当我尝试打印出数组的内容时,出现错误它不输出任何内容。PHP数组输出不正确

$errors = array(); 

if (strlen($password) >= 6) { 
    array_push($errors, "Your password is not long enough! Must be over 6 characters!"); 
} 

if(count($errors) !== 0) { 
... 
} else { 
    echo "There is errors<br/>"; 
    foreach($errors as $er){ 
     echo $er . "<br/>"; 
    } 
} 

我得到的是“有错误”,所以我知道如果其他工作。

回答

2

我只是要纠正if的说法:

if(count($errors) === 0) { 
    // everything is okay 
} else { 
    echo "There are errors<br/>"; 
    foreach($errors as $er){ 
     echo $er . "<br/>"; 
    } 
} 

这样,当你的错误计数 0时,if的内容执行。当它不是0时,执行else的内容并打印错误。这与你所做的相反。 (我也纠正了一句话:它是“有错误”,而不是“有错误”:P)

此外,其他if是错误的,以及,它应该是相反的:

if (strlen($password) <= 6) { 

由于您需要检查密码是否为以下比6个字符。

+1

此外,您甚至不需要'count($ errors)',因为空数组将计算为'FALSE'。你可以做'if($ errors){echo'有错误'; }' – rdlowrey

1

它不应该是:

if (strlen($password) < 6) { 
    array_push($errors, ...); 

顺便说一句,你应该至少使用常数而不是magic numbers,例如,

define('MIN_PASSWORD_LENGTH', 6); 

// ... 

if (strlen($password) < MIN_PASSWORD_LENGTH) { 
    array_push($errors, "Your password is not long enough!" 
     . " Must be over ".MIN_PASSWORD_LENGTH." characters!"); 
} 

这样,如果您的最小所需长度发生变化,您只需更改一次即可。

+0

哦,是啊......谢谢! – jamcoupe

0

您的if语句已混乱。你正在检查错误,然后什么也不做,然后其他的就是显示错误的地方。试试这个:

if(count($errors) >0) { //there are errors 
    echo "There is errors<br/>"; 
    foreach($errors as $er){ 
     echo $er . "<br/>"; 
    } 
}else{ 
    //there are no errors 
} 

而且,你的密码长度应该比对,如果它太短<=6不大于或等于。