ブログBlog

PHPにおいての必須エラーチェック時の条件文を検証してみました!

投稿日:2022年01月17日 テクノロジー

こんにちは、江宮です。

業務で、PHPの必須エラー処理の実装時に条件文の書き方によって、落し穴にハマってしまうときがあります。

毎度、PHP isset,empty,is_nullの違い早見表マニュアルをチェックしながら対応しています。

しかしネット上には誤情報もたくさんあり混乱するので、今日は実装時の注意点を整理して自分のスタンダードを作ることにしました。

まずフォームからのパラメータのチェックですが、処理としては2段階に分かれます。

  1. リクエスト自体が正常に送信されているかどうか
  2. 値が空配列、空文字、0であるかどうか


1.リクエスト自体が正常に送信されているかどうか
配列

【未送信(パラメータなし)の場合】
  • if($_POST) => False(NoticeError)
  • if(isset($_POST)) => False
  • if(!empty($_POST)) => False
  • if(!is_null($_POST)) => False(NoticeError)

【送信(パラメータあり)の場合】
  • if($_POST) => True
  • if(isset($_POST)) => True
  • if(!empty($_POST)) => True
  • if(!is_null($_POST)) => True


文字列

【未送信(パラメータなし)の場合】
  • if($_POST[‘id’]) => False(NoticeError)
  • if(isset($_POST[‘id’])) = >False
  • if(!empty($_POST[‘id’])) => False
  • if(!is_null($_POST[‘id’])) => False(NoticeError)

【送信(パラメータあり)の場合】
  • if($_POST[‘id’]) => True
  • if(isset($_POST[‘id’])) => True
  • if(!empty($_POST[‘id’])) => True
  • if(!is_null($_POST[‘id’])) => True


変数は初期化前に使用されるとNoticeErrorが発生するのでisset()とempty()を使います。

この二つは引数が定義済みであるか見てからその値を見るので、未送信時などでいきなり未定義変数を引数に取る場合でもNOTICEエラーを防止できます。


2.値が空配列、空文字、0であるかどうか

送信確認できたら、次に値を見に行きます。

空配列,空文字,0の扱いが条件の書き方によって異なるので、状況に応じて適宜使用します。

配列

【変数が空配列の場合】
  • if($_POST[‘checkBox’]) => False
  • if(isset($_POST[‘checkBox’])) => True
  • if(!empty($_POST[‘checkBox’])) => False
  • if(!is_null($_POST[‘checkBox’])) => True

【変数が空ではない配列の場合】
  • if($_POST[‘checkBox’]) => True
  • if(isset($_POST[‘checkBox’])) => True
  • if(!empty($_POST[‘checkBox’])) => True
  • if(!is_null($_POST[‘checkBox’])) => True

if文の中に直接入れるかemptyで判断できます。


文字列
【変数が空文字の場合($_POST[‘id’] === ”)】
  • if($_POST[‘id’]) => False
  • if(isset($_POST[‘id’])) => True
  • if(!empty($_POST[‘id’])) => False
  • if(!is_null($_POST[‘id’])) => True

【変数に0以外の値が入っている場合($_POST[‘id’] === ‘1’)】
  • if($_POST[‘id’]) => True
  • if(isset($_POST[‘id’])) => True
  • if(!empty($_POST[‘id’])) => True
  • if(!is_null($_POST[‘id’])) => True

if文の中に直接入れるかemptyで判断できます。


【変数が0の場合($_POST[‘id’] === ‘0’)】
  • if($_POST[‘id’]) => False
  • if(isset($_POST[‘id’])) => True
  • if(!empty($_POST[‘id’])) => False
  • if(!is_null($_POST[‘id’])) => True

【変数に空文字以外の値が入っている場合($_POST[‘id’] === ‘1’)】
  • if($_POST[‘id’]) => True
  • if(isset($_POST[‘id’])) => True
  • if(!empty($_POST[‘id’])) => True
  • if(!is_null($_POST[‘id’])) => True

if文の中に直接入れるかemptyで判断できます。

ただし空文字のときと同一の結果になるので、0を許容して必須エラーを出す場合には注意が必要です。


まとめ
パラメータが送信されているかの確認のみ

isset()のempty()のどちらか

チェックボックスなど配列の要素の存在確認時(必須エラー対策)

if($var)

if(!empty($var))

文字列の存在確認時(0許容時での必須エラー対策)

if($var === ”)

if($var && $var !== 0)

if(!empty($var) && $var !== 0)


以上、送信の有無と必須エラー(文字列は0許容)を合わせて最もシンプルに書くと、

配列時 => if(!empty($var))

文字列時 => if(!empty($var) && $var !== 0)

となりました!


参考サイト
マニュアル
PHP isset,empty,is_nullの違い早見表
PHPのissetと!is_nullは違うという話
変数に値がセットされているか/存在するかを確認する
PAGE TOP