用户注册表上的验证?

时间:2010-05-04 12:26:52

标签: php drupal drupal-6 drupal-fapi drupal-alter

我已经制作了模块,其中我试图添加验证,如果用户输入了“电话号码”文本中的字符并且在“移动号码”上相同。
这将在用户打开用户注册表单时运行 我做了这个....

<?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 个答案:

答案 0 :(得分:1)

您需要使用#element_validate为每个元素或$form['#validate']传递验证处理程序,以向表单添加验证处理程序。这就是它无法正常工作的原因。

修改
它不适合你的另一个原因是你错误地实现了钩子。对于钩子hook_form_FORM_ID_alter,您需要将hook替换为您的模块名称,将FROM_ID替换为窗体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

答案 1 :(得分:0)

我曾尝试过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;

  }
}

这很有效.....