問題点 #22090

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

Added by 瀬戸 優一 about 1 year ago. Updated 4 months ago.

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

0%

Category:GitHubへ移行済
Target version:-

Description

■フィールド設定例
□ひとつめのフィールド
フィールド名: 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.8 KB) 瀬戸 優一, 07/26/2018 01:07 PM

2.png (37.6 KB) 瀬戸 優一, 07/26/2018 01:07 PM

2534
2535


Related issues

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

History

#1 Updated by 加藤 朗 about 1 year ago

加藤追記

設定を調整して、エラーメッセージを正常にしても、
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 Updated by 加藤 朗 about 1 year 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>';
}

#4 Updated by 加藤 朗 about 1 year ago

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

#5 Updated by 加藤 朗 about 1 year ago

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

#6 Updated by 江頭 竜二 4 months ago

  • Category set to GitHubへ移行済

#7 Updated by 江頭 竜二 4 months ago

  • Status changed from 担当 to 終了

Also available in: Atom PDF