• ベストアンサー

3項目の入力確認

例えば生年月日の入力フォームで ・西暦 ・月 ・日 の3つがあるとした場合に、 ・全てに入力があった場合はTRUE ・全てに入力がなかった場合もTRUE ・どれか1つ以上に入力があり、どれか1つ以上に入力がなかった場合にFALSE のような処理をしたい場合、どのようにしたら良いでしょうか。 ゴリゴリにif文で切り分ける方法は思い浮かぶのですが、もっとスマートな方法がある気がします。。。

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.1

function has_valid_post(array $args, $default = '') { ____foreach ($args as $name) { ________if ( ____________!isset($_POST[$name]) || ____________!is_string($_POST[$name]) || ____________$_POST[$name] === $default ________) { ____________return false; ________} ____} ____return true; } function has_no_valid_post(array $args, $default = '') { ____foreach ($args as $name) { ________if ( ____________isset($_POST[$name]) && ____________is_string($_POST[$name]) && ____________$_POST[$name] !== $default ________) { ____________return false; ________} ____} ____return true; } $args = array('year', 'month', 'day'); $default = '選択▼'; if (has_valid_post($args, $default) || has_no_valid_post($args, $default)) { ____.... } else { ____.... } ぐらいしか思いつきませんねぇ・・・ 備考 http://qiita.com/mpyw/items/2f9955db1c02eeef43ea http://qiita.com/mpyw/items/c39b9ee695a5c2e74627

drm54
質問者

お礼

さっそく有難うございます! 拝見してたら、なんかフッとよぎったので、下記方法で実装しました。 //カウント用の変数 $birthday_count_flag = 0; //年 $birthday_y = trim($_POST['birthday_y']); if($birthday_m !== '') $birthday_count_flag++; //月 $birthday_m = trim($_POST['birthday_m']); if($birthday_m !== '') $birthday_count_flag++; //日 $birthday_d = trim($_POST['birthday_d']); if($birthday_d !== '') $birthday_count_flag++; //処理 if($birthday_count_flag > 0 && $birthday_count_flag < 3){ //1つ以上の未記載がある場合 } else { //全て記載 or 全て未記載の場合 } インスピレーションになりました!ありがとうございます。

関連するQ&A