Проверка по форме регистрации пользователя?

Я сделал модуль, в котором я пытаюсь добавить проверку, как если бы пользователь ввел символы в текстовом поле "Номер телефона" и то же самое в "Мобильном №".
Это будет работать, когда пользователь открыл форму регистрации пользователя.
Я сделал это....

<?php
function form_intro_form_alter($form_id,&$form){
    if($form_id == 'user_register' || $form_id == 'user_edit'){
        $form['Personal Information']['profile_pno']['#validate'] = array('form_intro_pno_validate' => array());   //profile_pno is for Phone No.
        $form['Personal Information']['profile_mno']['#validate'] = array('form_intro_mno_validate' => array());   //profile_mno is for Mobile No.
    }
}


function form_intro_pno_validate($element){
    if(!is_numeric($element['#value'])){
        form_set_error('profile_pno' , t('Please Enter Only Number in Phone no'));
    }
}

function form_intro_mno_validate($element){
    if(!is_numeric($element['#value'])){
        form_set_error('profile_mno' , t('Please Enter Only Number in Mobile no'));
    }
}
?>

имя модуля form_intro.....
Пожалуйста, проверьте это и пришлите мне реплей...
это не работает... это не дает никакой ошибки, когда пользователь ввел символы.

2 ответа

Решение

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

РЕДАКТИРОВАТЬ:
Другая причина, почему это не работает для вас, заключается в том, что вы неправильно реализовали хук. Для крючка hook_form_FORM_ID_alterнужно заменить hook с именем вашего модуля и FROM_ID с идентификатором формы.

Пример:

function my_module_form_intro_form_alter(&$form, &$form_state) {
  $form['#validate'][] = 'my_module_form_validation_handler';
  $form['title'] = array(
    '#type' => 'textfield',
    '#title' => t('Title'),
    '#description' => t('The title you enter here appears on the page.'),
    '#size' => 40,
    '#maxlength' => 255,
    `#element_validate` => array('my_module_element_validation_handler'),
  );
}

Делая выше, функция my_module_form_validation_handler будет вызываться для всей формы, в то время как my_module_element_validation_handler будет вызван для title элемент формы.

Я пытался с hook_user..

 <?php
    function legalagree_user($op, &$edit, &$user, $category = NULL) {
      switch($op) {
         case 'validate':
          if (!is_numeric($edit['profile_mno'])) {
form_set_error('profile_mno', t('You have to enter only numbers in Mobile No Field.'));
}
      return;

  }
}

Это работает.....

Другие вопросы по тегам