在Drupal 7中获取提交的帖子值

时间:2011-11-01 17:42:47

标签: php forms drupal post drupal-7

在使用Drupal 7提交表单后,我在访问已发布的值时遇到问题。

假设我有一个带有一个文本字段和一个提交按钮的简单表单。

function sample_form($form, &$form_state){
  $form['sample']['name'] = array(
  '#description' => 'Name',
  '#value' => 'Name',
  '#type' => 'textfield',
  );
 $form['sample']['sample_submit'] = array(
   '#type' => 'submit',
   '#value' => 'SUBMIT',
   '#submit' => array('sample_form_submit')
 );
}

然后我的提交处理程序,用于显示用户在文本字段中输入的值。

function sample_form_submit($form, &$form_state){
  drupal_set_message($form_state['values']['name']);
}

但是,该消息始终包含文本字段的默认值,在本例中为“name”。如果我输入“Mike”并点击提交,则消息显示“name”(默认值)。

如何获取提交的值?我知道我可以使用

访问
$form_state['input']['name']

但我的理解是,上面给了我原始的,未经过无限制的$ _POST数据。

我需要用户输入的值,我该如何获得?我真的不清楚使用drupal表单API获取用户提交数据的过程。

感谢您的帮助!

1 个答案:

答案 0 :(得分:9)

这是因为您在文本字段中使用#value而不是#default_value。使用前者将始终覆盖用户提供的值。您只需将代码更改为:

function sample_form($form, &$form_state){
  $form['sample']['name'] = array(
    '#description' => 'Name',
    '#default_value' => 'Name', // <-- Change made here
    '#type' => 'textfield',
  );

  $form['sample']['sample_submit'] = array(
    '#type' => 'submit',
    '#value' => 'SUBMIT',
    '#submit' => array('sample_form_submit')
  );
}

仅适用于实际接受输入值的元素。例如,#value仍然是用于隐藏输入,提交按钮等的正确键。选择列表,复选框等也需要使用#default_value或者您永远不会获得用户提交的数据

如果您没有看到,请查看Drupal FAPI以供参考。