URLパラメータとGETパラメータの関係とは(バージョンアップ版)
URLパラメータは、ブラウザのアドレス欄に表示されるURLの「?」以降の文字列のことです(たぶん)。
GETパラメータは、form要素のmethod属性に"get"と指定してサブミットした時にアドレス欄に表示されるURLの「?」以降の文字列のことです(たぶん)。
通常、form要素のmethod属性に"post"を指定して、action属性にURLパラメータを指定すると、サーバー側では、postのデータは標準入力で、URLパラメータは環境変数で取得することができます。
また、form要素のmethod属性に"get"を指定すると、サーバー側では、環境変数で取得することができます。
では、form要素のmethod属性に"get"を指定して、action属性にURLパラメータを指定すると、サーバー側では、どのようになると思いますか?
そう、URLパラメータもGETパラメータも単独では環境変数にセットされるのですが、この2つが重なったときは、GETパラメータとなり、URLパラメータは無視されるのです。
これ、IE6,IE7,Opera10,Firefox3で同じ結果になりました。
以下は、そのサンプルソースです。
◆ サンプルソース テストフォーム(test_get.cgi)
#!c:/perl/bin/perl.exe use strict; print <<"HERE1"; Content-type: text/html; charset=Shift_JIS <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>Test Form</title> </head> <body> <h1>Test Form</h1> <form method="get" action="test_get2.cgi?ID1=1&ID2=2" name="FM"> <p><input type="hidden" name="ID3" value="3"></p> <p><input type="hidden" name="ID4" value="4"></p> <p><input type="submit" value="実行"></p> </form> </body> </html> HERE1
◆ サンプルソース QUERY_STRING表示(test_get2.cgi)
#!c:/perl/bin/perl.exe use strict; # 画面出力 print <<"HERE1"; Content-type: text/html; charset=Shift_JIS <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>QUERY_STRING</title> </head> <body> <h1>QUERY_STRING</h1> <p>---------->$ENV{'QUERY_STRING'}<--------</p> </body> </html> HERE1
また、GETパラメータだとhiddenにしてもアドレス欄に表示されてしまいますね(hiddenじゃない!)。
セキュリティ的には、form要素のmethod属性は"post"の方が安全ですね!