PHPでプログラミングをする人の10人中12人が遭遇するエラー Notice: Undefined index の原因と解決方法について解説していきます。
Notice: Undefined index の意味
注意: 未定義の配列の要素やでという意味です。
例えば、$_POST['hoge']
という変数を扱おうとしているけど、hoge
なんて知らんでと言われているわけです。
ただの注意なので、このエラーを放置してもプログラムは動きます。エラーを非表示にして見て見ぬ振りをするのもアリです。でも私は解決したいです。真面目なので。
Notice: Undefined index の原因
フォームの入力値を受け取るようなプログラムで、初回アクセスとフォーム送信後のアクセスの処理の切り分けができていない場合によく発生します。初回アクセスでは$_POST['hoge']
が定義されていないからエラーが発生します。
他に、配列のキーの記述ミスもあるでしょうね。これはもうちゃんと書け。
Notice: Undefined index の解決方法
フォーム送信前後の処理の切り分けのしかたを3種類解説します。特に3つ目がオシャレなので最後まで読んでね。
isset() を使う方法
定義されていないことをグチグチ言われるならば定義されているかどうかをチェックする関数isset()
を使えばいいじゃないかということになります。
if文でやる場合
if(isset($_POST['hoge'])){
echo 'フォームは送信されたよ';
}
else{
echo 'フォームは送信されてないよ';
}
三項演算子でやる場合
$msg = isset($_POST['hoge']) ? 'フォームは送信されたよ' : 'フォームは送信されてないよ';
echo $msg;
empty() を使う方法
特定の要素ではなくて$_POST
自体が空かどうかをチェックする方法もあります。関数empty()
を使います。
if文でやる場合
if(empty($_POST)){
echo 'フォームは送信されてないよ';
}
else{
echo 'フォームは送信されたよ';
}
三項演算子でやる場合
$msg = empty($_POST) ? 'フォームは送信されてないよ' : 'フォームは送信されたよ';
echo $msg;
ダメなんです。$_POST
はPHPの定義済み変数です。フォームから送信されたデータを受け取る前から、あらかじめ定義されています。なので、定義されているかどうかを判定するisset()
関数を使っても結果は常にtrue
です。
中身が空かどうかを判定するempty()
を使いましょう。
filter_input_array() を使う方法
filter_input_array()
は外部から受け取った変数をフィルタリングする関数です。入力値の配列が得られなかった場合にnull
を返す性質を利用します。
if文でやる場合
if(filter_input_array(INPUT_POST) == null){
echo 'フォームは送信されてないよ';
}
else{
echo 'フォームは送信されたよ';
}
三項演算子でやる場合
$msg = filter_input_array(INPUT_POST) == null ? 'フォームは送信されてないよ' : 'フォームは送信されたよ';
echo $msg;
この方法のオシャレなところは、filter_input_array()
に第2引数を指定すれば受け取ったデータのバリデーションもできちゃうところです。というか、本来そのための関数です。
以上、エラー撲滅委員会からお届けしました。
でわでわ
プログラミングの独学に行き詰まっていませんか?誰かに相談したい、もっと効率よく学びたいなら、プログラミングスクールを検討してみてください。
コメント