PHPでフォームのラジオボタンやチェックボックスの値の取得や出力する方法

簡単なWebアンケートをHTMLとPHPスクリプトを使ってフォームを作成した際、テキストやテキストエリアの値の取得や表示はわかるがラジオボタンやチェックボックスを使った場合にどのように値を受け取ればいいのか、また出力する場合はどのようにプログラムを書けばいいのか。
うまく取得や表示ができない方のために簡単なサンプルコードでご説明します。

 
HTMLでフォームを作成してPHPファイルでフォームの値を受け取り表示させるところまでを、ラジオボタンとチェックボックスのパターンでご紹介します。

 

ラジオボタンの値の取得と出力

サービスの満足度のサンプルとしてHTMLは以下のようにラジオボタンの項目を作成します。
name属性ではチェックしたボタンの値を「cs」で取得出来るよう設定します。

HTML

<form method="post" action="check.php">
    満足度<br>
    <label><input type="radio" name="cs" value="満足">満足</label><br>
    <label><input type="radio" name="cs" value="やや満足">やや満足</label><br>
    <label><input type="radio" name="cs" value="やや不満">やや不満</label><br>
    <label><input type="radio" name="cs" value="不満">不満</label><br>
    <input type="submit" value="送信">
</form>

 
ラジオボタンは選択できる項目が1つなのでシンプルに「cs」で取得してvalueの値を表示させます。
if文を使ってisset関数で値が送られてきている場合、ラジオボタンでチェックを入れた値を表示させます。
ラジオボタンやこの後説明しますチェックボックスの選択項目では、選択していないと値が送られてこないのでisset関数を使って受け取る値があるかを確認してから変数に格納しないと環境によってはエラーを表示します。isset関数での確認を忘れないようにしましょう。

 
check.php

if(isset($_POST['cs'])) {
    $cs = $_POST['cs'];
    echo '満足度:' . $cs . '<br>';
} else {
    echo '満足度が選択されていません。<br>';
}

 
ラジオボタンの値の取得はシンプルでわかりやすいかと思います。

 

チェックボックスの値の取得と出力

図書館などのアンケートのサンプルとしてHTMLは以下のようにチェックボックスの項目を作成します。
name属性では配列で格納できるように 角括弧「[]」で名前を設定します。

HTML

<form method="post" action="check.php">
  利用の目的(複数選択可)<br>
  <label><input type="checkbox" name="q[]" value="本を見つけるため">本を見つけるため</label><br>
  <label><input type="checkbox" name="q[]" value="参考書を探すため">参考書を探すため</label><br>
  <label><input type="checkbox" name="q[]" value="暇つぶし">暇つぶし</label><br>
  <input type="submit" value="送信">
</form>

 
formから受け取ったチェックボックスのデータは複数選択ができるため配列で扱われます。
var_dumpを使って確認してみるとよくわかります。

check.php

var_dump($_POST["q"]);

 
2つチェックを入れてみまして、受け取ったデータの配列が確認できます。

var_dumpで配列の値を表示

 

$_POSTで受け取って変数に格納してもチェックボックスで選択した値が表示させるのには、複数の値を扱って出力する処理をしなければなりません。
チェックボックスの値を取得して表示する場合は、implode関数を使って配列に格納されている文字列を区切り文字を利用して表示させます。
implode()はif文内でも利用してもいいがどうせ配列を処理をするなら初めから変数に格納する時に処理しておいても良いかも。
if文を使ってisset関数で値が送られてきている場合、チェックボックスでチェックを入れた値を表示させます。

check.php

if (isset($_POST['q'])) {
    $q = implode(", ", $_POST["q"]);
    echo '利用の目的:' . $q . '<br>';
} else {
    echo 'チェックされていません。<br>';
}

 
implode()の第一引数には区切り文字を、第二引数に値を入れてます。
あとは変数に格納した値をechoで出力すればOKです。

これでチェックした項目の値の文字列を区切り文字で区切って表示させることができます。