フォーム入力の受け取り


前章で作ったフォームは静的なHTMLファイルとして作ったものですが,入力されたデータは,submitボタンをクリックした後,action属性に示したURLに送信されます。action属性が未指定の場合はフォームが記載されているファイルに対して送られます。

フォーム入力値に対してどういうアクションを返すかはそのaction属性値で指定されたURLで規定する必要があります。ここではPHPスクリプトを使って受信データの処理の仕組みを見ていくことにします。

使用変数とファンクション

受け取り用

フォームの入力値をPHPスクリプトが受け取ると,処理された入力データが次の固定名の変数に格納されます。$_GET$_POST配列は送信するページのフォーム要素に使用されているmethod属性に対応しています。method属性に依らずデータを受け取りたい時には$_REQUEST配列を使います。

これらの固定名の変数は全て配列となっており,配列の添字は入力要素のname属性値として使用され,そこに入力値が格納されます。

例えば<input ... name="kore">に入力されたデータはPOSTメソッドの場合は$_POST['kore'],GETメソッドの場合は$_GET['kore']に格納されます。勿論メソッドに依らず,$_REQUEST['kore']で受信することも可能です。

受信データのセキュリティ対策: htmlspecialchars

フォーム入力値をによってはプログラム(PHPスクリプト,JavaScript)と判断されて不正に実行される危険性があります。その危険性から守るためのファンクションが htmlspecialcharsです。下記の使用例に示すように,HTMLタグとして記述された文字列を加工してくれます。ENT_QUOTESオプションを指定することで,'(シングルクォーテーション)を安全に受信することができるようになります。

例えば,テキストボックスからURLを受け取るフォームを作ったとします。

HTMLファイル:textbox.html

テキストボックスからの入力を$_REQUEST['sample']で受信するPHPスクリプトを下記のように記述し,htmlspecialcharsファンクションの効能を確認してみましょう。

PHPスクリプト:textbox.php

例えば悪意のあるユーザーが不正なリンク(この例ではbadlink)をテキストボックスに忍び込ませたとしましょう。

悪意のある入力例

こういうケースでも,htmlspecialcharsファンクションを使うことで,リンクを無効にすることができます。

ブラウザ出力

ユーザからの入力は基本的に鵜呑みにせず,htmlspecialchars等のフィルタを必ずかけるようにして下さい。

※ファイルメニューとチェックボックスの受け取りはこの方法とは少し違ってきます。その方法については次のページで説明しています。

フォームと入力処理の一体化

本章で示す事例の大部分は,分かりやすさ重視のため,フォーム部分をHTMLファイルで作成し,そこから別ファイルとなっているPHPスクリプトを呼び出すようにしています。しかし,フォームの入力内容をそのまま受け取って以降の処理に生かしたい場合もあります。その際にはフォームとPHPスクリプト部分を一体のファイルとして作成しておくと便利です。以下,簡単な事例で確認していきましょう。

以降で作成するファイルをform_onepage.phpとします。まず,フォーム部分(11行目~15行目)と,後からPHPスクリプトを追記する部分(17行目~19行目)を作成します。

form_onepage.php : (1)フォーム部分を作る。

この段階でフォームが下記のように表示されていることを確認しましょう。

フォームのactionを無指定,あるいは空にすると,このフォームが記述されたファイルそのものが,登録(サブミット)時に呼びだされ,フォームの入力内容が投げ込まれます。

次に,このフォームに入力がなされた時のみ,その内容を表示するよう,17行目~19行目にPHPスクリプトを記述します。このPHPスクリプトで使っている技法は後ほど解説しますので,そのまま打って下さい。

form_onepage.php : (2)入力内容を表示する。

上のフォーム部分を入力し,「登録!」ボタンを押すと,このフォームが記述されているPHPスクリプトが呼び出されて入力内容が渡されます。下記のように入力し,

↓↓↓↓↓↓↓↓↓
「登録!」でサブミットすると・・・
↓↓↓↓↓↓↓↓↓

・・・というように出力されることを確認して下さい。

5章以降では,このように同一ページにフォームと処理内容を記述する事例が出てきます。処理に応じて使い分けるようにして下さい。


Copyright (c) 2014-2017 幸谷研究室 @ 静岡理工科大学 All rights reserved.
Copyright (c) 2014-2017 T.Kouya Laboratory @ Shizuoka Institute of Science and Technology. All rights reserved.