Drupal 6: значения form_state пустые на submit

Я пытаюсь создать пользовательскую форму в Drupal 6, и все, кажется, работает нормально с кодом ниже, включая при отправке новой записи в базу данных, однако все значения $ form_state пусты. Что мне не хватает?

<?php function rate_form($form_state) { $form = array(); $form['rate']['name'] = array( '#type' => 'textfield', '#title' => t('Name'), '#size' => 30, '#maxlength' => 100, '#required' => TRUE, ); $form['rate']['description'] = array( '#type' => 'textarea', '#title' => t('blah, blah'), '#maxlength' => 1500, ); $form['rate']['submit'] = array('#type' => 'submit', '#value' => t('Rate!')); return $form; } print drupal_get_form($form_id); function rate_form_submit($form_id, &$form_state) { db_query("INSERT INTO {rate_comments} (name, description) VALUES ('%s', '%s')", $form_state['values']['rate']['name'], $form_state['values']['rate']['description']); drupal_set_message(t('Thank you! Your rating has been added.')); } ?> 

Если вы не укажете его, $form_state['values'] будет плоским массивом, а не вложенным, поэтому значения будут расположены по адресу:

 $form_state['values']['name'] $form_state['values']['description'] 

Вы могли бы довольно легко отладить эту проблему, используя модуль devel. С этим активным вы могли бы сделать

 function rate_form_submit($form_id, &$form_state) { dpm($form_state); //db_query("INSERT INTO {rate_comments} (name, description) VALUES ('%s', '%s')", $form_state['values']['rate']['name'], $form_state['values']['rate']['description']); drupal_set_message(t('Thank you! Your rating has been added.')); } 

dpm – это функция, которую определил devel, она создает красивое визуальное представление переменной, где вы нажимаете, чтобы отображать / скрывать значения внутри массивов и объектов класса. Используя эту информацию, вы смогли бы оценить, где были сохранены нужные вам значения. Это отличный инструмент в таких ситуациях, когда вы хотите проверять переменные во время выполнения.

У меня была та же проблема, и я обнаружил, что для того, чтобы иметь значение как массив вместо плоского значения, вы используете '#tree' => TRUE , в элементе родительской формы. http://drupal.org/node/751826

Это может помочь

 implode(arg(),'/');