FORM の action の URI にクエリをつけたまま GET で送信できなかったのでなんでか調べてみた
あれ?タイトルわかりづらい?
要はこういうことです
1 <html> 2 3 <body> 4 <form method="GET" action="./form.html?key1=value1"> 5 <input type="text" name="key2" value="value2" /> 6 <input type="submit" value="test" /> 7 </form> 8 </body> 9 10 </html>
これでボタン押したときにクエリとして
- key1 : value1
- key2 : value2
が送られてきてほしいのです
しかし、結果として key2 しか送られてきません
...おい、key1 どこいった?
というわけでアクセスログを見てみると
::1 - - [25/Jul/2010:23:06:04 +0900] "GET /~xxx/form.html?key2=value2 HTTP/1.1" 200 191
となっています。はい、 key1 どっかに消えました
そこで以下のように GET, POST の両方を作って実験してみました
1 <html> 2 3 <body> 4 <form method="GET" action="./form.php?key1=value1"> 5 method : GET <br /> 6 <input type="text" name="key2" value="value2" /> 7 <input type="submit" value="test" /> 8 </form> 9 10 <form method="POST" action="./form.php?key1=value1"> 11 method : POST <br /> 12 <input type="text" name="key2" value="value2" /> 13 <input type="submit" value="test" /> 14 </form> 15 16 <pre> 17 $_GET : <?php var_dump($_GET); ?> 18 </pre> 19 20 <pre> 21 $_POST : <?php var_dump($_POST); ?> 22 </pre> 23 24 25 </body> 26 27 </html>
GET の結果
$_GET : array(1) { ["key2"]=> string(6) "value2" } $_POST : array(0) { }
POST の結果
$_GET : array(1) { ["key1"]=> string(6) "value1" } $_POST : array(1) { ["key2"]=> string(6) "value2" }
ここからわかる状況
- GET : action で指定した URL の ? 以下を無視している
- POST : action で指定した URL の通りに動作している
なんでこのようなことになっているのかは調べきれなかったので、また今度調べます
なんとなくブラウザの仕様なんじゃないかなーと思ったりもしました
(あれ?ブラウザの仕様なら HTML の定義のどっかに書いてあるのかな。。。でも見つけられんかった。。。
参考
http://labs.uechoco.com/blog/2007/11/htmlformactionget.html
http://chaichan.web.infoseek.co.jp/perlnote/perlnote2010-05-31.htm