地味にハマったのでご紹介。
今更感が半端ないですが。。。
<form action="./index.php?param1=value1" method="get">
こんなフォームで submit すると $_GET['param1'] が消えちゃうよっていうお話。
<html> <body> <form action="./index.php?param1=value1" method="get"> <input type="text" name="param2" value="value2"> <input type="submit" value="submit"> </form> <pre> <?php var_dump($_GET); ?> </pre> </body> </html>
送信!!
結果
array(1) {
["param2"]=>
string(6) "value2"
}
action に付けてた param1=value1 はどこかへ飛んでいってしまいました。
意外にこれってオレオレフレームワークで、
コントローラー名とアクション名を GET で渡してることって多いと思うんだ。
それでハマったんだけど・・・・。
手抜きしないでこうする。
<html> <body> <form action="./index.php" method="get"> <input type="text" name="param1" value="value1"> <input type="text" name="param2" value="value2"> <input type="submit" value="submit"> </form> <pre> <?php var_dump($_GET); ?> </pre> </body> </html>結果(当たり前)
array(2) {
["param1"]=>
string(6) "value1"
["param2"]=>
string(6) "value2"
}
それか method="post" にする。
<html>
<body>
<form action="./index.php?param1=value1" method="post">
<input type="text" name="param2" value="value2">
<input type="submit" value="submit">
</form>
<pre>
<?php
var_dump(array('GET' => $_GET, 'POST' => $_POST));
?>
</pre>
</body>
</html>
結果array(2) {
["GET"]=>
array(1) {
["param1"]=>
string(6) "value1"
}
["POST"]=>
array(1) {
["param2"]=>
string(6) "value2"
}
}
なんで今まで遭遇しなかったんだろう・・・・?