
プログラムできるけど、言語仕様は知らないことがまだまだある、ユゲタです。
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
なのだろうということも容易に想像できる。
こういう特性を理解しておかないと、知らずに使ってトラブったときは、プログラマーの責任ですからね。
「知らないは、罪」という話でした。
0 件のコメント:
コメントを投稿