我正在使用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]');
}
这些是我尝试设置规则,但没有一个工作
答案 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]');
}
我不能说这肯定会奏效。