Я пытаюсь создать пользовательскую форму в 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(),'/');