在使用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获取用户提交数据的过程。
感谢您的帮助!
答案 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以供参考。