无法使用drupal form api获取复选框值

时间:2012-03-31 10:33:20

标签: drupal drupal-6 drupal-modules drupal-fapi drupal-forms

我在drupal中有一个上传图片的表格,里面有几个复选框。 这是表格:

$form['checklist_fieldset'] = array(
    '#type' => 'fieldset',
    '#title' => t('Check List'),
    '#collapsible' => FALSE,
    '#collapsed' => FALSE,  
  );
$form['checklist_fieldset']['heating'] = array(
   '#type' => 'checkboxes',
   '#title' => t('Heating options'),

   '#options' => array(
  '0' => t('Yes'),
  '1' => t('No')
  ),
   '#description' => t('Heating details.')
  );

这是我的提交功能,我正在处理图像上传并抓取复选框值。我收到了成功消息,图像上传但未获得复选框的值。

function property_add_view_submit($form,&$form_state){
$validators = array();



if($file = file_save_upload('p_file1',$validators,file_direcotry_path)){
$heating = array_keys($form_state['values']['heating']);
drupal_set_message(t('Property Saved! '.$heating));
dpm( $form_state['values']['heating']);
}

2 个答案:

答案 0 :(得分:5)

在FAPI元素上使用#options时,传递给$form_state 的值是数组键,因此您无需使用array_keys()

我不确定为什么你使用checkboxes来表示是/否,通常会使用简单的checkbox元素。但是,如果那真的是你想做的事情:

  1. 您的#options不能包含0作为数组键的选项,它会自动过滤掉,您永远不会知道该选项是否已被选中。
  2. 您应该使用$heating_options_chosen = array_filter($form_state['values']['heating']来获取所选的复选框选项。
  3. 老实说,我认为你的代码应该是这样的:

    $form['checklist_fieldset']['heating'] = array(
     '#type' => 'checkbox',
     '#title' => t('Heating options'),
     '#options' => array(
       '1' => t('Yes'),
       '0' => t('No')
      ),
      '#description' => t('Heating details.')
    ); 
    
    
    
    $heating_checked = $form_state['values']['heating'] == 1;
    

答案 1 :(得分:0)

如果我有复选框,朋友和选项类似于

[ ] abc  
[ ] def  
[ ] ghi  
[ ] jkl 

我想知道用户标记了哪些选项,然后使用以下功能。

if ($form_state->getValue('friends') != NULL) {

  foreach ($form_state->getValue('friends') as $key => $value) {

    if ($value != 0) {
      $friends = $friends . ", " . $key;
      $friends = substr_replace($friends, "", 0, 1);
    }
  }
}

如果用户选择了abcghi,那么您将在1中得到3$friends

如果您想知道该值,请使用$friends = $friends.", ".$value;

它为我工作..希望它也会对您有帮助:)