2010-11-16 64 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