是我做错了,还是在使用数组作为字段名时 CodeIgniter 表单验证库中存在错误?

Posted

技术标签:

【中文标题】是我做错了,还是在使用数组作为字段名时 CodeIgniter 表单验证库中存在错误?【英文标题】:Am I doing this wrong, or is there a bug in the CodeIgniter Form Validation library when using arrays as field names? 【发布时间】:2011-11-17 17:32:40 【问题描述】:

这是我配置规则的控制器代码:

// Previous address(es)         
$this->form_validation->set_rules('prev_house_number[]',    'House Number',     'trim|alpha_numeric');
$this->form_validation->set_rules('prev_abode[]',           'Abode',            'trim');
$this->form_validation->set_rules('prev_house_name[]',      'House Name',       'trim');
$this->form_validation->set_rules('prev_address_line_1[]',  'Address Line 1',   'required|trim');
$this->form_validation->set_rules('prev_address_line_2[]',  'Address Line 2',   'trim');
$this->form_validation->set_rules('prev_city[]',            'Town/City',        'required|trim');
$this->form_validation->set_rules('prev_county[]',          'County',           'trim');
$this->form_validation->set_rules('prev_postcode[]',        'Postcode',         'required|max_length[9]|trim');
$this->form_validation->set_rules('prev_country[]',         'Country',          'trim');
$this->form_validation->set_rules('prev_months[]',          'Previous Months',  'trim|integer');
$this->form_validation->set_rules('prev_years[]',           'Previous Years',   'trim|integer');

用户最多可以输入 5 个以前的地址,如下所示:

地址行 1 字段后面的代码如下所示:

<div class="input w100 f-left c-none">
    <input type="text" class="address_line_1 postcode_prev_address_1" id="prev_address_line_1[]" name="prev_address_line_1[]" value="<?php echo set_value('prev_address_line_1[]');?>"/>
    <label for="prev_address_line_1[]">Address Line 1 <span class="required">*</span></label>
</div>

问题出在这里:假设我输入了 5 个地址,但表单上的验证失败,所有五个输入区域都将按预期正确重新填充。 但是,CodeIgniter 的验证不适用于阵列输入

这是验证后的直接截图:

如您所见,尽管它使用正确的值重新填充表单,但它不会对它们应用验证规则,并且似乎无法从控制器中识别它们的存在。

我能做什么?

谢谢!

杰克

【问题讨论】:

是的,这是一个错误。我相信它已经在 2.1(在 GitHub 上开发)中得到了解决,但不要引用我的话。 感谢菲尔澄清。我去看看 Git 上的变化! 很抱歉很痛苦,但我正在努力在 Github 上的任何地方找到任何解决方案。你能指出我正确的方向吗? 在提交历史中搜索文件:github.com/EllisLab/CodeIgniter/commits/develop/system/… 【参考方案1】:

看起来这是 Phil 所说的提交:https://github.com/EllisLab/CodeIgniter/commit/5c561805bd9ae6a4ad5d202277c34a879617b683#system/libraries/Form_validation.php

尝试从表单验证库的开发分支中提取代码,看看它是否能解决问题。

【讨论】:

以上是关于是我做错了,还是在使用数组作为字段名时 CodeIgniter 表单验证库中存在错误?的主要内容,如果未能解决你的问题,请参考以下文章

mongoDB有重新连接问题还是我做错了?

mongoDB有重新连接问题还是我做错了?

Cray 指针和数组的分段错误:我做错了啥?

Sed 不匹配反斜杠文字还是我做错了啥?

单对象 json 解析 - 我做错了啥?

find() STL 算法...我做错了啥?