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

Joh*_*ohn 3 php forms post drupal 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')
 );
}
Run Code Online (Sandbox Code Playgroud)

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

function sample_form_submit($form, &$form_state){
  drupal_set_message($form_state['values']['name']);
}
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能获得提交的值?我知道我可以访问

$form_state['input']['name']
Run Code Online (Sandbox Code Playgroud)

但我的理解是,上面给了我原始的,未经过化验的$ _POST数据.

我需要用户输入的值,我怎么能得到这个?我真的不清楚使用drupal Forms API获取用户提交数据的过程.

谢谢你的帮助!

Cli*_*ive 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')
  );
}
Run Code Online (Sandbox Code Playgroud)

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

查看Drupal FAPI以供参考,以防您没有看到它.