teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

修正

2020/05/02 13:07

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,8 +1,24 @@
1
1
  > 出る理由が知りたい
2
2
 
3
3
  Undefined variableは「未定義の変数」
4
- プログラミングは定義したものしか参照できません。
4
+ プログラミングは定義したものしか参照できません。(言語によっては自動的に定義される情報もあります)
5
5
 
6
6
  出席簿に「山本さん」がいなければそのクラスで「山本さん」を呼んでも返事がないですからね(例えはあまり良くないが)
7
7
 
8
- 参照予定の[変数の型](https://www.php.net/manual/ja/language.types.php)にあわせて初期化するのが最もベターな対応方法です。
8
+ 参照予定の[変数の型](https://www.php.net/manual/ja/language.types.php)にあわせて初期化するのが最もベターな対応方法です。
9
+
10
+ Undefined indexは「未定義のインデックス」
11
+ 下記が再現例です
12
+ ```php
13
+ <?php
14
+ $arr = ["a"=>"aa"];
15
+ echo $arr["a"];
16
+ echo $arr["b"];
17
+ ```
18
+ bは定義されてないので参照できません。
19
+
20
+ ただこれは「初期値を定義したらいい」とはならないケースも多いです。
21
+ 既に書いてある通りですが、今回はブラウザから単にアクセスしたときはGETで処理されるのでPOSTが定義されてないケースです。
22
+ $_POSTはそもそも[スーパーグローバル変数](https://www.php.net/manual/ja/language.variables.superglobals.php)で、自動的に定義されるものであるため、初期値を定義するものではありません。
23
+
24
+ [現在のリクエストがGETかPOSTかを判定する](https://www.javadrive.jp/php/sample/keijiban/index3.html)とか、[filter_input()](https://www.php.net/manual/ja/function.filter-input.php)でチェックするなどの対策が有効です。