Значение, переданное массиву $form_state
в функции отправки , будет идентификатором, а не именем, оно будет ключом раскрывающихся меню, а не значением.
Если вы хотите немного сократить свой код, вы можете использовать метод fetchAllKeyed()
запроса базы данных для автоматического создания этого массива категорий. Вам не нужен элемент category_options
, поскольку у вас уже есть доступ к этому массиву в переменной $form
в вашей функции отправки.
Кроме того, я бы осторожно присвоил внешнему и внутреннему элементам одинаковое имя (category
), что может вызвать некоторые проблемы.
Этот код должен помочь:
function mymodule_myform($form, &$form_state) {
$categories = db_query("SELECT id, name FROM {am_category}")->fetchAllKeyed();
$form['category_wrapper']['category'] = array(
'#type' => 'select',
'#title' => t('Category'),
'#description' => t('Please select the category of this achievement.'),
'#options' => $categories
);
return $form;
}
function mymodule_myform_submit(&$form, &$form_state) {
$selected_category_id = $form_state['values']['category'];
// Just in case you wanted to know, this would get the corresponding name for the selected category:
$selected_category_name = $form['category_wrapper']['category']['#options'][$selected_category_id];
}