0

フォームを検証するために codeigniter のフォーム検証ライブラリを試しています。問題があり、助けが必要です。1. ユーザーがフォームに入力して送信するとします。
2. 検証ライブラリは、db テーブルで重複を検出し、フィールドにエラー メッセージを設定します。
3. メッセージ付きのフォームが表示されます。
この方法では、欠点が見られます。テーブルに一意に設定された 5 つのフィールドがあるとします。そのため、検証ではクエリを実行して一意のフィールドを 5 回検索します。

他の方法 ユーザーが挿入できるようにすることで、データベースはエラーを生成します。ここでは、フォーム検証ライブラリで callback_find_duplicate 関数が呼び出されません。フォームが入力されます。この方法では、どのフィールドが重複しているかを見つけるのが難しいため、これにエラー メッセージを設定するのは面倒です。最悪の状況は、このユーザーが重複した名前を入力することです。フォームにデータが入力され、次に電子メールが入力されます。それから他のいくつかは続きます。
方法があるかどうかを調べる必要があります。または、すべてのフィールドのすべての重複を見つけるクエリを作成できますか。callback_find_duplicate を 5 回呼び出すことなく、すべてのフィールドにエラー メッセージを設定します。単一のクエリを呼び出すと、実行時間が短くなると思うからです。

4

2 に答える 2

1

form_validation は壮大ですが、他のソリューションを好むこともあります。

これを追加:

libraries/My_Form_validation.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Form_validation extends CI_Form_validation {

    /* Custom function to create errors manually
     * */
    function create_error($str_field, $str_message) {

        $str_message = t($str_message, $str_line);

        $this->_field_data[$str_field] = 
        array('error' => $str_message,
              'is_array' => FALSE,
              'postdata' => $this->CI->input->post($str_field),
              'rules' => '',
              'field' => $str_field);

        $this->_error_array[$str_field] =   $str_message;

    }

}

そして、前にコントローラーで手動で実行できます->run()

必要に応じてクエリを取得し、次のようにケースごとに if を指定します。

$arr_uniques = array('email', 'name', 'snn'); // whatev
foreach($arr_uniques as $h)
    if ($row->$h == $this->input->post($h))
        $this->form_validation->create_error($h, "{$h} is not unique!");
于 2012-05-31T09:05:04.873 に答える
0

データベースへの 5 回の呼び出しは多くありません。最初の方法は、CodeIgniter が完全にうまく処理できることを複雑にする代わりに、私が行う方法です。

于 2012-05-31T08:58:14.623 に答える