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获取用户提交数据的过程.
谢谢你的帮助!
这是因为你正在使用#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以供参考,以防您没有看到它.