地味にハマったのでご紹介。
今更感が半端ないですが。。。
<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" } }
なんで今まで遭遇しなかったんだろう・・・・?