cannot get checkboxes value using drupal form api

10,952

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;
Share:
10,952
Maverick
Author by

Maverick

Updated on June 04, 2022

Comments

  • Maverick
    Maverick almost 2 years

    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']);
    }
    
  • Maverick
    Maverick about 12 years
    well..iam using checkboxes because i wanted to use it as a check box group.
  • Clive
    Clive about 12 years
    ah ok that makes more sense, glad the answer helped either way
  • Prerit Mohan
    Prerit Mohan about 11 years
    How to toggle a text field depending on the value/options of checkbox? @Clive
  • Clive
    Clive about 11 years
    @PreritMohan For Drupal 6 you'll need to do it manually I think, but for Drupal 7 you can use #states.
  • Clive
    Clive about 11 years
    @PreritMohan If you need to ask a new question use the link at the top of the page, putting it in comments isn't useful to anyone
  • Prerit Mohan
    Prerit Mohan about 11 years
  • khaled_webdev
    khaled_webdev over 7 years
    useful array_filter() to omit non checked box, thanks!