Drupal 6 如何使用Drupal6中的hook\u form\u form\u ID\u alter()对自定义表单上的“type'=>“select”字段运行自定义验证

Drupal 6 如何使用Drupal6中的hook\u form\u form\u ID\u alter()对自定义表单上的“type'=>“select”字段运行自定义验证,drupal-6,validation,hook-form-alter,Drupal 6,Validation,Hook Form Alter,作为一名新手,使用hook_form_form_ID_alter更改站点范围的表单和字段是一项巨大的成就,但现在我开始遇到一些问题,涉及到我添加的一些自定义字段的验证。以下是我的custom_form.module文件中的代码 在这一点上,我最感兴趣的是如何在美国各州下拉字段中显示-选择-但不让用户选择它作为选择。此时,他们可以将-Select-留在必填字段中,Drupal允许表单提交。通过电子邮件发送的该特定字段的数据=0。我想强制用户实际选择一个状态 我已经尝试了以下所有方法 我已经尝试了多

作为一名新手,使用hook_form_form_ID_alter更改站点范围的表单和字段是一项巨大的成就,但现在我开始遇到一些问题,涉及到我添加的一些自定义字段的验证。以下是我的custom_form.module文件中的代码

在这一点上,我最感兴趣的是如何在美国各州下拉字段中显示-选择-但不让用户选择它作为选择。此时,他们可以将-Select-留在必填字段中,Drupal允许表单提交。通过电子邮件发送的该特定字段的数据=0。我想强制用户实际选择一个状态

我已经尝试了以下所有方法

我已经尝试了多个代码试用这些错误的变体,但没有任何东西像广告中所说的那样有效

非常感谢您提出的澄清问题或建议。记住在你的解释中要具体和简单,请定义术语-目前对我来说,大多数php就像阅读莎士比亚。
非常感谢

我在这个问题上睡着了,然后重试了我以前尝试过的一个链接

我能够使它工作到我满意的程度:我在内部使用了它 函数请求\u目录\u表单\u本地\u联系\u页面\u更改&$form,$form\u设置$order值后的状态

    // reorder the elements in the form to include the elements being inserted
    $order = array('parts_catalog', 'sprayer_catalog', 'name', 'address', 'city', 'state', 'country', 'zip', 'phone', 'mail', 'copy', 'submit');
    foreach($order as $key => $field) {
        $form[$field]['#weight'] = $key;
    }
    $form['#validate'][] = 'request_catalog_local_contact_page_validate';

        function request_catalog_local_contact_page_validate(&$form, &$form_state) {
          if ($form_state['values']['state'] == '0') {
            form_set_error('state', t('Please Select a State'));
          };
           if ($form_state['values']['parts_catalog'] == '0' and $form_state['values']['sprayer_catalog'] =='0') {
            form_set_error('parts_catalog' and 'sprayer_catalog', t('Please Select a Catalog'));
          };
        }

// The custom email message sent using the data gathered in the form
        function request_catalog_mail_alter(&$message) {
            if ($message['id'] == 'contact_page_mail') {
                $message['body'][1] = $message['params']['name'].' '.'has requested the following catalogs:';
                $message['body'][2] = 'Parts Catalog: ' . $message['params']['parts_catalog']. '     ' . 'Sprayer Parts Catalog: ' .$message['params']['sprayer_catalog'];
                $message['body'][4] = 'Send to:  ' . $message['params']['address'].', '. $message['params']['city'].', ' . $message['params']['state'].' '  . $message['params']['zip']. ' ' . $message['params']['country'];
            }
        }

}

适合我现在需要的东西。

还有另一种方法可以避免这种情况

只需将NULL值作为ket分配给第一个选项

例:

这就行了

    // reorder the elements in the form to include the elements being inserted
    $order = array('parts_catalog', 'sprayer_catalog', 'name', 'address', 'city', 'state', 'country', 'zip', 'phone', 'mail', 'copy', 'submit');
    foreach($order as $key => $field) {
        $form[$field]['#weight'] = $key;
    }
    $form['#validate'][] = 'request_catalog_local_contact_page_validate';

        function request_catalog_local_contact_page_validate(&$form, &$form_state) {
          if ($form_state['values']['state'] == '0') {
            form_set_error('state', t('Please Select a State'));
          };
           if ($form_state['values']['parts_catalog'] == '0' and $form_state['values']['sprayer_catalog'] =='0') {
            form_set_error('parts_catalog' and 'sprayer_catalog', t('Please Select a Catalog'));
          };
        }

// The custom email message sent using the data gathered in the form
        function request_catalog_mail_alter(&$message) {
            if ($message['id'] == 'contact_page_mail') {
                $message['body'][1] = $message['params']['name'].' '.'has requested the following catalogs:';
                $message['body'][2] = 'Parts Catalog: ' . $message['params']['parts_catalog']. '     ' . 'Sprayer Parts Catalog: ' .$message['params']['sprayer_catalog'];
                $message['body'][4] = 'Send to:  ' . $message['params']['address'].', '. $message['params']['city'].', ' . $message['params']['state'].' '  . $message['params']['zip']. ' ' . $message['params']['country'];
            }
        }

}
 function states_list() {
   return array(
     '' =>'- Select -',
     'AL' => 'Alabama',
   //rest of states....,
   );
 }