▼ GETリクエスト
GETリクエストを実現する方法にはまずリンクがある。
URL末尾に付加されている"?"以降はリクエストパラメータと言い、index.phpスクリプトが参照できる情報となる。
スクリプトでこの情報を参照するには、グローバルな配列$_GETを使って、$_GET['param1'], $_GET['param2']のようにすれば値を参照できる。
リンク以外のGETリクエストには以下のものがある。
これはsubmitボタンを押すとブラウザがactionに指定したindex.phpに対してリクエストを行う。
その際に、methodがgetリクエスト指定なのでURL末尾に「?param1=foo¶m2=bar」のような情報を自動で付加して送るので前述のリンクと同じ形式でリクエストしていることになる。
入力値に日本語のような非アスキーが含まれていると、ブラウザがURLエンコードも自動で行ってくれる。
▼ POSTリクエスト
GETリクエストで指定したmethodをpostに変えるだけでPOSTリクエストになります。
POSTリクエストではグローバル配列$_POSTに送信情報がセットされているので$_POST['param1']のように値を参照できます。
POSTリクエストの場合は、URL末尾への付加はありません。
ではどうやって情報を送ってるかと言うと、データ領域(メッセージボディなどとも言われる)を使っています。
ウェブを実現しているHTTPというプロトコルは、まず先に「ヘッダー領域」があって空行(ヘッダーの終わりを示す)がきて次に「データ領域」がくる形になります。
GETリクエストではURLと送信情報をひとまとめに扱うことができるのでヘッダー領域のみで完結できますが、POSTリクエストではデータ領域を使って情報を送っているので「Content-Length」ヘッダーで送信情報のバイト長を知らせています。
(実はPOSTでもURLに付加した情報を送れないこともない)
また、次に示すクッキーもヘッダー領域「Cookie」を使って送信しています。
▼ COOKIE
クッキーは、サーバ側で閲覧者のブラウザに情報を残したいときに使う仕組みです。
サーバ側から「Set-Cookie」ヘッダーを送ると、ブラウザはクッキー拒否設定でない限りこれを保存します。
そして期限内であればそのサーバにアクセスする度に常に「Cookie」ヘッダーを使って情報を送り返し続けます。
サーバ側に送られてくる情報は、前述した「GETリクエスト」か「POSTリクエスト」およびそれに付随する「COOKIE]があればこれも送られてくるといった感じになっています。
これらはPHPが呼ばれて実行される段階ではそれぞれ「$_GET」「$_POST」「$_COOKIE」というグローバル配列に格納されてる状態になっています。
そして特別にこの3つの配列データをすべて併せ持つ「$_REQUEST」というグローバル配列も用意されています。
▼ 同じ名前のデータ
PHPではこのような同じ名前のフォーム部品があった場合、
$_POST['foo'][0]および$_REQUEST['foo'][0]
$_POST['foo'][1]および$_REQUEST['foo'][1]
$_POST['foo']['bar']および$_REQUEST['foo']['bar']
のように二次元配列にセットされることになる。
▼ 入力データのチェック
外部からサーバに入ってきたデータは扱う前にすべてチェックする必要があります。
そうしないと頑丈なプログラム、屈強なシステム作りを実現できません。
例えば7桁郵便番号の入力を想定していた場合は半角数字が7バイト長で送られてきたかどうかチェックすることになります。
未定義の値を参照しようとすると設定によっては警告が表示されるのでisset()でチェックする例
▼ 文字コード変換
サーバ側で扱うデータの文字コードが想定したものかどうかチェックする必要があります。違っていれば文字コード変換を施します。