⚠️

【エラー記録】count()のエラー

2024/06/28に公開

こんにちは、テリスです
countのエラーが出たので解決方法をメモしておきます。

今回のエラーはこちらです!

count():Parameter must be an array or an object that implements Countablein【ファイル】on line 14

・・・
function validate($a)
{
    $errors = [];

    if (!strlen($a['name'])) {
        $errors = '名前を入力してください';
    }
if (!strlen($a['住所'])) {
        $errors = '住所を入力してください';
    }
}
$errors = validate($a);

if (!count($errors)) {
    $link = dbConnect();
    createReview($link, $a);
    mysqli_close($link);
    header("Location: example.php");
}
・・・

上記のようなコードを書いたところ
count():Parameter must be an array or an object that implements Countable
このエラーが出ました。
エラーの内容を見てみると(英語苦手なので翻訳が間違っていたらすいません🙇)、
エラー: count()は引数は配列か数えられるオブジェクトにしなければならない
とあります。

14行目にエラーが出ているみたいなので確認すると、
!count($errors)
if文の中身がこのようになっていて、おそらく$errorsが原因かと考えられます。

そこで、少し戻ると
$errors = validate($a);
とあるためvalidate($a)が配列かオブジェクトになっていない可能性があります。

validate関数の中身を確認すると、6行目と9行目が$errorsに代入していることがわかります。
$errorsに代入しても配列にはならないため、下記のように訂正しました。

・・・
function validate($a)
{
    $errors = [];

    if (!strlen($a['name'])) {
        $errors['name'] = '名前を入力してください';
    }
if (!strlen($a['address'])) {
        $errors['address'] = '住所を入力してください';
    }
}
$errors = validate($a);

if (!count($errors)) {
    $link = dbConnect();
    createReview($link, $a);
    mysqli_close($link);
    header("Location: example.php");
}
・・・

これでバリデーション処理をすることができました。

Discussion