2011-07-20 64 views
0

我有一個Drupal表單,其中有人輸入信息,我需要做一個數據庫查詢來檢查它在提交之前是否有效。我想要有一個按鈕,用戶可以單擊以檢查有效性(或在用戶離開該字段後自動完成),然後顯示有關他的選擇的一些信息。
我知道我可以在提交表單時使用hook_form_submit來檢查表單,如果有任何錯誤,然後停止進程,但我希望用戶能夠在提交表單之前確認他們選擇了正確的事情。以Drupal的形式驗證輸入

+0

這是一個自定義表單嗎? – Laxman13

+0

是的,我自己做的 –

回答

2

我還沒有親自試過這個模塊,但它可能是你在找什麼:

http://drupal.org/project/ajax

如果你只是尋找一種方式來做到實時查找(例如輸入書籍條碼並獲取標題),您也可以使用Drupal的自動完成功能,但它需要您編寫自己的自動完成功能來處理數據庫查找。

0

看一看:Basic form with validate handler。你真的只需要添加一個類似於mymodule_myform_validate($form, &$form_state) { ... }的功能。從鏈接頁面:

「這增加了一個新的表單字段,並用驗證函數驗證它,也稱爲驗證處理程序。」

<?php 
function my_module_menu() { 
    $items = array(); 
    $items['my_module/form'] = array(
    'title' => t('My form'), 
    'page callback' => 'my_module_form', 
    'access arguments' => array('access content'), 
    'description' => t('My form'), 
    'type' => MENU_CALLBACK, 
); 
    return $items; 
} 

function my_module_form() { 
    return drupal_get_form('my_module_my_form'); 
} 

function my_module_my_form($form_state) { 
    $form['name'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Name'), 
    '#collapsible' => TRUE, 
    '#collapsed' => FALSE, 
); 
    $form['name']['first'] = array(
    '#type' => 'textfield', 
    '#title' => t('First name'), 
    '#required' => TRUE, 
    '#default_value' => "First name", 
    '#description' => "Please enter your first name.", 
    '#size' => 20, 
    '#maxlength' => 20, 
); 
    $form['name']['last'] = array(
    '#type' => 'textfield', 
    '#title' => t('Last name'), 
    '#required' => TRUE, 
); 

    // New form field added to permit entry of year of birth. 
    // The data entered into this field will be validated with 
    // the default validation function. 
    $form['year_of_birth'] = array(
    '#type' => 'textfield', 
    '#title' => "Year of birth", 
    '#description' => 'Format is "YYYY"', 
); 

    $form['submit'] = array(
    '#type' => 'submit', 
    '#value' => 'Submit', 
); 
    return $form; 
} 

// This adds a handler/function to validate the data entered into the 
// "year of birth" field to make sure it's between the values of 1900 
// and 2000. If not, it displays an error. The value report is // $form_state['values'] (see http&#58;//drupal.org/node/144132#form-state). 
// 
// Notice the name of the function. It is simply the name of the form 
// followed by '_validate'. This is the default validation function. 
function my_module_my_form_validate($form, &$form_state) { 
    $year_of_birth = $form_state['values']['year_of_birth']; 
    if ($year_of_birth && ($year_of_birth < 1900 || $year_of_birth > 2000)) { 
    form_set_error('year_of_birth', 'Enter a year between 1900 and 2000.'); 
    } 
} 
?> 
+0

所以,如果我正確閱讀這個,用戶仍然必須點擊提交之前,他們的輸入得到驗證。我正在尋找一種方法讓他們在點擊提交之前檢查輸入是否有效(例如,他們輸入書籍條形碼,然後在提交之前告訴他們書名)。這樣,即使它是「有效」條目,它們也不會意外輸入錯誤的內容。 –