cakephp复选框多选只发送最后选中复选框的值

时间:2012-04-06 22:32:12

标签: cakephp cakephp-1.3 cakephp-2.0

我没有获得所有选中复选框的值。它只是给我最后一个选中复选框的值

这是代码

foreach($apps as $app){


        echo $this->Form->input('Application.id', array('type'=>'checkbox','multiple' => 'checkbox' , 'id'=>$app['Application']['description'], 'div'=>false,'type'=>'checkbox','value' => $app['Application']['description'],'label'=>$app['Application']['description']));



    }

在提交时,我得到最后一个复选框,即LASTCHECKBOX

object(CakeRequest) {
    params => array(
        'plugin' => null,
        'controller' => 'groups',
        'action' => 'add',
        'named' => array(),
        'pass' => array()
    )
    data => array(

        'Application' => array(
            'id' => 'LASTCHECKBOX'
        )

    )
    query => array()
    url => 'groups/add'
    base => ''
    webroot => '/'
    here => '/groups/add'
}

2 个答案:

答案 0 :(得分:1)

我认为这是因为“价值”。

在您的情况下使用"options" => array(1, 2, 3)

你最好不要在视图中设置值,默认值或类似值。 使用控制器操作来设置默认值。 它应该工作得很好。

if ($this->request->isPost()) {

} else {
    $this->request->data['Model']['fieldname'] = 'defaultvalue';
}

答案 1 :(得分:1)

对于多个复选框,您需要将[]作为HMTL属性名称的最后一部分(有关详细说明,请参阅此answer)。

这是在CakePHP中使用'select'类型的输入完成的。如果您查看Form Helper select documentation for 2.0(但也适用于v1.2 +),则不需要使用复选框创建多重选择所需的循环:

<?php
$options = array(
    'Value 1' => 'Label 1',
    'Value 2' => 'Label 2'
);
echo $this->Form->select('Model.field', $options, array(
    'multiple' => 'checkbox'
));
?>

因此,我认为您不需要foreach($apps您需要修改$ app,其格式与$options类似。

<?php
$apps = array(
    'App Id 1' => 'Description 1',
    'App Id 2' => 'Description 2'
);
echo $this->Form->select('Application.id', $apps, array(
    'multiple' => 'checkbox'
));
?>

应该输出:

<div class="input select">
   <label for="ApplicationId">Id</label>
   <input name="data[Application][id]" value="" id="ApplicationId" type="hidden">
   <div class="checkbox">
      <input name="data[Application][id][]" value="App Id 1" id="ApplicationId1" type="checkbox">
      <label for="ApplicationId1">Description 1</label>
   </div>
   <div class="checkbox">
      <input name="data[Application][id][]" value="App Id 2" id="ApplicationId2" type="checkbox">
      <label for="ApplicationId2">Description 2</label>
   </div>
</div>