4

私がやろうとしていることは非常に単純です (願っています): Form_Validation
を使用して POST データ (またはvariableを介して提供されるデータ) を検証しようとしています。
問題は、実際の検証を実行するには、私/私たちが行う必要があることです

if ($this->form_validation->run() == FALSE){
 //validation did not pass
}else{
 //validation did pass
}

私の一連のルールは次のようなものです:

$this->form_validation->set_rules('key', '', 'trim|required'); //simplified

だから、明らかにこのスクリプトにAJAX経由でデータを送信しています

echo $_POST['key']; //prints valid value that is sent from AJAX

form_validation を使用して $_POST['key'] を検証するにはどうすればよいですか?

AJAX コード

$("#key-inputs .short, #key-inputs .long").change(function () {
        var key = $(this).val();
        var id = $(this).attr('name');
        var table = $(this).attr('class');
        var file = $('span .file').val();
        var data = 'NULL';
        $.post(file + "/edit",{
                        id:id,
                        key:key,
                        file:file,
                        table:table},
                        function(code, textStatus) {
                        data = code;
        });
        $(this).ajaxStop(function(){
            if (data == 3) $(this).parent().fadeOut('slow', function() {}); //delete
            if (data == 2) $(this).fadeOut(200).fadeIn(200); //update
            if (data == 5) alert('not valid'); //update parameter is not valid input (depends on set_value rules)
            //writeConsole(previous.val().outerHTML);
        });
    });

PHPコード//簡略化

if (!$this->input->is_ajax_request()) redirect('lang/translate/keys/'.$param);
          //do work here
         if ($key == "") {
          //delete key
            $this->lang_translate_model->DeleteKey($id, $table);
            echo 3;
            return TRUE;
         }
         $this->form_validation->set_rules('key', 'key', 'trim|required|max_length[56]|xss_clean|unique_file[lang_key:'.$param.']');
         if ($this->form_validation->run() == FALSE){
          //validation did not pass
          echo 5;
        }

だから私はいくつかの(生成された)入力を持っています..set_rulesが合格した場合にのみ、変更時にDBで更新したいと思います。
入力が空の場合、それ自体が削除されます (これは正常に機能します)

ソリューション
TRUE/FALSE テーブルはこちら

if ($this->form_validation->required($key)){
          //validation did not pass
          echo 5;
}

たとえば、渡すパラメータがある場合min_length[2]

$this->form_validation->min_length($key,'2');
4

2 に答える 2

3

使用している codeigniter のバージョンによって異なります

コードイグナイター 3.0 :

set_dataメソッドを使用して、カスタム データを検証できます

$data = array(
        'username' => 'johndoe',
        'password' => 'mypassword',
        'passconf' => 'mypassword'
);

$this->form_validation->set_data($data);

コードイグナイター 2.X :

$_POST値を手動で設定する

   $_POST'username']  = 'johndoe';
   $_POST['password'] ='mypassword';
   $_POST['passconf'] = 'mypassword';

一般 :

ありがたいことに、共通部分については、両方ともまだ使用 form_validation->run()しており、 form_validation->set_rules(<SPECIFIC ATTRIBUTE RULES>)

于 2015-04-26T10:01:21.970 に答える
2

これを参照してください。また、そのページの下にある注意事項も確認してください。

于 2012-08-03T09:15:35.657 に答える