2012-01-26 10 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/>"; 
    } 
} 

"エラーがあります"ということは、if elseが動作していることを知っています。

答えて

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

さらに、空の配列は 'FALSE'と評価されるので、' count($ errors) 'は必要ありません。あなたは '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ステートメントが正しく処理されません。エラーをチェックしてから何もしないと、エラーが表示されている場所がelseになります。これを試してみてください:

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ない以上でなければなりません。

関連する問題