Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP:FormHelper不保存来自两个同名输入的数据_Php_Forms_Cakephp_Cakephp 2.0 - Fatal编程技术网

CakePHP:FormHelper不保存来自两个同名输入的数据

CakePHP:FormHelper不保存来自两个同名输入的数据,php,forms,cakephp,cakephp-2.0,Php,Forms,Cakephp,Cakephp 2.0,在我的表单中有一长行复选框,我想将其显示为两列复选框(出于与演示相关的原因)。因此,在下面的代码中,我将选项拆分为两个单独的数组,并使用相同的名称创建两个不同的选项。当我调试时($this->request->data)位置键始终为空。但是,相同的代码可以作为单个输入正常工作。我做错了什么 <?php $count = count($location_options); //$location_options is passed from the controller $half = ro

在我的表单中有一长行复选框,我想将其显示为两列复选框(出于与演示相关的原因)。因此,在下面的代码中,我将选项拆分为两个单独的数组,并使用相同的名称创建两个不同的选项。当我调试时($this->request->data)位置键始终为空。但是,相同的代码可以作为单个输入正常工作。我做错了什么

<?php
$count = count($location_options); //$location_options is passed from the controller
$half = round( $count/2 );

$location_options1 = array_slice($location_options, 0, $half, TRUE);
$location_options2 = array_slice($location_options, $half, NULL, TRUE);

//I CAN'T GET THIS TO WORK!!
//echo $this->Form->input('location', array('type'=>'select', 'multiple'=>'checkbox', 'options'=>$location_options1, 'div'=>array('class'=>'col-xs-12 col-sm-6 form-group', 'style'=>'margin-bottom:0;', 'selected'=>$user_location_alert_tag_ids))); 
//echo $this->Form->input('location', array('type'=>'select', 'multiple'=>'checkbox', 'options'=>$location_options2, 'div'=>array('class'=>'col-xs-12 col-sm-6 form-group', 'selected'=>$user_location_alert_tag_ids))); 

//BUT THIS WORKS JUST FINE
echo $this->Form->input('location', array('type'=>'select', 'multiple'=>'checkbox', 'options'=>$location_options, 'div'=>array('selected'=>$user_location_alert_tag_ids))); 
?>

查看生成的HTML,为每个select元素生成一个隐藏字段,以确保数据中存在适当的键

具有相同名称的多个字段将导致生成多个隐藏字段,其中最后一个字段将覆盖前一个字段

这可以避免用于其他字段,因此隐藏的初始值设定项字段仅为第一个输入生成。引用文件:

如果要在一个窗体上创建多个分组在一起的输入块,则应在除第一个输入外的所有输入上使用此参数。如果隐藏的输入在页面的多个位置,则只保存最后一组输入值

此外,还应该为这两个输入定义一个唯一的ID,否则将导致无效的HTML,因为助手将生成重复的ID

最后但并非最不重要的一点是,您的括号可能有点错误,
selected
键嵌套在
div
键中,如果这是定义所选条目的必要条件,我想这是错误的

echo $this->Form->input('location', array(
    'id'       => 'location1',
    'type'     => 'select',
    'multiple' => 'checkbox',
    'options'  => $location_options1,
    'div'      => array('class' => 'col-xs-12 col-sm-6 form-group', 'style'= > 'margin-bottom:0;')
    'selected' => $user_location_alert_tag_ids
))); 
echo $this->Form->input('location', array(
    'id'          => 'location2',
    'type'        => 'select',
    'multiple'    => 'checkbox',
    'options'     => $location_options2,
    'div'         => array('class' => 'col-xs-12 col-sm-6 form-group'),
    'selected'    => $user_location_alert_tag_ids
    'hiddenField' => false
)));