【发布时间】:2010-11-16 16:07:57
【问题描述】:
我想在将表单保存到数据库之前验证表单的输入,以防止 Sql 注入和 XSS。
我不想直接修改模块的代码,所以我创建了一个自定义模块来执行此类操作,但我不确定如何使用#validate 元素来调用验证函数。
在我的自定义模块中,我实现了这个逻辑的函数:
function mymodule_form_alter(&$form, $form_state, $form_id) {
switch ($form_id) {
case 'myform':
drupal_set_message('this message is printed :D');
$form['#validate'] = array('my_validation_function');
break;
}
}
function my_validation_function($form, &$form_state) {
drupal_set_message('not printed :(');
watchdog('not printed :___(', 'not printed :___(');
}
我不知道它是如何工作的,但是当我提交表单时似乎从未调用过第二个函数。
编辑(解决方案):
我终于找到了验证在模块中的位置:
$form['mod_name']['submit']['#validate'][] = 'my_validation_function';
我认为尽管 $form 变量上有内容,但仅添加 form['#validate'] 会起作用,但如果您没有将 #validate 元素放置在预期的位置,这似乎取决于模块的实现它被忽略了。
【问题讨论】:
-
您是否尝试过不使用数组传递验证函数?
$form['#validate'] = 'my_validation_function'; -
@DrColossos 我试过了,但还是不行
标签: drupal forms drupal-6 validation