Search code examples
drupaldrupal-6drupal-modulesdrupal-fapidrupal-forms

cannot get checkboxes value using drupal form api


i have form in drupal which uploads images and has got few checkboxes in it. Here is the form:

$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.')
  );

and here is my submit function where i am processing image upload and grabbing the checkboxes value as well. I am getting the success message and image is getting uploaded but not getting the value of check boxes.

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']);
}

Solution

  • When you use #options on a FAPI element the value passed to the $form_state is the array key, so you don't need to use array_keys().

    I'm not sure why you're using checkboxes for a yes/no, usually one would use a simple checkbox element. However if that's really what you want to do:

    1. Your #options can't contain on option with 0 as the array key, it will be automatically filtered out and you'll never know if that option has been checked.
    2. You should use $heating_options_chosen = array_filter($form_state['values']['heating'] to get the selected checkbox options.

    I honestly think your code should look like this though:

    $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;