代码之家  ›  专栏  ›  技术社区  ›  David Espart

drupal验证表单

  •  2
  • David Espart  · 技术社区  · 15 年前

    我想在将表单保存到数据库之前验证它的输入,以防止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元素放在预期的位置,则它似乎会被忽略,这取决于模块的实现。

    1 回复  |  直到 15 年前
        1
  •  5
  •   Simon Quentin    15 年前

    注意替换#validate密钥,因为您将替换之前添加的任何其他验证器。

    最好把你的功能附加到它上面;

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