Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Codeigniter表单验证通过值而不是字段名_Javascript_Jquery_Forms_Codeigniter - Fatal编程技术网

Javascript Codeigniter表单验证通过值而不是字段名

Javascript Codeigniter表单验证通过值而不是字段名,javascript,jquery,forms,codeigniter,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-loa

我使用的是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");
});

这些是我试图设置规则的尝试,但没有一个有效

我还没有测试过,但应该有效

$("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");
});
代码无法工作的原因是,Form_验证将在$_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]');
}

但我不能说这肯定会奏效。

我不知道您的问题是否来自javascript方面,但无论如何,请尝试发送整个表单,而不是像以下var data=$'app-options-form'。序列化;谢谢你的回答。我明白你想说什么,但这不是一个选择。我必须以对象或数组的形式发送所有这些信息。输入字段的名称是动态生成的,所以我需要将它们放在一个数组中。一旦我在PHP中收到这些数据,我不知道我有哪些输入字段,所以我必须用foreach循环这个数组。谢谢你的回答,但我想你没有明白这里的问题是什么。如果我有一个字段,例如name=username,通过序列化,它将作为$\u POST['username']发送。但是我需要它在一个数组中,比如$u POST['data']['username']。我的Javascript代码还可以,它的工作原理与预期的一样。但我的问题更多的是如何将这些数据传递到codeigniter的验证表单。我想绕过它的set_rules函数来提供值而不是字段名。我想绕过它的set_rules函数来提供值而不是字段名是什么意思?为什么?我的英语不好,所以我不知道如何表达自己。所以,我有很多输入,它们是按平日制创建的。他们的名字也是以正统的方式产生的。所以在PHP中,我不知道需要处理多少字段以及它们的名称属性,所以我必须将其放入数组中,才能循环遍历所有字段。例如,如果我有3个领域,我的名字属性是:1-3-1,2-5-3,3-5-4。如果我以$u POST['1-3-1']=某个值等形式发送它们,我将如何在PHP中获取它们?我不知道这个名字1-3-1。所以我必须以数组的形式发送它,比如$u POST['data']['1-3-1']=一些值……我用我的PHP代码更新了我的原始问题,请看一看。谢谢,我不知道我可以用foreach和$this->input->POST一起使用。我会试试这个,它应该有用。
foreach ($this->input->post() as $key => $value) {
    $this->form_validation->set_rules($key, 'Vrijednost', 'trim|xss_clean|max_length[5]');
}
$data = $this->input->post('data');

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