今回はPHPならではの機能、フォームの取り扱いについて解説します。厳密にいえば、これは本連載の目的である文法的な範囲の話ではありませんが、PHPを理解する上で欠かせないため、ざっと解説することにします。
ところで、本連載ではPHP 5.5を前提としていますが、そろそろ5.6が正式リリースされそうです。現在のところ、リリース候補(RC)である5.6.0RC1が公開されています。5.6リリース後は、いずれどこかのタイミングで5.6系に移行したいと考えています。5.5系は5.5.14がリリースされていますので、アップデートしておきましょう。
HTMLのフォーム機能については既にご存じの読者も多いと思いますので、ここでは簡単なおさらいにとどめます。フォームとは<form>要素を使って、Webサーバーにデータを送信するための、HTMLとWebブラウザー側の仕組みです。
例えば、次のようなHTMLをWebブラウザーで表示すると、1つの入力欄と送信ボタンが表示されます。
<form action="送信先URL" method="post"> <input type="text" name="example"> <input type="submit" value="送信"> </form>
入力欄に何か入力してボタンを押すと、Webブラウザーは指定したURLに対して入力内容を送信します。通常そのURLでは何らかのWebアプリケーションが動作していて、入力内容に従って動作するように作られています。例えば、検索エンジンなら検索結果を表示する、などです。
PHPの便利なところは、この送信先のURLにPHPのファイルを指定するだけで、Webブラウザー上のフォームから送信された値を受け取ることができる点です。
「定義済みの変数」というあらかじめ決められた変数群があり、この変数に送信値が格納されています。つまり、変数にアクセスするだけで送信値を取り出せるようになっています。
これまでの解説では、変数は何らかの値を代入することで使えるようになりましたが、定義済みの変数は、そういった操作をせず、いきなり使える点が異なっています。
定義済みの変数はいくつか種類があり、フォームの送信値以外の目的でも使われています。よく使われるのは次のものです。
定義済みの変数 | 概要 |
---|---|
$_GET | getメソッドにより送信された値 |
$_POST | postメソッドにより送信された値 |
$_COOKIE | クッキーの値 |
$_REQUEST | $_GET、$_POST、$_COOKIEをまとめたもの |
$_SERVER | サーバーの環境情報やクライアント(Webブラウザー)の情報 |
$_SESSION | セッションに格納した値 |
全て変数名の冒頭に「_(アンダースコア)」が付いていますが、これは「通常の変数ではない」ということを主張しています。特に、文法上のルールがあるわけではありません。通常のものとは違うという主張をするためにアンダースコアから始まる名前を付けることは、PHP以外の言語でもよく行われています。
上記のうち、$_GETと$_POSTがフォームから送信された値が格納される定義済みの変数です。いずれの変数も連想配列になっています。
例として、$_SERVERの内容を見てみましょう。$_GETや$_POSTはフォームから送信しないと空っぽですが、$_SERVERなら常に値が格納されています。
次のコードで$_SERVERを表示してみましょう。
<pre><?php var_dump($_SERVER) ?></pre>
結果は次のようになります。
連想配列として、さまざまな情報が格納されていることが分かります。$_SERVER内の要素の意味は、「PHP: $_SERVER - Manual」で解説されているので、参考にしてください。
フォームにはGETメソッドとPOSTメソッドの2種類があり、それぞれ定義済みの変数、$_GETと$_POSTに対応しています。このメソッドはHTML上で<form>要素のmethod属性として指定するものです。
GETとPOSTの違いは、GETメソッドの場合、送信値はURLに連結した形で送信されるということです。URLの一部になっているため、送信する値を含めてブックマークしたり、リンク先を保存したりといったことが可能になります。
get_dump.phpとして次の内容を保存し、ブラウザーで「http://localhost:8000/get_dump.php」にアクセスしてみましょう。
<pre><?php var_dump($_GET) ?></pre>
何も送信していないため、$_GETは空です。「array(0){}」と表示されたことでしょう。次に下記URLにアクセスしてみます。「?」から右側がURLに追加した文字列です。
http://localhost:8000/get_dump.php?key1=abc&key2=xyz
$_GETの中に、URLに追加した文字列が格納されていることが分かります。
GETメソッドで追加する文字列の規則は例を見ればだいたい分かると思いますが、「?」「&」「=」といった区切りに使われている文字列を値に使いたい場合どうするかという疑問が生じることと思います。
こういった特殊な文字は「URLエンコード」という変換をする必要があります。詳しくは各自調べてみてください。
Copyright© 2014 ITmedia, Inc. All Rights Reserved.