【问题标题】:drupal validate formdrupal 验证表单
【发布时间】: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


【解决方案1】:

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

最好将你的函数附加到它上面;

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

【讨论】:

  • 小费+1,但它还没有工作。关于如何更好地跟踪它的任何想法?或者其他一些实现验证的方法?谢谢。
  • 它应该可以工作。你看到你的调试信息了吗?尝试清除缓存,但我认为这不是缓存问题。将 die() 放入您的验证器中:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多