フォーム処理の基本
そふぃのPHP入門 >> PHP実践リファレンス >> フォーム処理 >> フォーム処理の基本

フォーム処理の基本

フォームとのやり取り

フォームに入力されたデータはHTTPというプロトコルを通してサーバに送られます。HTTPというのはWebを使用する際に使われる標準的な通信手段だと思ってもらえばいいのですが、この通信が行われる事によってブラウザとサーバでフォームデータのやり取りが行われています。HTTPに関してはあまり分からなくても、PHPではサーバに送られてきたフォームデータを簡単に取り出すことができるので、それを元に色々な処理をする事が可能になります。

代表的な処理に「ユーザの入力をブラウザに出力する」などがありますが、これは掲示板などでも使われている最も基本的な処理です。他には入力内容をファイル(またはデーターベース)に保存する、や入力内容に応じて検索結果を表示する、など様々な処理が考えられます。

どのような処理が必要になるかは作りたいものによって違ってきますが、どのような処理をするにせよ、まずフォームからのデータをPHPで受け取らなくてはいけません。

フォームからのデータ

PHPでフォームからのデータを受け取るためには、$_GET$_POST$_REQUESTのいずれかの連想配列を使用します。これらの変数はすべてPHPの定義済み変数なのでいちいち定義する必要はなく、いつでも自由に使えます。また、これらは全てスーパーグローバル変数で、全てのスコープで使用できます。

参考 変数の有効範囲

さて、$_GET$_POST$_REQUESTのどの変数を使用すればいいかは<form>タグのmedhod属性によって決定されます。フォームを記述する際には

<form action="" method="post">
</form>

などのようにPOST形式でデータを渡すか、GET形式でデータを渡すかを指定しますが、この形式がPOST形式なら$_POST、GET形式なら$_GETという連想配列にフォームデータが格納されるようになっています。

POST形式、GET形式のどちらも使用する場合には$_REQUESTが便利で、$_REQUESTにはPOST形式のデータもGET形式のデータも両方格納されます。通常、データ送信の形式が決まっている場合にはその形式の連想配列($_GET$_POST)を、同じスクリプト内でどちらの形式も使用する場合には$_REQUESTを使用します。

つまり、上記の場合のフォームでは$_POST$_REQUESTの両方で値を受け取る事が可能です。

参考 $_GETと$_POST

$_REQUESTは非常に便利なので全てそれで・・・・・と思うかもしれませんが、$_REQUESTを使用した場合、せっかくPOST形式で送信しているデータをGET形式でURLから送信できる事になってしまい、セキュリティ的にあまりお勧めできません。できるだけ$_REQUESTは使用しない様にする方が望ましいでしょう。

フォーム部品

さて、フォームデータを受け取るには$_GET$_POST$_REQUESTのいずれかの連想配列を使用するのですが、連想配列なのでキーが必要です。どのようなキーを指定すればいいかですが、フォームの各部品にname属性として設定した値が各連想配列のキーとして設定されます。

部品というのはフォーム部品・・・・つまり<input>だとか、<select><textarea>など、<form></form>内に配置する部品の事です。

分かりにくいと思いますのでまずは以下のHTMLをご覧下さい。

<form action="" method="post">
  <input type="text" name="textbox" value="" />
  <input type="submit" value="送信" />
</form>

このHTMLからは以下のようなフォームが出来上がります。

出力結果

上記のフォームの場合、テキストボックスに入力された内容を受け取って出力したい場合には・・・・・

  1. <?php
  2. print $_POST['textbox'];
  3. ?>

出力結果

とするだけです。試しに上記のテキストボックスに何か文字を入力して送信してみて下さい。「出力結果」の部分に入力した文字が入ります。

すでに解説するまでもないかもしれませんが・・・・・<form>タグのaction属性にPOSTを指定したので使用する変数は$_POSTです。テキストボックスの入力内容を受け取りたい場合にはテキストボックスのname属性に指定した値を$_POSTのキーに指定するので、

  1. $_POST['textbox'];

という指定方法になります。これだけでフォームからの入力内容にアクセスできます。

つまり、テキストボックスに入力された内容を出力するだけなら以下のような単純な記述で簡単にできます。実際に使用する場合はaction属性も指定するでしょうし、PHPの処理も「送信ボタンがクリックされた時だけ処理する」だとか、「HTML特殊文字をエスケープする」だとかのスクリプトを書く可能性が高いですが、いまいち良く分からない人はあまり気にせずw、まずフォームからの入力を受け取る方法だけ覚えて下さい。

<form action="" method="post">
  <input type="text" name="textbox" value="" />
  <input type="submit" value="送信" />
</form>
入力文字:
  1. <?php
  2. print $_POST["textbox"];
  3. ?>

出力結果

入力文字:

ただし、上記のスクリプトで出来上がったフォームを実際にWebに公開して動作させるためにはまだいくつかの注意点が必要です。次のページでHTML文字のエスケープについて取り扱いますのでそちらも併せてご覧下さい。