2010-11-16 3 views
2

Я хочу проверить ввод формы, прежде чем сохранять ее в базу данных, чтобы предотвратить Sql Injection и XSS.drupal validate form

Я не хочу изменять код модуля напрямую, поэтому я создал настраиваемый модуль для создания такого рода материалов, но я не совсем уверен, как использовать элемент #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'; 

Я думал, что просто добавив форму [ '# Validate'] будет работать несмотря на содержимое переменной $ form, но кажется, что в зависимости от реализации модуля, если вы не поместите элемент #validate, где он ожидается, он игнорируется.

+1

Вы пробовали передать функцию проверки без массива? '$ form ['# validate'] = 'my_validation_function';' – DrColossos

+0

@DrColossos Я пробовал, но все равно не повезло –

ответ

5

Будьте осторожны при замене ключа #validate, поскольку вы замените любые другие валидаторы, которые были добавлены перед вами.

Лучше всего добавить к нему свою функцию;

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

+1 для подсказки, но он пока не работает. Любая идея о том, как я могу отследить ее лучше? Или каким-то другим способом выполнить проверку? Спасибо. –

+1

Он должен работать. Вы видите свои отладочные сообщения? Попытайтесь очистить кеш, но я не думаю, что это проблема с кешем. Поместите die() в свой валидатор :) – galymzhan

+0

isnt druapl beautiful <3 –