cakephp 和多个复选框

bha*_*ral 0 security checkbox cakephp

我不会对 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>
Run Code Online (Sandbox Code Playgroud)

这在渲染页面中给出了这个 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]">
Run Code Online (Sandbox Code Playgroud)

现在,当我在 html 中选择它并提交时,我在控制器中只得到一个值: ... pr($this->data); ...

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

我究竟做错了什么?

更新:天啊我讨厌cakephp

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

或者更确切地说,这个:: input($video['Video']['id'], array('type'=>'checkbox', 'value'=>$video['Video']['id'], '标签'=>假,'隐藏字段'=>假,'多个'=>真));?>

(我将 $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)); ?> 
Run Code Online (Sandbox Code Playgroud)

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

NFI 为什么这样有效,任何人有任何想法,我都会标记你是对的!

ple*_*ong 5

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

这不是蛋糕的错...如果您有两个或多个具有相同名称的输入(在您的情况下为“data[Videos]”),php将仅使用最后一个值来创建 $_POST 变量..它就像在如果您执行以下操作,则会收到 GET 请求:

mysite.com/intex.php?attr=1&attr=2&attr=3
Run Code Online (Sandbox Code Playgroud)

您通过在字段名称中添加视频 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]">
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,现在所有输入名称都不同,并且没有任何内容被覆盖。

但是,您可以使用“ multiple ”选项和“ options ”选项仅使用一个语句来创建所有复选框,而不是自己给出名称。就像是:

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

这一切都在文档中;)

希望这可以帮助