PHP で $_GET $_POST で Notice: Undefined index: が出る

以下のような記述が .php 内にあった場合、Notice: Undefined index: id in /Users/foo/public_html/hoge.php on line n と表示される。

$id = $_GET['id'];

これは、外部からの汚染された引数が渡されたことが原因なので、htmlspecialchars を使ってサニタイズすると警告が表示されなくなる。

$id = htmlspecialchars(@$_GET['id']);

上の方法では、@を使ってエラー出力を抑制しているだけ。

$_GET['id'] の値が初期化されていないためにエラーとなっているので、isset で初期化チェックをおこなう。

$id = isset($_GET['id']) ? htmlspecialchars($_GET['id']) : null;

修正:2011/6/1

コメント

id[]=a で配列としてパラメータが渡されてもhtmlspecialcharsでエラーが出ますね^^

$id = isset($_GET[‘id’]) ? htmlspecialchars((string) $_GET[‘id’]) : null;

とするか、

$id = isset($_GET[‘id’]) ? (is_array($_GET[‘id’]) ? null : htmlspecialchars($_GET[‘id’])) : null;

とするべきでしょう

コメント by 名無し | 2012年2月3日 - 14:05

[…] 参考:http://www.serendip.ws/archives/3217 古い記事へ […]

Top