読みものJournal
- Date :
- Category :
- Share :

こんにちは、CTOの奥田です。
先日、Twitterでお誘いをいただき「関西のイケてる人たち」の飲み会に参加させていただきました。
参加メンバーの方は現場でバリバリやっておられる方や、フリーランスの方、経営者の方などすごい方ばかりで非常に恐縮でしたが、すごく良い刺激をいただきました。
「奥田さんのブログ見ましたよ」って言っていただき嬉しい限りです。
神戸というローカルな場所ではありますがこれからもコツコツとより良いモノを作っていきたいと思います。
さて今回はPHPの内容というよりはどちらかというとHTTPの仕様のお話になります。
ただ、PHPとは切っても切れない関係ですので必ず覚えておくと今後の学習にも役立つと思います。
Table of contents
GETとPOST
HTTPとは、データをサーバとクライアント間で送受信するために用いるプロトコルでそのリクエスト方法には決まりがあります。 様々なリクエストの決まりの中のひとつである、リクエストメソッドの種類として「GETとPOST」があります。 HTTPのリクエストメソッドは、その用途によってGETとPOSTで使い分ける必要があります。(PUTやDELETEなどもありますが本記事では割愛します。)
GET
パラメータのない通常のリクエストもGETで行っており、普段私達がWebを閲覧するときにもGETを使ってサーバにリクエストしています。 GETでは値を指定してリクエストすることができます。 指定方法は以下のようにURLの末尾に[?]のあとに[name=value]の方式で値を指定し、[&]でつなぐことで複数の値を指定することができます。 [?]より後の文字をクエリストリングと呼びます。
<a href="/path/to/send/?name1=value1&name2=value2"></a>formでの送信方法はmethodにgetを指定することでGETリクエストにて送信可能です。
※デフォルトがGETのため、指定しない場合でもGETリクエストになります。
<form action="/path/to/send/" method="get">
<input type="hidden" name="name1" value="value1">
<input type="hidden" name="name2" value="value2">
<input type="submit" value="Submit">
</form>PHPではGETリクエストで送信された値はスーパーグローバル変数[$_GET]に格納され、以下のようにして値を受け取ることができます。
<?php
var_dump($_GET['name1']); // value1
?>POST
通常のPOSTリクエストはフォームからの送信がメインです。 データをPOSTリクエストで送信したい場合はmethodにpostを指定する必要があります。
<form action="/path/to/send/" method="post">
<input type="hidden" name="name1" value="value1">
<input type="hidden" name="name2" value="value2">
<input type="submit" value="Submit">
</form>PHPではPOSTリクエストで送信された値はスーパーグローバル変数[$_POST]に格納され、以下のようにして値を受け取ることができます。
<?php
var_dump($_POST['name1']); // value1
?>使い方の違い
「GETとPOST」2つの大きな違いは値が見えるか見えないかです。 GETはURLの末尾が変更され、他人にもどういった値を送信しているかを見ることができます。 2つの使い分けは基本的にはURLに状態を指定し、ブックマークできるようにするかどうかです。 キーワード検索などはGETリクエストで検索したキーワードをブックマークすることができます。 逆にログインフォームやお問い合わせフォームなど個人情報を入力するフォームはPOSTを使って情報を見えないようにする必要があります。
注意すべきこと
スーパーグローバル変数$_GETや$_POSTを使用してPHPで出力する際は注意が必要です。 HTML内で特殊な意味を持つ文字列は必ずエスケープしなければなりません。 ユーザーから入力された値に対してこの処理を施していない場合、クロスサイトスクリプティング(XSS)に関する脆弱性が発生してしまいます。 PHPではこれらの問題に対してhtmlspecialchars関数によってエスケープ処理を施すことで回避できます。
<?php
$value1 = htmlspecialchars($_POST['value1']);
echo $value1;
?>さいごに
いかがだったでしょうか? 今回はHTMLとPHPを扱う上で必須なGETとPOSTについてご説明いたしました。 皆様の参考になれば幸いでございます。
