GETとPOSTの違い
「inquiry.html」では、次のように<form>
タグを記述していました。
<form name="inquiry_form" action="complete.php" method="POST">
上記ソースコードの、method="POST"
の部分に関して説明をします。ここにはGET
またはPOST
を指定できます。GET
とPOST
は、主に次のような違いがあります。
GET
はURLの後ろに送信データを付加するものPOST
はURLとは別に、独立した情報として送信データを付加するもの
では、実際に違いを確認してみましょう。「inquiry.html」を開き、POST
の部分をGET
に書き換え、それぞれの場合で送信ボタンを押して表示された結果画面のURLを比較してみてください。
<form name="inquiry_form" action="complete.php" method="POST">
<form name="inquiry_form" action="complete.php" method="GET">
氏名欄に「Masato Oie」と入力した場合、GET
では、次の図のようにURLの「complete.php
」の後に?
マークで始まる文字列が付加されています。
simei=Masato+Oie
の部分に気付いたかと思います。このように、テキストボックスなどの入力値を、URLに付加して送信するのがGET
です。
その後、check1=%8C%9F%8D..
と文字化けのように続いていますが、これは日本語をそのまま送受信することができないため、「URLエンコード」と呼ばれる文字の変換を行っています。エンコードされた文字列を元の日本語に復元することを「URLデコード」と言います。このURLエンコードはamazonなどでも使用されています。例えば、下記URLをInternet Explorerのアドレスバーにコピー&ペーストし、ページの内容を確認してみましょう。
http://www.amazon.co.jp/%E3%83%A2%E3%83%80%E3%83%B3Perl%E5%85%A5%E9%96%80-CodeZine-BOOKS-%E7%89%A7-%E5%A4%A7%E8%BC%94/dp/4798119172/
その後、こちらのサイト(TAG index:URLデコード・エンコードフォーム)でデコードしてみましょう。URLに本のタイトルが含まれていることが分かるはずです。
次にPOST
の場合です。POST
を使用したデータ送信では、次のようにURLの後ろには何も付きません。
これはURL以外の、通常は人間の目で認識できない方法でデータを送信しているためです。
ただし、専用のソフトを使えば第三者が送受信データを見ること(盗聴)も比較的容易に可能です。そのため、POST
を使うことで根本的なセキュリティ対策にはならないことに注意してください。とはいえ、パスワードを送信する画面では、せめてGET
を入力フォームに使用することは、避けた方がよいでしょう。
パスワードを送信したりする画面で根本的なセキュリティ対策をするための選択肢1つとして、SSLと呼ばれる通信方法を導入し送受信データを暗号化する事が挙げられます。また、PHPプログラムそのものの書き方もセキュリティに配慮する必要があります。PHPプログラムのセキュリティに関しては、後日、応用編で説明をします。
まとめ
今回は、入力フォームに関して説明をしました。次回は情報を効率よく管理するため仕組みである「データベース」に関して説明をします。
- 入力フォームは
<form>
タグで囲まれた場所に記述する必要がある。 - PHP側では、
$_REQUEST
という連想配列で、入力された値を受信することができる。 - GETはURLの後ろに送信データを付加する送受信方法。
- POSTはURLとは別に、独立した情報としてデータを付加する送受信方法。ただし盗聴に対する根本的なセキュリティ対策にはならない。