前章で作ったフォームは静的なHTMLファイルとして作ったものですが,入力されたデータは,submitボタンをクリックした後,action
属性に示したURLに送信されます。action属性が未指定の場合はフォームが記載されているファイルに対して送られます。
フォーム入力値に対してどういうアクションを返すかはそのaction属性値で指定されたURLで規定する必要があります。ここではPHPスクリプトを使って受信データの処理の仕組みを見ていくことにします。
フォームの入力値をPHPスクリプトが受け取ると,処理された入力データが次の固定名の変数に格納されます。$_GET
,$_POST
配列は送信するページのフォーム要素に使用されているmethod属性に対応しています。method属性に依らずデータを受け取りたい時には$_REQUEST
配列を使います。
method="get"
からの送信を受け取りmethod="post"
からの送信を受け取りname
属性値として使用され,そこに入力値が格納されます。
例えば<input ... name="kore">
に入力されたデータはPOSTメソッドの場合は$_POST['kore']
,GETメソッドの場合は$_GET['kore']
に格納されます。勿論メソッドに依らず,$_REQUEST['kore']
で受信することも可能です。
フォーム入力値をによってはプログラム(PHPスクリプト,JavaScript)と判断されて不正に実行される危険性があります。その危険性から守るためのファンクションが
htmlspecialchars
です。下記の使用例に示すように,HTMLタグとして記述された文字列を加工してくれます。ENT_QUOTES
オプションを指定することで,'(シングルクォーテーション)
を安全に受信することができるようになります。
例えば,テキストボックスからURLを受け取るフォームを作ったとします。
テキストボックスからの入力を$_REQUEST['sample']
で受信するPHPスクリプトを下記のように記述し,htmlspecialcharsファンクションの効能を確認してみましょう。
例えば悪意のあるユーザーが不正なリンク(この例ではbadlink
)をテキストボックスに忍び込ませたとしましょう。
悪意のある入力例
こういうケースでも,htmlspecialcharsファンクションを使うことで,リンクを無効にすることができます。
ブラウザ出力
ユーザからの入力は基本的に鵜呑みにせず,htmlspecialchars等のフィルタを必ずかけるようにして下さい。
本章で示す事例の大部分は,分かりやすさ重視のため,フォーム部分をHTMLファイルで作成し,そこから別ファイルとなっているPHPスクリプトを呼び出すようにしています。しかし,フォームの入力内容をそのまま受け取って以降の処理に生かしたい場合もあります。その際にはフォームとPHPスクリプト部分を一体のファイルとして作成しておくと便利です。以下,簡単な事例で確認していきましょう。
以降で作成するファイルをform_onepage.php
とします。まず,フォーム部分(11行目~15行目)と,後からPHPスクリプトを追記する部分(17行目~19行目)を作成します。
この段階でフォームが下記のように表示されていることを確認しましょう。
フォームのaction
を無指定,あるいは空にすると,このフォームが記述されたファイルそのものが,登録(サブミット)時に呼びだされ,フォームの入力内容が投げ込まれます。
次に,このフォームに入力がなされた時のみ,その内容を表示するよう,17行目~19行目にPHPスクリプトを記述します。このPHPスクリプトで使っている技法は後ほど解説しますので,そのまま打って下さい。
上のフォーム部分を入力し,「登録!」ボタンを押すと,このフォームが記述されているPHPスクリプトが呼び出されて入力内容が渡されます。下記のように入力し,
・・・というように出力されることを確認して下さい。
5章以降では,このように同一ページにフォームと処理内容を記述する事例が出てきます。処理に応じて使い分けるようにして下さい。