オープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載。今回は、HTMLのフォーム機能についておさらいし、get/postメソッドで送信された内容を連想配列で格納するPHPの「定義済みの変数」の中身や、フォーム送信値の取り扱いにおける注意点について解説します【PHP 7.1含め2017年の情報に合うように更新】。
オープンソースのWeb開発向けスクリプト言語「PHP」の文法を一から学ぶための入門連載「Web業界で働くためのPHP入門」。
今回はPHPならではの機能、フォームの取り扱いについて解説します。厳密にいえば、これは本連載の目的である文法的な範囲の話ではありませんが、PHPを理解する上で欠かせないため、ざっと解説することにします。
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ブラウザ上のフォームから送信された値を受け取ることができる点です。
PHPには「定義済みの変数」というあらかじめ決められた変数群があります。これまでの解説では、変数は何らかの値を代入することで使えるようになりましたが、定義済みの変数は、そういった操作をせず、いきなり使える点が異なっています。この変数に送信値が格納されています。つまり、変数にアクセスするだけで送信値を取り出せるようになっています。
定義済みの変数は幾つか種類があり、フォームの送信値を取得する以外の目的でも使われています。よく使われるのは次のものです。
定義済みの変数 | 概要 |
---|---|
$_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>
結果は次のようになります。長いので、一部省略しています。
array(33) { ["UNIQUE_ID"]=> string(24) "WUORk38AAAEAAB35FcYAAAAH" ["HTTP_HOST"]=> string(9) "localhost" ["HTTP_CONNECTION"]=> string(10) "keep-alive" ["HTTP_UPGRADE_INSECURE_REQUESTS"]=> string(1) "1" ["HTTP_USER_AGENT"]=> string(121) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" ["HTTP_ACCEPT"]=> string(74) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" ["HTTP_REFERER"]=> string(34) "http://localhost/phplesson/chap08/" 〜省略〜 ["REQUEST_URI"]=> string(36) "/phplesson/chap08/showServerInfo.php" ["SCRIPT_NAME"]=> string(36) "/phplesson/chap08/showServerInfo.php" ["PHP_SELF"]=> string(36) "/phplesson/chap08/showServerInfo.php" ["REQUEST_TIME_FLOAT"]=> float(1497600403.098) ["REQUEST_TIME"]=> int(1497600403) }
連想配列として、さまざまな情報が格納されていることが分かります。$_SERVER内の要素の意味は、「PHP: $_SERVER - Manual」で解説されているので、参考にしてください。
フォームの送信にはgetメソッドとpostメソッドの2種類があります。これら2種のメソッドは、HTML上で<form>要素のmethod属性として指定します。送信されたデータはそれぞれ定義済みの変数、$_GETと$_POSTに格納されます。ここからは、この2個の定義済み変数を扱っていきましょう。
まずは、入力画面を作成する必要があります。ここでは、送信された2つの数値を足し算して表示するという、ごく簡単なものとします。フォームを2個配置し、1つはgetで、もう1つはpostで送信するようにします。なお、この入力画面は、phpファイルではなく単純なhtmlファイルです。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>足し算入力画面</title> </head> <body> <p>getで送信</p> <form action="getPlus.php" method="get"> <input type="text" name="num1" size="4"> + <input type="text" name="num2" size="4"> <input type="submit" value=" = "> </form> <p>postで送信</p> <form action="postPlus.php" method="post"> <input type="text" name="num1" size="4"> + <input type="text" name="num2" size="4"> <input type="submit" value=" = "> </form> </body> </html>
画面を表示してください。以下のようになると思います。
Copyright © ITmedia, Inc. All Rights Reserved.