[英]Codeigniter set_value() With Dynamic Multidimensional Array Inputs
[英]Why doesn't set_value() work with foo[bar][x][lorem] array inputs?
因此,假设我有一个表单,用户可以通过按+
按钮添加任意数量的狗。
形式如下:
Dog #1 <br/>
<input name="house[dogs][][name]" value="<?=set_value('house[dogs][0][name'])?>"/>
<input name="house[dogs][][age]" value="<?=set_value('house[dogs][0][age]')?>" />
Dog #2 <br/>
<input name="house[dogs][][name]" value="<?=set_value('house[dogs][1][name'])?>"/>
<input name="house[dogs][][age]" value="<?=set_value('house[dogs][1][age]')?>" />
在 CodeIgniter 上,我运行表单验证以使set_value()
也能正常工作:
$house = $this->input->post('house');
$dogs = $house['dogs'];
$i = 0;
foreach($dogs AS $dog){
$this->form_validation->set_rules("house[dogs][$i][name]", 'Dog Name', 'required');
$this->form_validation->set_rules("house[dogs][$i][age]" , 'Dog Age' , 'required');
$i++;
}
这整件事不起作用,如何使set_value()
支持这样的数组输入?
提前致谢。
您可能必须使输入name
与set_value()
的第一个参数完全相同。
一个可能不能是[]
,而另一个可以使用[0]
。
非常相关: http://codeigniter.com/forums/viewthread/179581/具有讽刺意味的是,我几个月前发表的一篇文章今天早上被撞了。
还相关: CodeIgniter:使用多维 POST 数据验证表单
<ignore>
长话短说,Codeigniter 默认情况下不能很好地处理索引字段名称。
要简单地重新填充输入并解决set_value()
的缺点,您可以尝试以下操作:
<?php
$value = isset($_POST['house']['dogs'][1]['age']) ? // was the value posted?
form_prep($_POST['house']['dogs'][1]['age']) : // if so, clean it
''; // if not, leave empty
?>
<input name="house[dogs][1][age]" value="<?php echo $value; ?>" />
由于您可能正在使用 output 这些循环,我认为这不会太麻烦。 如果你愿意,你可以填充一个单独的值数组并读取它们,你明白了。 set_value()
自动运行form_prep()
,所以这就是我添加它的原因。
我不太确定验证。 您可能必须自己进行验证,这虽然很麻烦,但应该不会太难。 请记住,您始终可以手动运行验证方法。 例子:
if ($this->form_validation->valid_email($this->input->post('email')) {}
您可能只想采取简单的方法并更改字段名称以使用单个索引,例如dog_age[]
,我相信这将使 CI 更容易处理验证。 祝你好运,希望这些天在 CI 核心中得到修复。
</ignore>
编辑:我不知道这是如何逃脱我的,但显然验证和 set_value 实际上应该按预期工作 - 不确定这是最近的更改还是问题从未真正存在过。 我绝对记得以前遇到过问题,链接的帖子表明其他人也是。 不过看看这个答案:
我测试了它(运行 2.0.2),它确实有效。 我在更改日志中看不到任何内容,但我确实对其进行了测试并且它确实有效。 确保您使用的是最新版本,然后再试一次,或者如果我在这里遗漏了什么,请告诉我们。
就像您的其他答案所说的那样,您可能只需要明确索引字段名称,例如name="house[dogs][1][name]"
而不是name="house[dogs][][name]"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.