Codeigniter表单验证传递值而不是字段名称

时间:2014-08-07 10:08:12

标签: javascript jquery forms codeigniter

我正在使用Codeigniter,我有一个包含大量输入字段的动态创建表单。我正在使用jQuery和AJAX提交表单,我将表单中的所有数据作为对象传递。这是我的jQuery代码:

$('body').on("submit", "#app-options-form", function(evnt){
    // Show loader while AJAX is loading
    $('.response-container').html('<img class="response-loader" src="<?php echo base_url();?>/img/loader.gif" >');

    // Prevent form submission
    evnt.preventDefault();

    // Get all form inputs
    var inputs = $('#app-options-form :input[type="text"]');

    // Put them in object as name=>value
    var data = {};

    for(i=0; i<inputs.length; i++) {
        data[inputs[i]["name"]] = inputs[i]["value"];
    }

    // Generate POST request
    $.post("<?php echo site_url("admin/ajax_app_options"); ?>",
    {"edit_form_submited" : true, "data" : data},
    function (data) {
        $('.response-container').html(data.result);
    }, "json");
});

我在验证该表单时遇到了困难。如果我将字段名称作为set_rules()的参数,它将无法工作,因为它将查找$ _POST ['field_name'],但这不存在。该字段的值传递为$ _POST ['data'] ['field_name'],因为我将所有输入作为一个名为“data”的对象传递。

那么,有没有办法验证这个表格?

编辑:

我的PHP代码:

// Get received data, here are all the input fields as $field_name=>$field_value
$data = $this->input->post('data');

// Try no. 1 for setting the rules
foreach($data as $key=>$value)
{
    $this->form_validation->set_rules($key, 'Vrijednost', 'trim|xss_clean|max_length[5]');
}

// Try no. 2 for setting the rules
foreach($data as $key=>$value)
{
    $this->form_validation->set_rules($value, 'Vrijednost', 'trim|xss_clean|max_length[5]');
}

// Try no. 3 for setting the rules
foreach($data as $key=>$value)
{
    $this->form_validation->set_rules($this->input->post('data')['$key'], 'Vrijednost', 'trim|xss_clean|max_length[5]');
}

这些是我尝试设置规则,但没有一个工作

1 个答案:

答案 0 :(得分:0)

我没有测试过这个,但它应该可以工作!

$("body").on("submit", "#app-options-form", function() {

    // Prevent form submission
    evnt.preventDefault();

    // Show loader while AJAX is loading
    $('.response-container').html('<img class="response-loader" src="<?php echo base_url();?>/img/loader.gif" >');

    var form = $(this).serializeArray();
    var data =  {data: form};

    $.post("<?php echo site_url('admin/ajax_app_options'); ?>", data, function(response) {
        $('.response-container').html(response.result);
    }, "json");
});

使用$.post发送序列化字符串时,它会在另一端以数组形式出现:)

希望这有帮助!

修改后

从上面的

中移除var data = {data: form};

然后用php做:

foreach ($this->input->post() as $key => $value) {
    $this->form_validation->set_rules($key, 'Vrijednost', 'trim|xss_clean|max_length[5]');
}

您编码的原因是不可行的,因为Form_validation将在$_POST数组中查找密钥,但需要查看$_POST['data']内部的密钥。

另一个选项(这将是毫无意义的,但在使用数据数组之后)将是:

$data = $this->input->post('data');

foreach ($data as $key => $value) {
    $this->form_validation->set_rules("data[$key]", 'Vrijednost', 'trim|xss_clean|max_length[5]');
}

我不能说这肯定会奏效。