- ベストアンサー
複数のチェックボックスの確認
初心者です。よろしくお願いします。 <form></form>の送信時の確認作業で困っています。 送信される前にチェックボックスにチェックがされていない場合エラーを出したいのですが、一つだった場合は if($_POST[xxx] == ""){ エラー } とすれば簡単にできるのですが、 チェックボックスが100個ほどあった場合どのような書き方をすれば良いのでしょうか。 100個の内一つでもチェックがされていればOKとしたいのです。nameの値は1から順に100まで振ってあります。 よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
melllさん、こんにちは。 <input type="checkbox" name="name1"> <input type="checkbox" name="name2"> となっている場合は <?php $i = 1; while(! isset($_POST["name{$i}"])) { if($i == 100) { エラー } $i++; } チェックボックスの値は選択されていなければデータが送信されません。 ですので、name1~name100としている場合は、データが送信されているか どうかを1から順番にチェックし、100まで送信されていなければ初めて エラーを出すことができます。 チェックボックスが多ければ多いほど処理に時間がかかります。 <input type="checkbox" name="name[1]"> <input type="checkbox" name="name[2]"> となっている場合は <?php if(! isset($_POST['name'])) { エラー } //nameというデータが送信されていない //if(! isset($_POST['name'])) { // エラー //} else { // //nameが配列ではない // if(! is_array($_POST['name'])) { // エラー // //nameのうち1つもチェックされていない(配列が空) // } else if(count($_POST['name']) == 0) { // エラー // } //} ?> 先ほども書きましたが、チェックボックスの値は選択されていなければデータが送信されません。 この例ではnameを配列(name[])としているため受取り側では配列として処理できます。 よって 「nameが送信されている=少なからず1つはチェックされている」 ということになります。 しっかりとチェックしたい場合はコメントにしている方を使った方が 良いかもしれません。
その他の回答 (1)
- punipunipuniko
- ベストアンサー率20% (2/10)
例えば <form name="aho" action="aho.php" method="post"> <input type="baka[]" value="1"> <input type="baka[]" value="2"> <input type="baka[]" value="3"> <input type="baka[]" value="4"> ・・・・・ <input type="baka[]" value="100"> <input type="submit" value"押して"> </form> だったら ~aho.php~ if( count($_POST["baka"]) <= 0 ){ echo "1個はえらんでよ!!"; } みたいにすればいいんじゃないですか?
お礼
ありがとうございます。 value値ではなかったのですが、countでのチェックの方法も知りませんでしたので勉強になりました。 ありがとうござました。
お礼
ありがとうございます。 お陰でエラーを出すことができました。 ご丁寧にありがとうございました。