おサルさんでもわかる?ホームページ作り!
| htmlタグ辞典+css


◆Chapter 2 - GETとPOST
パラメーターの受け渡し方法に " GET " と " POST " があります。
" GET " と " POST " 、ホームページ制作を経験したことがあるなら、一度は聞いたことがあるでしょう。
form タグを利用する時に method の指定で使います。
ブラウザーの URL の欄で以下のようなものを見たことはありますね。

2018年7月17日現在は、"http://tag-dig.ex-mode.net" は、"https://tag-dig.ooedo21.com" に移設しています。
検索エンジンを利用すると、 URL の最後に何やら記号付きの URL になります。
アドレスをよく見ると、" ? " マークの後に文字がついてますね。
これがパラメーターなのです。
上記のアドレスでは、" p=4 " と " n=13 " の値が付けられています。
" GET " の場合は、このようにパラメーターが確認できるのです。
" GET " の場合は、以下の場合に使われます。
- フォームの method に " get " を指定した場合
- パラメーターを含むリンクをクリックした場合
- パラメーターを含む URL を直接入力した場合
フォームの method に " get " を指定した場合、そこで入力された値がパラメーターとして送信され URL の後に付加されます。
パラメーターを含むリンクをクリックした場合、そこに含んでいるパラメーターの情報をそのまま送信します。
パラメーターを含む URL を直接入力した場合、意図するパラメーターを含むことで情報を送信することができます。
といっても、よく理解できないでしょうから、サンプルを使って実際に動かしてみましょう。
次のフォームを使って " GET " でパラメーターを送信してみます。
名前と年齢を入力して送信ボタンを押してください。
年齢は半角数字を使います。
<form action="./sample/sample2_9.php" method="get">
お名前:<input type="text" name="name" maxlength="8" size="12">
年齢<input type="text" name="age" size="4" maxlength="2">
<input type="submit" value="送信">
</form>
このコードを表示すると、次のとおりになります。
実際に動作しますので試してみてください。
パラメーターを含むリンクとは、下記のようなリンクです。
<a href="./sample/sample2_9a.php?name=naomi&age=17">リンク</a>
このリンクを表示すると、次のとおりになります。
リンク
クリックすると先ほどのフォーム同様に動作しているのがわかりましたね。
アドレスバーに直接、 " ./sample/sample2_9a.php?name=nomi&age=17 " と入力しても同じ結果を出します。
"GET" は、簡単にパラメーターが渡せるのです。
ただし、" GET " では注意しなければならない点があります。
- パラメーターとして受け渡す文字数に制限がある
- パラメーターで渡した値は可視化される
可視化されるということは、アドレスバーで直接パラメーターを改編することができるということです。
悪意を持ってパラメーターで情報を得ようと、適当な値を入れてみたりする人もいます。
基本的には、" GET " では改編されてもよい(見られてもよい)値を利用するようにしましょう。
ちなみ、「初心者向 PHPを学ぼう!」では指定されたパラーメーター以外は、エラーページを表示するようにしています。
試しに、このページのアドレスに表示されている " n=chap2_8 " のパラメーター値を " n=chap2_100 " に変更してみてください。
存在するページなら該当のページを表示し、存在しないページならエラーページを表示させています。
" POST " の場合は、以下の場合に使われます。
- フォームの method に " POST " を指定した場合
" POST " は、" GET " のように気軽に使うことができません。
form タグを利用する時に method で " post " を指定することで利用します。
送信されたパラメーターは、アドレスバーに表示されることもなく、隠匿性があります。
設置するパラメーター数に制限もありません。
SSL などを併用して使うとより強固なセキュリティが構築できます。
先ほど利用した " get " の送信フォームを " post " に変更し動作確認をしてみましょう。
修正点は、 method の値だけです。
<form action="./sample/sample2_9.php" method="post">
お名前:<input type="text" name="name" maxlength="8" size="12">
年齢<input type="text" name="age" size="4" maxlength="2">
<input type="submit" value="送信">
</form>
このフォームを表示すると、次のとおりになります。
当然のことながら、見た目は変わりません。
実行した後、アドレスバーを確認してみてください。
" GET " のようにパラメーターが付いていないのがわかりますね。
" GET " と " POST " は一長一短です。
どちらを使うかは、特性を考えた上で利用しましょう。
form から送信された name 属性の値は、 name 属性で付けた名前でパラメーター値と共に引き渡せます。
パラメーターを受け取るページが " GET " なら、
$_GET['name'];
" POST " なら、
$_POST['name'];
で値を受け取ることができるのです。
age の値なら次のとおりとなります。
$_GET['age'];
$_POST['age'];
" GET " と " POST " は、スーパーグローバル変数と呼ばれる種類になります。
【追記 : 2014/1/21】
GET で送信する際の文字をデコードすることができます。
詳しくは、ツールEXの『 URLエンコード&デコード 』を参照ください。
【追記 : 2014/2/21】
GET でパラメーターを渡す場合に "#" (シャープ)を含むことができません。
これはブラウザが意図的に "#" の箇所で中断する使用による現象とのことです。
文字色や背景色などで RGB カラーの値を与えたい場合には、 "#" を使わずカラーネームで対処する必要があります。
POST と GET の値を得るのに PHP ではでグローバル変数の $_REQUEST が使えます。
$_REQUEST を使うことでプログラム上、POST と GET を区別することなく利用できます。


|