form文の基本
ラジオボタン
ラジオボタンの考え方もほかのフォームの要素と同じです。まずは、以下のHTMLを見てください。ラジオボタンの場合は、<input>タグを使い、type属性は、「radio」になります。
<form action="page1.php" method="post">
<input type="radio" name="btype" value="O" />O型
<input type="radio" name="btype" value="A" />A型
<input type="radio" name="btype" value="B" />B型
<input type="radio" name="btype" value="AB" />AB型
<input type="submit" name="btn" value="送信" />
</form>
ラジオボタンも複数の選択肢がありますが、name属性をすべて同じにしておきます。そうすると、ラジオボタンで選択されたvalue属性の値が、page1.phpに渡されます。
PHP側では、ほかの場合と同じく、$_POST["btype"]を使って、ラジオボタンで選択されたvalue属性の値を取得できます。
図3-1のようにO型を選択すれば、$_POST["btype"]には、「O」の文字が入ります。
ここで、注意しないといけないのは、ラジオボタンが選択されない場合の処理です。ラジオボタンの初期値設定がされていない場合は、ページを開いた時に何も選択されていない状態になっています。何も選択しない状態で「送信」ボタンを押した時は、$_POST["btype"]の値そのものが存在しません。
下記のpage1.phpを見るとわかりますが、今回はラジオボタンが選択されたかどうかのチェックのためにisset()というPHPの関数を使っています。isset(調べたい変数・配列名)とすることで、その変数または配列が存在しているかどうかのチェックができるようになります。isset()は、変数・配列が存在する場合は、trueを返し、そうでない場合は、falseを返します。
if (isset($_POST["btype"])) {
$btype = $_POST["btype"];
} else {
$btype = "";
}
上記では、isset()をif文に入れて、$_POST["btype"]が存在している場合は、$_POST["btype"]の値を変数$btypeに入力して、$_POST["btype"]が存在しない場合は、変数$btypに空文字("")を代入するようにしています。
チェックボックス
今まで紹介したフォームの要素は、1つのフォーム要素に対して、1対のname属性とvalue属性を送るのみでした。よって、受け取るPHP側のプログラムは、ほぼ同じ記述方法で対応可能でした。つまり、$_POST["name属性"]でvalue属性の値を受け取ることができます。
チェックボックスは、複数の値を選択することができるものなので、複数の選択値(value属性)を受け取る必要があります。一般的によく使われる値の受け渡し方法は、配列を使うという方法です。
配列でデータの受け渡しをするためには、下記のように、name属性の値を配列にします。ここでは、hobby[]としていますが、[]を付けることによって配列として扱えるようになります。[]は、カギ括弧"["と"]"を続けて書いたものです。このようにname属性に配列を指定すると、複数のvalue属性の値を取得可能になります。
<form action="page1.php" method="post">
<input type="checkbox" name="hobby[]" value="reading" />読書
<input type="checkbox" name="hobby[]" value="sports" />スポーツ
<input type="checkbox" name="hobby[]" value="movie" />映画鑑賞
<input type="checkbox" name="hobby[]" value="music" />音楽
<input type="submit" name="btn" value="送信" />
</form>
例えば、図3-2にあるように、スポーツと映画鑑賞を選んだ時は、PHP側では$_POST["hobby"][0]に「sports」、$_POST["hobby"][1]に「movie」が入ります。
$POST["hobby"]そのものが配列になっており、選択された順番に、0番目である$POST["hobby"][0]に「sports」が入り、その次である1番目($_POST["hobby"][1])に「movie」が入っているのです。
さらに、チェックボックスに何もチェックされない場合は、$POST["hobby"]が存在しなくなるので、ラジオボタンの時と同じようにisset()関数を使って、チェックボックスが「チェックされているかどうか」を判定するようにします。
下記の例では、チェックボックスが選択されている時は、$hobbyに$POST["hobby"]を代入し($hobbyは配列になります)、チェックボックスが1つも選択されていない場合は、$hobbyを配列として初期化(array()で初期化)します。
if (isset($_POST["hobby"])) {
$hobby = $_POST["hobby"];
} else {
$hobby = array();
}
今回は、フォームの使い方、およびPHPでの受け取り方を学習しました。受け取ったデータは変数に代入するのみで終わっていますので、その後どうしたらいいのかがまだはっきりしていないと思います。
ブラウザの画面に出したい場合は、echo文で出せばいいのですが、1点だけセキュリティーの問題をクリアにしておく必要があります。そこで次回は、formで受け取ったデータを画面に出す方法やセキュリティーについて紹介します。