問い合わせフォームなどでチェックボックスがある場合、そのままだと複数チェックしても一つしか反映されません。 値の渡し方を工夫する必要があります。
一つの方法としてはnameをそれぞれ変えれば可能。
<form action="./request_conf.php" method="post"> <div class="form_group"> <input type="checkbox" name="Property_1" value="戸建て"> 戸建て <input type="checkbox" name="Property_2" value="マンション"> マンション <input type="checkbox" name="Property_3" value="店舗"> 店舗 <input type="checkbox" name="Property_4" value="その他"> その他 </div> </form>
ただこの場合は数が増えた場合は、nameが増えてややこしくなってくるので、配列にするのがオススメです。
HTML側で name を記述するときに []
を最後に付けると配列になります。
下記のように bukken[]
のようにします。
チェックボックスの値はどのように取得するか?
[]
を付けることで、PHP側で配列として受け取れます。
このような感じでHTMLを書きます。
<form action="./request_conf.php" method="post">
<div class="form_group">
<input type="checkbox" name="Property[]" value="戸建て"> 戸建て
<input type="checkbox" name="Property[]" value="マンション"> マンション
<input type="checkbox" name="Property[]" value="店舗"> 店舗
<input type="checkbox" name="Property[]" value="その他"> その他
</div>
</form>
$_POST['Property']
にチェックボックスの値が配列として格納されています。
それを下記のように変数に代入するだけでチェックボックスの値を受け取れます。
<?php $Property = $_POST['Property'];
既に配列になっているので、変数に代入するときにfor文とか使う必要はなく、
先ほどの変数$food を var_dump($food)してみると配列になっていのが確認できます。
配列として受けとるには
受け取るときに未定義またはNULLではないか、また配列かどうかを確認します。
未定義またはNULLではないかを確認するには isset()
関数を使います。
配列かどうかは is_array()
関数を使います。
if文を使い、値を確認し、未定義でもNULLでもなく、配列だった場合に $food = $_POST['Property'];
として値を受け取ります。
if (isset($_POST['Property']) && is_array($_POST['Property'])) { $Property = $_POST['Property']; }
配列を文字列にすることもできます。
どのように文字列にするのか?
implode
関数使えば、配列を文字列にしてくれます。
受け取るときにimplode
関数を使いましょう。
if (isset($_POST['Property']) && is_array($_POST['Property'])) { $output_Property = implode("、", $_POST["Property"]); }
これで 「、」で区切った文字列として受け取れます。
全てにチェックがあった場合は 「戸建て、マンション、店舗」
という文字列として受け取れます。