問題点 #22093

Eメールフィールドの比較チェックの際に、エラーメッセージの出方がおかしくなる

Added by 加藤 朗 11 months ago. Updated 10 months ago.

Status:終了Start date:
Priority:通常Due date:
Assignee:-% Done:

100%

Category:-
Target version:4.1.3

Description


□メールアドレス
フィールド名: 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に「形式が無効です。」「入力データが一致していません。」が出るのが正しい)



Related issues

Copied from 問題点 #22090: メールフォーム Eメールフィールドのグループ名とフィールド名が同じ場合のエラー文の表示がおかしい 終了

Associated revisions

Revision c5d57c0f
Added by 江頭 竜二 10 months ago

fix #22093 Eメールフィールドの比較チェックの際に、エラーメッセージの出方がおかしくなる問題を解決

Revision f4579af9
Added by 江頭 竜二 10 months ago

fix #22093 Eメールフィールドの比較チェックの際に、エラーメッセージの出方がおかしくなる問題を解決(調整)

Revision cc88e427
Added by 江頭 竜二 10 months ago

fix #22093 Eメールフィールドの比較チェックの際に、エラーメッセージの出方がおかしくなる問題を解決(再調整)

History

#1 Updated by 加藤 朗 11 months ago

  • Copied from 問題点 #22090: メールフォーム Eメールフィールドのグループ名とフィールド名が同じ場合のエラー文の表示がおかしい added

#2 Updated by 加藤 朗 11 months ago

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>';
}

#3 Updated by 江頭 竜二 10 months ago

  • Status changed from 担当 to 解決
  • % Done changed from 0 to 100

更新履歴 basercms|commit:c5d57c0fd2d1afd506477bf22d235ebc2e6fb927 で適用されました。

#4 Updated by 江頭 竜二 10 months ago

  • Target version set to 4.1.3

#5 Updated by 江頭 竜二 10 months ago

  • Status changed from 解決 to 終了

Also available in: Atom PDF