【问题标题】:cakephp and more than one checkboxcakephp 和多个复选框
【发布时间】:2012-01-12 06:40:22
【问题描述】:

我没有用 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 中选择它并提交时,我在控制器中只得到一个值: ... 公关($这个->数据); ...

看起来 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'], 'label'=>false , 'hiddenField'=>false, '多个'=>true)); ?>

(我将 $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”和“id”包裹了$video['Video']['id']。

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

【问题讨论】:

    标签: security cakephp checkbox


    【解决方案1】:

    看起来 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'
            ));
    

    这一切都在文档中;)

    希望对你有帮助

    【讨论】:

    • 如果我使用 foreach php 循环来创建复选框 - 或者至少,这就是我正在做的 - 是否有一种优雅的方式来创建您建议的数组?也就是说,我不知道我需要多少 多少 个复选框(这是一个删除此复选框,所以它取决于用户必须删除多少个),所以我无法对数组进行预编码你已经建议了!
    • 您可以使用Set Class 来转换您的数组并在input() 中使用它
    • 或 - 因为 Set 类对我来说往往更聪明而不是有用 - 我可以在循环中创建 array (顺便说一句,我选择了我发布的解决方案问题 - 但这是理论上的星期二!)然后,在循环之外,只需运行您建议的代码使用循环中的 arrar 作为输入!
    【解决方案2】:

    $form->input() 中的第一个参数是model.field。在第一种情况下,您没有指定该字段,因此它们都进入了 $this->data['Videos'] 而不是 $this->data['Videos']['cb1'],$this->data['Videos ']['cb2'],$this->data['Videos']['cb3'].

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

    $form-&gt;create('modelName'));

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多