質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Q&A

解決済

2回答

364閲覧

3項目入れずれかに値があればエラーにする方法

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

0グッド

0クリップ

投稿2020/02/13 05:46

前提・実現したいこと

CakePHP2を使っています。

バリデーションチェックの話ですが、
入力項目がA,B,Cと3つあり、3項目のうち1つでも入力値が入っていれば残りの2項目も必須チェックを行いたいのですが、
良い方法が思いつきません。

例えばですが、
・Aに値が入っており、BとCに値が入っていない場合はエラーにする。
・A,B,Cに値が入っていない場合はエラーなし。
・A,B,Cに値が入っている場合もエラーなし。

試したこと

以下のように3つの項目をチェックする関数を作りましたが、
複雑な見た目になってしまいました。

function checkThreeItems($item1, $item2, $item3) { if (!empty($item1)) { if (!empty($item2)) { if (empty($item3)) { // エラー } } else { // エラー } } else if (!empty($item2)) { if (!empty($item3)) { if (empty($item1)) { // エラー } } else { // エラー } } else if (!empty($item3)) { // エラー } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

azuapricot

2020/02/13 05:56

3つ入力されてない場合はチェックなし、 それ以外はABC全て必須チェックする、ではだめなのでしょうか。 質問文からはどうしたいのか読み取れません。
m.ts10806

2020/02/13 06:02

↑このほうがシンプルですね。
m.ts10806

2020/02/13 06:07

ただ、なぜ手動でバリデートしてるのかなと
m.ts10806

2020/02/13 19:20

https://teratail.com/help/question-tips#questionTips4-2 全て検証したうえで「解決済み」としてください。 私は前提条件無視で単に「今のコードをシンプルに書く」だけに特化しています。 本来でしたらそもそも手動でチェックしているのがおかしいのです。
guest

回答2

0

ベストアンサー

シンプルに考えると「どれかが空じゃないときにどれかが空ならエラー」ですよね。

こんな感じではどうでしょう

php

1if ( 2 (!empty($item1) || 3 !empty($item2) || 4 !empty($item3)) 5 && 6 (empty($item1) || 7 empty($item2) || 8 empty($item3)) 9 ) { 10 //エラー 11}

投稿2020/02/13 05:57

編集2020/02/13 05:57
m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/02/13 19:20 編集

前提条件がないのでそこまで考慮してないですね。 あくまでコードをシンプルに書いただけです。 CakePHPでなぜ手動チェックしてるのかというところもあるし、 そもそも質問者さんが無言で終わらせてるので、議論の余地もないという。
退会済みユーザー

退会済みユーザー

2020/02/13 21:55

②だから
guest

0

要するに、$item1,$item2,$item3で値が入っている数をカウントし、
1~2であればエラーということですよね?

php

1$count = 0; 2$count += (!empty($item1) ? 1 : 0); 3$count += (!empty($item2) ? 1 : 0); 4$count += (!empty($item3) ? 1 : 0); 5if ($count >= 1 && $count <= 2 ) { 6 // エラー 7}

投稿2020/02/13 05:59

Y.H.

総合スコア7918

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問