第7章 フォームデータの扱い方

7.3 画面からの入力データを扱う

前節でWebブラウザから入力するための部品や送信方法について学習しました。本節ではその送信されてきたデータをPHPで扱う方法について以下の順番で説明していきます。

① フォームのPOST送信データを扱う方法(7.3.1)
② フォームのGET送信データを扱う方法(7.3.2)
③ リンクのGET送信データを扱う方法(7.3.3)

7.3.1 フォームのPOST送信データを扱う方法

Web画面からのPOST送信データを扱うにはスーパーグローバル変数の$_POSTを利用する必要があります。
$_POSTの実体は連想配列になっており、HTMLのフォーム部品の部品名(name属性の値)を文字列キーで値が格納されています。

書式:POST送信データを受け取る

凡例:POST送信データを受け取る

送信元のフォーム部品のname属性の値を使って、送信元で値を取得することができるので、必ず同じ値を使う必要があります。

上記で示した凡例ではテキストボックスだけですが、他のフォーム部品でも送信先でname属性の値である「部品名」を利用するのは同じです。

POST送信データを受け取って利用するプログラム

別画面(送信元)からのPOST送信された入力データを送信先のページで受け取り、そのデータをWebブラウザに表示して確認してみましょう。

ソース・フォルダー: myproj_intro/ch07
パッケージ: postForm.html
アクセスURL:http://localhost/myproj_intro/ch07/postForm.html

postForm.html

ソース・フォルダー: myproj_intro/ch07
パッケージ: usePostData.php
アクセスURL:postForm.htmlからの画面遷移でアクセスされる

usePostData.php

実行結果

解説

今回のプログラムは、データを入力するWeb画面の「postForm.html」と、その画面からのデータを受け取り先の「usePostData.php」の2つのファイルから構成されています。
まずは、データの送信元になる「postForm.html」のフォーム構成について簡単に説明を行います。
7行目はフォームのデータの送信先を「usePostData.php」、送信方法を「post」で設定しています。
8行目はニックネームを入力してもらうためのテキストエリアを、部品名「nickName」で設定しています。
9行目はラジオボタンで部品名「door」、選択された場合の送信データを「インドア」で設定しています。
10行目はラジオボタンで部品名「door」、選択された場合の送信データを「アウトドア」で設定しています。
ラジオボタンではどちらかを選択させたい場合、必ず部品名を「同じ値」にする必要があります。
11行目は送信の実行ボタンを表示名「送信」で設定しています。送信ボタンがないとデータを送ることができないので、<form>タグを利用する場合、送信ボタンは一緒に設置するものと覚えてください。


図 7.3.1:POSTデータを送信

続いて、データの受信元になる「usePostData.php」の処理について説明を行います。
図7.3.1で示していますが、今回の実行結果ではフォームデータは「kanda」「アウトドア」という情報がPOST送信で送られてきます。このPOST送信データを取得したいので、3、4行目でスーパーグローバル変数$_POST(連想配列)を利用します。$_POST[‘部品名’]で、連想配列の各要素を参照して各変数に代入しています。


図 7.3.2:連想配列$_POSTから入力データを取得して変数へ代入

7、8行目は今回のプログラムではPOST送信でしかデータが送られてこないので、$_GETでは値が取得できないことを確認するための処理になっています。

画面からのフォームデータを$_POSTから各変数に代入した後は、16~19行目で取得した値を画面に表示しています。今回の実行結果からも分かるようにPOST送信で送られてきたデータは、PHP側では$_POSTを利用して取得でき、$_GETでは取得できないことが確認できました。

ポイント
  • POST送信されてきたフォームデータをPHP側で利用するには、連想配列である$_POSTを利用して行う。
  • 各フォーム部品のデータを$_POSTから取得するには、HTMLで設定した部品名をキーに取得できる。

7.3.2 フォームのGET送信データを扱う方法

Web画面からのGET送信データを扱うにはスーパーグローバル変数の$_GETを利用する必要があります。
$_GETの実体は$_POSTと同じ連想配列になっていますので、扱い方は$_POSTと一緒になります。

書式:GET送信データを受け取る(フォームからの場合)

凡例:GET送信データを受け取る(フォームからの場合)

部品名を利用するのは$_GETも$_POSTも同じです。

GET送信データを利用する方法は$_POSTとほぼ同じで、PHP側で使うスーパーグローバル変数が送信方法に対応した方を利用するところが唯一の違いになります。

GET送信データを受け取って利用するプログラム

別画面からGET送信された入力データをPHP側で受け取り、そのデータをWebブラウザに表示して確認してみましょう。

ソース・フォルダー: myproj_intro/ch07
パッケージ: getForm.html
アクセスURL:http://localhost/myproj_intro/ch07/getForm.html

getForm.html

ソース・フォルダー: myproj_intro/ch07
パッケージ: useGetData.php
アクセスURL:getForm.htmlからの画面遷移でアクセスされる

useGetData.php

実行結果

解説

今回のプログラムは、前項で学習したプログラムの内容をPOSTからGETに変更したものになっています。

まずは、データの送信元になる「getForm.html」について簡単に説明を行います。
このプログラムはほぼpostForm.htmlのコピーになっています。違う部分は<title>タグで設定したタイトル名と、7行目のフォームのデータの送信先を「useGetData.php」、送信方法を「get」で設定しているところです。
フォームでGET送信を行いたい場合、今回のようにmethod属性を記述しても、省略してもどちらでも可能になります。

また入力データ送信後の画面のURLを確認すると、「localhost/myproj_intro/ch07/useGetData.php?」の後に「nickName=kanda&door=インドア」とフォームで入力したデータが追加されているのが分かります。これがPOST送信と違いGET送信でURLにデータをくっつけて送る仕組みになります。


図 7.3.3:GET送信データはURLに追加されて送られる

続いて、データの受信元になる「useGetData.php」の処理について説明を行います。

今回の実行結果ではフォームデータは「kanda」「インドア」という情報がGET送信で送られてきます。このGET送信データを取得したいので、3、4行目でスーパーグローバル変数$_GET(連想配列)を利用します。$_GET[‘部品名’]で、連想配列の各要素を参照して各変数に代入しています。


図 7.3.4:連想配列$_GETから入力データを取得して変数へ代入

7、8行目は今回のプログラムではGET送信でしかデータが送られてこないので、$_POSTでは値が取得できないことを確認するための処理になっています。

画面からのフォームデータを$_GETから各変数に代入した後は、16~19行目で取得した値を画面に表示しています。今回の実行結果からも分かるようにGET送信で送られてきたデータは、PHP側では$_GETを利用して取得でき、$_POSTでは取得できないことが確認できました。

この7.2節では2つのプログラムを見てきましたが、画面からの入力データをPHP側で扱うには、GET送信なら$_GET[‘部品名’]、POST送信なら$_POST[‘部品名’]となるだけです。それほど難しい仕組みではないのでしっかりと覚えておきましょう。

ポイント
  • GET送信されてきたフォームデータをPHP側で利用するには、連想配列である$_GETを利用して行う。
  • 各フォーム部品のデータを$_GETから取得するには、HTMLで設定した部品名をキーに取得できる。
  • GET送信のフォームデータはURLの後ろにくっついて送信される。

7.3.3 リンクのGET送信データを扱う方法

Web画面のリンクからのGET送信データを扱うには、フォームのGET送信と同じように、スーパーグローバル変数の$_GETを利用します。リンクに送信データを設定する方法についても知っておきましょう。

書式:HTMLのリンクに送信データを設定する

指定URLの最後に「?(ハテナ)」記号の後ろから、「キー名=値」をセットで1つデータを送ることができます。また複数のデータを設定したい場合は「&(アンド)」で区切って「キー名=値」で増やしていけば設定できます。

書式:GET送信データを受け取る(リンクからの場合)

凡例:GET送信データを受け取る(リンクからの場合)

リンクからの送られてくるデータは、「URL?」の後ろからの記述部分が送信データになります。GETデータを利用する場合は「キー名=値」の左辺のキー名が連想配列$_GETで利用する文字列キーに該当します。また取得できる値は、「キー名=」の右辺側の値になります。

リンクからのGET送信データを受け取って利用するプログラム

別画面のリンクからGET送信された入力データをPHP側で受け取り、そのデータをWebブラウザに表示して確認してみましょう。

ソース・フォルダー: myproj_intro/ch07
パッケージ: link.html
アクセスURL:http://localhost/myproj_intro/ch07/link.html

link.html

ソース・フォルダー: myproj_intro/ch07
パッケージ: useLinkData.php
アクセスURL:link.htmlからの画面遷移でアクセスされる

useLinkData.php

実行結果

解説

今回のプログラムは、「link.html」でリンクにデータを設定して「useLinkData.php」へ送ります。

まずは、データの送信元になる「link.html」について簡単に説明を行います。
今回は7行目のリンク先を「useLinkData.php」、送信するデータとして「nickName=kanda」と「address=東京」の2つを送信するようになっています。また<a …>~</a>タグで囲まれた文字が画面に表示されるリンク名になります。

続いて、データの受信元になる「useLinkData.php」の処理について説明を行います。

今回の実行結果ではリンクから送られてくるデータは「kanda」「東京」という情報がGET送信で送られてきます。このGET送信データを取得したいので、3、4行目でスーパーグローバル変数$_GET(連想配列)を利用します。この取得方法はリンクでもフォームでもGET送信の場合同じ処理になります。


図 7.3.5:連想配列$_GETからリンクの送信データを取得して変数へ代入

これまでのプログラムと同様に12、13行目で変数に格納した送信データを表示するようにしています。
実行結果からも分かるように、リンクの送信データは$_GETで取得できることが確認できます。

ポイント
  • リンクでデータを送信する場合GET送信になる。
  • リンクからの送信データを取得するには、フォームのGET送信と同じように連想配列$_GETを利用する。
  • リンクで送信されてきたデータを$_GETから取得するには、「キー名=値」のキー名をキーに取得できる。

NEXT>> 7.4 本章のまとめ