今回はPHPでチェックボックスを使用する際の記事になります。
チェックボックスは例えば利用規約の同意チェックなどに使われるかと思います。
しかしチェックボックスにチェックしていない場合の値の渡し方には少し注意が必要です。
チェックなしの場合にも簡単に値を渡す方法を紹介していきます。
チェックボックスでチェックなしの値を渡す方法
それでは早速具体的な方法で確認しながら紹介していきます。
エラーとなってしまう、チェックなしの値を渡せないケース
まずはエラーとなってしまう事例を紹介します。
以下コードはチェックボックスを生成するコードです。
<?php
echo $_POST['checkbox_name'];
?>
<form action="./index.php" method="post">
<input type="checkbox" name="checkbox_name" id="" value="1">チェックテスト
<button type="submit">送信</button>
</form>
画面はこんな感じになっています。
「送信」をクリックすると、POSTで「name=”checkbox_name”」の値が飛びます。
チェックボックスを入れて送信した場合、「$_POST[‘checkbox_name’]」には「1」が入ります。
しかし、チェックボックスにチェックを入れずに「送信」をクリックすると、エラーが出ます。
チェックしない場合、「$_POST[‘checkbox_name’]」には値が入っていないのでエラーになってしまいます。
同じname属性のhidden要素を追加して解決
先ほどのエラーを解決する一番スマートな方法は「同じname属性のhidden要素を追加」するです。
コードは以下のようになります。
<?php
echo $_POST['checkbox_name'];
?>
<form action="./index.php" method="post">
<!-- 同じname属性のhidden要素を追加 -->
<input type="hidden" name="checkbox_name" id="" value="0">
<input type="checkbox" name="checkbox_name" id="" value="1">チェックテスト<br>
<button type="submit">送信</button>
</form>
hidden要素でvalueを設定しておきます。
hidden要素なので見た目上は変わりません。
同じname属性のhidden要素を追加することで、チェックボックスにチェックがなかった場合に、hidden要素の値を取るようになります。
上の例でいくと、チェックした場合は「$_POST[‘checkbox_name’]」が「1」、チェックしなかった場合は「0」となります。
注意点としては、hidden要素を必ず前に配置することです。
同じname属性の要素より後に配置するとうまく動作しないので注意が必要です。
isset()関数でも実現できるけど•••
PHPのisset()関数を使って以下のように「$_POST[‘checkbox_name’]」がセットされていない場合の処理を作成することもできます。
<?php
if (isset($_POST['checkbox_name'])) {
$checkbox_value = $_POST['checkbox_name'];
} else {
$checkbox_value = "";
}
?>
こうすると、チェックが入っていない場合に空の文字列が「$checkbox_value」に代入されるようになっています。
しかし、これはコードも長くなりがちです。
チェックボックスが多い場合などはなおさらです。
先ほど紹介したhiddenのやりかたの方がコードも短く、可読性も高いかと思います。
まとめ
いかがだったでしょうか。
自分はこのチェックボックスのチェックしないときの値の出し方にとても悩んだ記憶があります。(笑)
なるべくスマートなコードにするならhiddenのやり方がおすすめです。
知っていれば即解決できることなので誰かのお役に立てれば幸いです。
エンジニアにおすすめ書籍
エンジニアになりたて、これから勉強を深めていきたいという方におすすめの書籍はこちら!