cakephp和多个复选框

时间:2012-01-12 06:40:23

标签: security cakephp checkbox

我没有做任何与habtm相关的事情。

我想要做的是在cakephp中有多个复选框,并且,好吧,使用它们。

所以我在我看来有这个代码:

<div class="deleteButton">
    <?php echo $form->input('', array('type'=>'checkbox',
    'value'=>$video['Video']['id'], 'label'=>false, 'hiddenField'=>false,
    'id'=>false, 'multiple'=>true)); ?>
</div>

这在渲染页面中给了我这个html:

<input type="checkbox" value="30" name="data[Videos]">
<input type="checkbox" value="31" name="data[Videos]">
<input type="checkbox" value="32" name="data[Videos]">

现在,当我在html中选择并提交时,我只在控制器中获得一个值:     ...     PR($这 - &GT;数据);     ...

看起来像cakephp正在以某种方式覆盖存储的值,因为我获得的ONE值始终是最后检查的复选框值。

我做错了什么?

更新:哦,上帝​​,我讨厌cakephp

使用此:http://nuts-and-bolts-of-cakephp.com/2008/05/05/multiple-checkboxes/

或者更确切地说,这::     输入($ video ['Video'] ['id'],数组('type'=&gt;'复选框','值'=&gt; $ video ['视频'] ['id'],'标签'= &gt; false,'hiddenField'=&gt; false,'multiple'=&gt; true)); ?&GT;

(我将$ video ['Video'] ['id']作为第一个条目,显然是ids)

我的请求现在被Cakephp在安全组件中完全荒谬的黑洞搞黑了。老实说,为什么404页面没有可切换的错误?现在我必须弄清楚如何从中获得有意义的错误...

欢迎任何想法!

更新:解决: 嗯,我需要:

<?php echo $form->input("Video".$video['Video']['id']."id", array('type'=>'checkbox', 'value'=>$video['Video']['id'], 'label'=>false, 'hiddenField'=>false, 'multiple'=>true)); ?> 

也就是说,我将$ video ['Video'] ['id']包装成“Video”和“id”。

NFI为什么这样有效,任何人都有任何想法,我会把你标记为正确!

2 个答案:

答案 0 :(得分:4)

  

看起来像cakephp正在以某种方式覆盖存储的值,因为我得到的ONE值始终是最后检查的复选框值。

这不是蛋糕的错...如果你有两个或多个具有相同名称的输入(在你的情况下'数据[视频]'),php将只使用最后一个值来创建$ _POST变量..它比如在GET请求中执行类似的操作:

mysite.com/intex.php?attr=1&attr=2&attr=3

您通过在字段名称中添加视频ID来解决此问题。所以现在生成的html就像:

<input type="checkbox" value="30" name="data[Videos1]">
<input type="checkbox" value="31" name="data[Videos2]">
<input type="checkbox" value="32" name="data[Videos3]">

如您所见,现在所有输入名称都不同,没有任何内容被覆盖。

但是,您可以使用“multiple”选项和“options”选项仅使用一个语句创建所有复选框,而不是自己提供名称。类似的东西:

echo $this->Form->input('video',array('options'=> array('Value 1'=>'Label 1',
                                                       'Value 2'=>'Label 2',
                                                       'Value 3'=>'Label 3'
                                                       ),
                                      'multiple' => 'checkbox'
        ));

一切都在文档中;)

希望这有帮助

答案 1 :(得分:0)

$ form-&gt; input()中的

第一个参数是model.field。在第一种情况下,你没有指定字段,所以他们都进入$ this-&gt; data ['Videos']而不是$ this-&gt; data ['Videos'] ['cb1'],$ this-&gt; data [ '画'] [ 'CB2'],$这 - &GT;数据[ '画'] [ 'CB3']

即使您使用模型创建表单:

$form->create('modelName'));

指定字段也是一个好习惯:

$form->input('modelName.fieldname', array());