繁体   English   中英

为什么 set_value() 不适用于 foo[bar][x][lorem] 数组输入?

[英]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()支持这样的数组输入?

提前致谢。

您可能必须使输入nameset_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 实际上应该按预期工作 - 不确定这是最近的更改还是问题从未真正存在过。 我绝对记得以前遇到过问题,链接的帖子表明其他人也是。 不过看看这个答案:

CodeIgniter:使用多维 POST 数据验证表单

我测试了它(运行 2.0.2),它确实有效。 我在更改日志中看不到任何内容,但我确实对其进行了测试并且它确实有效。 确保您使用的是最新版本,然后再试一次,或者如果我在这里遗漏了什么,请告诉我们。

就像您的其他答案所说的那样,您可能只需要明确索引字段名称,例如name="house[dogs][1][name]"而不是name="house[dogs][][name]"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM