「これはヤバかったな」という遅刻エピソード

初歩的な質問ですみません。
現在、PHPで問い合わせフォームを作成しており、チェックボックスが選択されていない場合に、エラーを返す処理を行いたいです。

通常のテキストフィールドの場合は、下記の文言でエラー処理が行われるのですが、
チェックボックスが選択されているかを見るにはどうすればよいかご教示いただけないでしょうか。
ーーーーーーーーーーーーーーーー
■フォーム側
{if:$required.お名前} <p>エラー文</p> {/if:$required.お名前}

■php
// 入力必須チェック
if (isset($_POST['required'])) {
foreach ($_POST['required'] as $v) {
$tmpl->set("required.$v", false);
if (empty($_POST[$v])) {
$tmpl->set("required.$v", h($v . ERROR_REQUIRED));
$global_error[] = h($v . ERROR_REQUIRED);
$global_error_flag = true;
}
}
}
ーーーーーーーーーーーーーーーー

A 回答 (1件)

チェックボックスのnameをどうしているかによりますね



そもそもチェックボックスはチェックしなければデータが飛ばないので
普通にnameをつけていればissetでチェックすればセットされていないという
分岐にひっかかるでしょう

また「hogehoge[]」的なカッコをつけたnameで拡張していれば
isset($_REQUEST["hogehoge"])すると同時に
is_array($_REQUEST["hogehoge"])もチェックする必要があります
その上で、foreachすればいいでしょう

例示のものでいうと
>if (isset($_POST['required'])) {
>foreach ($_POST['required'] as $v) {

となっているのは

if (isset($_POST['required']) and is_array($_POST['required'])) {
foreach ($_POST['required'] as $v) {

とするか

if (isset($_POST['required'])) {
foreach (is_array($_POST['required'])?$_POST['required']:array($_POST['required']) as $v) {

のようにしておくと汎用性があがります
requiredが配列だと確定しているのであれば、手を抜いて

if (isset($_POST['required'])) {
foreach ((array) $_POST['required'] as $v) {

という書き方でも通用します
    • good
    • 0
この回答へのお礼

ありがとうございました!
記載いただいたもので無事稼働しました。
もっと勉強します。。。

お礼日時:2014/07/22 23:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報