PHPのPOST配列を完全に理解するために

投稿者: | 2018年9月20日

PHPで作成したウェブサイトでは、ユーザーが入力した内容(住所など)をサーバー側で受け取ることがあります。こういった場面で使用されるのが「POST」という機能で、ユーザーが入力した内容はPOST配列($_POST)の中に格納され、サーバー側に戻ってきます。では実際に、どう入力された情報をとりだすのか、というところを書き留めます。

配列を正しく理解する

配列は複数の要素を1つにまとめるものですが、大事なのが「キー」と「値」の関係を正しく理解すること。この理解が曖昧だと、POST配列のコードを書くとき、よくわからなかったり、迷いが生じます。

配列は複数の要素を一つにまとめることのできるものですが、PHPの配列には、情報は「キー」と「値」のペアで1つの要素となります。「値」があるのに「キー」がない、ということはあり得ないということです。

「キー」というのは配列の要素名です。「値」はその中身です。

例えば、「アドレス」という名前の配列を考えてみます。この時、「氏名」「住所」「電話番号」などが「キー」で、その実際の内容が「値」です。「住所:茨城県つくば市」という場合ですと、「住所」が「キー」=「要素名」で「茨城県つくば市」が住所という「キー」に対応する「値」です(「住所」というのは任意でつけた名前で何でもいいです。名前の付け方は後述します)

「キー」と「値」は1対1の関係にあります。なので、一つのキーに複数の値が割り振られはいけません。住所が複数ある場合などは、住所1、住所2など、別の要素に分けてそれぞれ入力する必要があるということです。あるいは、2つの住所を1つの配列にまとめます。

テキストボックスに入力した内容を送信

これを理解したうえで、POST配列を考えてみます。

例えばウェブサイトから住所を入力するためのコードを考えると、このような形になると思います。

action=”$_SERVER[PHP_SELF]”の$_SERVER[PHP_SELF]というスーパーグローバル配列は、現在のページへのパスを表します。つまり、(submitボタンを押すことで)入力内容がPOSTされると、このページ自身にPOST配列を送信するということになります。こうして送信されたPOST配列は、同一ページの他の部分でも使うことが出来ます。input type=”text”はテキスト入力用のテキストボックスを表示するコードです。その下の行は、テキストボックスに入力した内容を送信するためのボタンを表示します。valueを「送信」としていますが、こうすることで「送信」と書かれたボタンが設置されます。この値は何でも構いません。「検索」とか。

このままでは、何かをテキストボックスに入力して送信しても、何も起こりません。例えば、上のコードに続けて

と追加し、テキストボックスに入力して「送信」ボタンをクリックすると、ページがリロードされ、テキストボックスに入力した内容が表示されます。

ここでPOST配列ですが、「input type=”submit” value=”送信”」のコードにより、POST配列を返します。その上に、「input type=”text” name=”address”」とあります。ここのname=”address”のところが、POST配列の「キー」になります。値はテキストボックスに入力した内容です。従って、POST配列のaddressキーに対応する値(ここではテキストボックスに入力した内容)は$POST[‘address’]でアクセス可能です。$POST[ ]というのは配列、’address’の部分がその要素名です。

ちょっと混乱しますが、input type=”submit” value=”送信”のところ。input typeがsubmitの場合、valueはボタンのラベルとなります。つまり「送信」と書かれたボタンが表示され、これをクリックすることで初めてデータが送信されます。あて先は、このコードが書かれているページ自身です(action=”$_SERVER[PHP_SELF]”としているため)

応用編 チェックボックスなど

ではチェックボックスやプルダウンメニューの場合はどうなるでしょうか。以下のコードを見てください。

ちょっとわかりづらいですが、木工~料理までの7択から1つを選ぶコードです。これを(「選択してください」ボタンをクリックして)POSTすると、POST配列がこのページに送信され、リロードされます。2行目のnameに”category”と指定があるので、これがPOST配列での「キー」となります。その時の「値」は、value=で指定したものです。よってこの選択肢から選んだものは$_POST[‘category’]でアクセス可能です。

「木工」を選んでクリックした場合、「キー」は「category」で、「値」は「wood」です。なので$_POST[‘category’]の中身は「wood」になります。「革細工」を選んだ場合は、「キー」は「category」で「値」は「lthr」、$_POST[‘category’]の中身は「lthr」となります。他も同様です。

あと、value=”wood”などは必ずしも付ける必要はありません。付けない場合は、[木工]が[カテゴリー]キーに対する「値」となります。

なお、複数の選択肢を選んでポストするには、上記2行目を以下のコードと差し替えます。multipleというオプションをつけ、categoryのところに[]をつけて配列にしてあります。こうすると、Ctrl+クリックで複数の選択が可能となります。

このようにした場合は、$_POST[‘category’][0]、$_POST[‘category’][1]のように参照可能です。

(Visited 4 times, 1 visits today)