Drupal 6:form_state值在提交时为空

时间:2009-09-23 05:02:01

标签: php forms drupal

我正在尝试在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.'));
}
?>

3 个答案:

答案 0 :(得分:4)

除非您指定它,否则$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定义的函数,它创建了一个很好的变量可视化表示,您可以在其中单击以显示/隐藏数组和类对象中的值。使用该信息,您可以精确地存储所需值。在这种情况下,它是一个很棒的工具,你想在运行时检查变量。

答案 1 :(得分:0)

我遇到了同样的问题,并发现为了将值作为数组而不是平值,可以在父表单元素中使用'#tree' => TRUEhttp://drupal.org/node/751826

答案 2 :(得分:0)

这可能会有所帮助

implode(arg(),'/');