2011-07-20 9 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

これを正しく読んでいる場合、ユーザーは入力が有効になる前に依然としてsubmitをクリックしなければなりません。私は彼らが提出をクリックする前に入力が有効かどうかをチェックする方法を探しています(例えば、書籍のバーコードを入力した後、提出する前に書籍の名前を教えます)。そうすれば、たとえそれが「有効な」エントリであっても、間違ったものを間違って入力してしまうことはありません。 –