問題点 #22090

メールフォーム Eメールフィールドのグループ名とフィールド名が同じ場合のエラー文の表示がおかしい

瀬戸 優一8ヶ月前に追加. 8ヶ月前に更新.

ステータス:担当開始日:
優先度:通常期日:
担当者:-進捗率:

0%

カテゴリ:-
対象バージョン:-

説明

■フィールド設定例
□ひとつめのフィールド
フィールド名: mail_test
項目名: mail_test
タイプ Eメール
項目見出し: mail_test
入力チェック: Eメールチェック(入力必須)
拡張入力チェック: Eメール比較チェック
グループ名: mail_test
グループ入力チェック: mail_test

□ふたつめのフィールド
フィールド名: mail_test2
項目名: mail_test2
タイプ Eメール
項目見出し: mail_test2
入力チェック: Eメールチェック(入力必須)
拡張入力チェック: Eメール比較チェック
グループ入力チェック: mail_test

■エラー
□エラーA
mail_testにメールアドレス以外を入力した場合に、「1」というエラーメッセージが表示される
(添付画像1)

□エラーB
mail_testにのみ、メールアドレスを入力した場合に、「必須項目です。」というエラーメッセージが表示されず、「1」というエラーメッセージのみ表示される。
(添付画像2)

1.png (38.781 KB) 瀬戸 優一, 2018/07/26 13:07

2.png (37.564 KB) 瀬戸 優一, 2018/07/26 13:07

2534
2535

関連するチケット

コピー先 問題点 #22093: Eメールフィールドの比較チェックの際に、エラーメッセージの出方がおかしくなる 終了

履歴

#1 加藤 朗8ヶ月前に更新

加藤追記

設定を調整して、エラーメッセージを正常にしても、
Eメールフィールドの比較チェックの際に、エラーメッセージの出方がおかしくなる

□メールアドレス
フィールド名: email_1
グループ名:
グループ入力チェック: email

□確認用メールアドレス
フィールド名: email_2
グループ名: email
グループ入力チェック: email

email_2にメールアドレスを入れ email_1を空のままにすると
email_2に「必須項目です。」と出る
(email_1 に「必須項目です。」と出るのが正しい)

email_1にメールアドレスを入れ email_2に a と入れると
email_2に「入力データが一致していません。」と出るが、
email_1に「形式が無効です。」と出る
(email_1には何も出ない、もしくは「入力データが一致していません。」と出て、
email_2に「形式が無効です。」「入力データが一致していません。」が出るのが正しい)

#2 加藤 朗8ヶ月前に更新

E-mail比較チェックにチェックを入れると
・入力必須
・E-Mail形式の判定
の判定まで、E-mail比較チェックで行い、グループの一番最後に表示しようとするのでおかしな場所にエラーメッセージが出力されてしまう。

機能を切り分ける必要があります。
・入力必須
・E-Mail形式の判定
はそれぞれのフィールドで判定し、
一致するかどうかの判定だけをE-mail比較チェックで行う必要があります。

下記のようなコードでビュー側(mail_input.php)から
E-mail比較チェックで行ってしまう余計な処理を消し、
フィールドごとの処理を出力してやるようにすることで、一時対応は可能

// email比較チェックでは何故か「必須項目です」が表示されないので追記」
if($this->data['MailMessage'][$field['field_name']] == "") {
    echo $this->Mailform->error("MailMessage." . $field['field_name'] , __("必須項目です。"));
} else {
    // 必須以外のメッセージも表示
    echo $this->Mailform->error("MailMessage." . $field['field_name']);
}

/* 説明欄 */
if (($this->BcArray->last($mailFields, $key)) ||
    ($field['group_field'] != $mailFields[$next_key]['MailField']['group_field']) ||
    (!$field['group_field'] && !$mailFields[$next_key]['MailField']['group_field']) ||
    ($field['group_field'] != $mailFields[$next_key]['MailField']['group_field'] && $this->BcArray->first($mailFields, $key))) {

    if ($field['group_valid']) {
        // email比較チェックは'group_field'ではなく'group_valid'
        echo $this->Mailform->error("MailMessage." . $field['group_valid'] . "_not_same", __("入力データが一致していません。"));
        echo $this->Mailform->error("MailMessage." . $field['group_field'] . "_not_complate", __("入力データが不完全です。"));

        if (!$this->Mailform->error("MailMessage." . $field['group_field'] . "_not_same")
            && !$this->Mailform->error("MailMessage." . $field['group_field'] . "_not_complate")) {
            $groupValidErrors = $this->Mailform->getGroupValidErrors($mailFields, $field['group_valid']);
            if ($groupValidErrors) {
                foreach ($groupValidErrors as $groupValidError) {
                    // email比較チェックではグループ全体でメール形式のチェックを行う必要はない
                    echo $groupValidError == '<div class="error-message">形式が無効です。</div>' ? '':$groupValidError;
                }
            //必須判定は個別に行うので、'group_valid'の処理はここまで
            } else {
                if(!$field['group_valid']){
                    echo $this->Mailform->error("MailMessage." . $field['group_field'], __("必須項目です。"));
                }
            }
        }
    }

    echo '</span>';
    echo "</td>\n    </tr>\n";
} else {
    echo '</span>';
}

#4 加藤 朗8ヶ月前に更新

  • コピー先 問題点 #22093: Eメールフィールドの比較チェックの際に、エラーメッセージの出方がおかしくなる を追加

#5 加藤 朗8ヶ月前に更新

問題を切り分けるため、
Eメールフィールドの比較チェックの際に、エラーメッセージの出方がおかしくなる問題は別チケットに移しました。
http://project.e-catchup.jp/issues/22093

他の形式にエクスポート: Atom PDF