ブログBlog
PHPにおいての必須エラーチェック時の条件文を検証してみました!
投稿日:2022年01月17日 テクノロジー
こんにちは、江宮です。 業務で、PHPの必須エラー処理の実装時に条件文の書き方によって、落し穴にハマってしまうときがあります。 毎度、PHP isset,empty,is_nullの違い早見表やマニュアルをチェックしながら対応しています。 しかしネット上には誤情報もたくさんあり混乱するので、今日は実装時の注意点を整理して自分のスタンダードを作ることにしました。 まずフォームからのパラメータのチェックですが、処理としては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
文字列
【変数が空文字の場合($_POST[‘id’] === ”)】- if($_POST[‘id’]) => False
- if(isset($_POST[‘id’])) => True
- if(!empty($_POST[‘id’])) => False
- if(!is_null($_POST[‘id’])) => True
- if($_POST[‘id’]) => True
- if(isset($_POST[‘id’])) => True
- if(!empty($_POST[‘id’])) => True
- if(!is_null($_POST[‘id’])) => True
【変数が0の場合($_POST[‘id’] === ‘0’)】
- if($_POST[‘id’]) => False
- if(isset($_POST[‘id’])) => True
- if(!empty($_POST[‘id’])) => False
- if(!is_null($_POST[‘id’])) => True
- if($_POST[‘id’]) => True
- if(isset($_POST[‘id’])) => True
- if(!empty($_POST[‘id’])) => True
- if(!is_null($_POST[‘id’])) => True
まとめ
パラメータが送信されているかの確認のみ
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は違うという話
変数に値がセットされているか/存在するかを確認する