Query Database to Fill Dropdown Form API #states I am trying to develop a pretty complicated form. Essentially the user selects from Education, health, or water quality. Then using states the correct follow up questions are asked before all this data is submitted. 

However, whenever I try to populate with a db query it acts funny. For example. Health and Education but have a dropdown select for years. Each should load the years available from the database and populate accordingly. However, the health dropdown select for year (which comes after the education) populates its self with the education's years. If I do a dpm to see what year the health year query gets, it is right, but it does not display on the dropdown.

I hope that makes sense. To sum it up: I have two queries to populate two different year forms. However, both populate themselves with the first query, even though the second one returns the right variables.

Here is the code:

$form['data_set'] = array(
    '#type' =&gt; 'select',
    '#title' =&gt; t('Please Select a Topic'),
    '#options' =&gt; array(
        'education' =&gt;t('Education'),
        'health'    =&gt;t('Health'),
        'water'     =&gt;t('Water'),
    ),
    '#required' =&gt; TRUE,
);
// If User Selects Education
$form['education'] = array (
    '#type' =&gt; 'fieldset',
    '#title' =&gt; t('What Education Information are you looking for?'),
    '#states' =&gt; array(
        'visible' =&gt; array(
            ':input[name="data_set"]' =&gt; array('value' =&gt; 'education'),
        ),
    ),
);

    //Query DB for Rows
    $query = db_select('hp_education_years');
    $query-&gt;fields('hp_education_years', array('id', 'years',));
    $query-&gt;orderBy('years', 'ASC');
    $results = $query-&gt;execute();

    //define rows
    $options = array();
    foreach ($results as $result) {
        $options[$result-&gt;id] = array(
            $result-&gt;years,
        );
    }
    $form['education']['year'] = array(
        '#type' =&gt; 'select',
        '#title' =&gt; t('Year'),
        '#options' =&gt; $options,
        '#states' =&gt; array(
            'visible' =&gt; array(
                ':input[name="data_set"]' =&gt; array('value' =&gt; 'education'),
            ),
        ),
    );
    $form['education']['level'] = array(
        '#type' =&gt; 'select',
        '#title' =&gt; t('Level'),
        '#options' =&gt; array(
            'primary' =&gt; 'Primary',
            'jhs' =&gt; 'JHS',
            'shs' =&gt; 'SHS',
        ),
    );
    $form['education']['sector'] = array(
        '#type' =&gt; 'checkboxes',
        '#title' =&gt; t('Sector'),
        '#options' =&gt; array(
            'public' =&gt; t('Public'),
            'private' =&gt; t('Private'),
        ),
    );

//if user selects health
$form['health'] = array (
    '#type' =&gt; 'fieldset',
    '#title' =&gt; t('What Health Information are you looking for?'),
    '#states' =&gt; array(
        'visible' =&gt; array(
            ':input[name="data_set"]' =&gt; array('value' =&gt; 'health'),
        ),
    ),
);

    //Query DB for Rows
    $query1 = db_select('hp_health_years');
    $query1-&gt;fields('hp_health_years', array('id', 'year',));
    $query1-&gt;orderBy('year', 'ASC');
    $results1 = $query1-&gt;execute();

    //define rows
    $options1 = array();
    foreach ($results1 as $result1) {
        $options1[$result1-&gt;id] = array(
            $result1-&gt;year,
        );
    }
dpm($result1-&gt;year);
    $form['health']['year'] = array(
        '#type' =&gt; 'select',
        '#title' =&gt; t('Year'),
        '#options' =&gt; $options,
    );
You have the same variable ($options) for both fields. Use $options for $form['education']['year'] and $options1 for $form['health']['year'].