2010-11-16 48 views
2

我想在将表单保存到数据库之前验证表单的输入,以防止Sql Injection和XSS。drupal验证表单

我不想直接修改模块的代码,所以我创建了一个自定义模块来完成这种工作,但我不确定如何使用#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 :___('); 

} 

我不知道它究竟是如何工作的,但看来,当我提交表单的第二功能不会被调用。

EDIT(液):

我终于找到地方,验证被放置在模块中:

$form['mod_name']['submit']['#validate'][] = 'my_validation_function'; 

我以为只是添加形式[ '#验证']会工作尽管有$ form变量的内容,但似乎取决于模块的实现,如果您没有将#validate元素放置在期望的位置,它将被忽略。

+1

您是否尝试过传递无数组的验证函数? '$ form ['#validate'] ='my_validation_function';' – DrColossos 2010-11-16 16:28:17

+0

@DrColossos我已经尝试过了,但仍然没有运气 – 2010-11-16 17:13:54

回答

5

小心更换#validate键,因为您将替换已添加在您之前的任何其他验证程序。

最好将你的功能追加到它;

$form['#validate'][] = 'my_validation_function'; 
+0

+1,但它还没有工作。关于如何更好地跟踪它的任何想法?或者其他方式来实现验证?谢谢。 – 2010-11-16 17:13:13

+1

它应该工作。你看到你的调试信息吗?尝试清除缓存,但我认为这不是缓存问题。把死()在你的验证:) :) – galymzhan 2010-11-16 17:34:10

+0

isnt druapl美丽<3 – 2013-03-15 06:03:02