PHPのスーパーグローバル$_REQUESTは$_POSTと$_GETのどちらが優先されるのか?

2020年10月18日

PHP テクノロジー プログラミング

eyecatch プログラムできるけど、言語仕様は知らないことがまだまだある、ユゲタです。 PHPを覚えたての頃、$_POSTと$_GETよりも、$_REQUESTとして使ったほうがめんどくさくなくて便利じゃん!!!と、考えて仕事で使いまくっていたんですが、GETクエリとPOSTリクエストは、きちんと分けて使ったほうが、効率的なデータ送信ができるという事を理解して、今ではあまり使っていません。

リファレンスページで知った$_COOKIEの存在

https://www.php.net/manual/ja/reserved.variables.request.php こちらのPHPリファレンスページに書かれている内容では、$_POSTと$_GETと$_COOKIEが、$_REQUESTとして集約されるという事だったんだが、$_COOKIEの存在を気にしたことがなかった!!! あまりcookieを多様するwebページは作らない主義なのだが、もしkeyがかぶっていたら、とんでもないトラブルになっていただろう・・・お〜こわ!

デフォルトの優先順位の確認

とりあえず、$_POSTと$_GETで同じkeyでリクエストした場合に、どちらが優先されるのかを確認しておく。 ただし、これは、php設定で、優先順位を切り替えられるとの事なので、あくまでデフォルトの確認ということを理解して欲しい。 <h1>Check-request</h1> <div> $_REQUEST["key"] = <?=$_REQUEST["test"]?> </div> <div> <form name="form1" method="post"> <input type="text" name="test" value="<?=$_REQUEST["test"]?>"> <button type="submit">送信</button> </form> </div> チェックするプログラムは上記のものを用意した。 まず、アクセスしてみる。 http://localhost/check.php クエリが何もない状態では、以下の通り。 次にGETクエリを付けて表示 http://localhost/check.php?test=aaa ちゃんと、"aaa"が表示されているのが確認できた。 次に、この状態で、POSTに文字を入れて送信してみる。 とりあえず、用意されているinputタグにGETクエリと違う文字を入力。 送信すると・・・ おお!、POST > GETという優先順位が確認できた。 なんとなく想像どおりだ。 多分Cookieが入った場合は、 POST > GET > COOKIE なのだろうということも容易に想像できる。 こういう特性を理解しておかないと、知らずに使ってトラブったときは、プログラマーの責任ですからね。 「知らないは、罪」という話でした。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。