2010-01-25 89 views
0

我有一個簡單的窗體,在節點顯示頁面上有一個選擇菜單。有沒有簡單的方法來驗證我的回調函數中的表單?通過驗證,我並不是說任何先進的東西,只是爲了檢查值實際上存在於表單數組中。例如,如果沒有ajax,如果我的選擇菜單有3個項目,並且我添加了第4個項目並嘗試提交表單,則drupal會給出類似「非法選擇,請與管理員聯繫」的錯誤。Drupal 6窗體回調函數驗證

使用ajax創建的第4個項目將被保存到數據庫中。所以我必須寫驗證

if ($select_item > 0 && $select_item <= 3) { 
    //insert into db 
} 

或者是否有一個更簡單的方法,將檢查該項目實際上存在於窗體數組?我希望自從沒有Ajax以後,如果被操縱,drupal不會提交表單。謝謝。

編輯: 所以我基本上需要在我的回調函數?

$form_state = array('storage' => NULL, 'submitted' => FALSE); 
$form_build_id = $_POST['form_build_id']; 
$form = form_get_cache($form_build_id, $form_state); 
$args = $form['#parameters']; 
$form_id = array_shift($args); 
$form_state['post'] = $form['#post'] = $_POST; 
$form['#programmed'] = $form['#redirect'] = FALSE; 
drupal_process_form($form_id, $form, $form_state); 

要得到$ _POST ['form_build_id'],我把它作爲數據參數發送,是嗎?我在哪裏使用form_get_cache,看起來好像沒有數據。現在有點失落。

+1

你的目標究竟是什麼?這聽起來像你在這裏走錯了路。 – googletorp 2010-01-25 11:14:05

+0

對不起,如果我沒有解釋得太好,我的目標只是檢查該選項是否存在於表單select數組中,並且尚未被操縱。例如,假設我的選擇菜單有3個項目,紅色,綠色,藍色。現在有人試圖向我的數據庫輸入虛假信息,並添加了第四個選項,黑色。如果我提交這個表單時沒有使用ajax,Drupal會知道這個數組中不存在黑色,並且會說有非法選擇。但是,如果我使用帶回調函數的ajax,則不會發生此基本驗證,因此將插入黑色值。希望這能說明問題。 – Wade 2010-01-25 18:08:26

回答

0

既然你已經在使用AJAX,爲什麼不寫一點jQuery來只允許表單提交,如果選擇是在合法選擇列表中?這可以在它看起來像你正在使用的自定義模塊內完成(使用drupal_add_js())。

+1

那麼,如果用戶可以操縱選擇菜單,他們也可以操縱JavaScript,這就是爲什麼我想要做它的服務器端。那麼我是否需要自己寫出所有基本的驗證檢查,或者是否有一個drupal函數?由於沒有ajax,他們能夠自動找到被操縱的表單。 – Wade 2010-01-26 17:46:38

0

這不是特別的「簡單」,但標準的做法是使用Drupals Forms API進行回調提交 - 這樣,你將得到與非js相同的驗證提交。請參閱Adding dynamic form elements using AHAH。儘管它完全不符合您的方案(它們在回調中重建表單以添加新元素,而不是保存數據),但處理工作流程的解釋非常有幫助。

然後有幾個模塊,嘗試提供一種通用方式AJAX表單提交 - 你可以檢查他們如何做到這一點的代碼(或者只是使用它們;)

  • Ajax submit(只有一個開發版)
  • Ajax(有一個 '官方' 版本)

最後,還有efforts to put better support this functionality into core in Drupal 7 - 相關的討論也可能有幫助。

+0

添加評論到我原來的帖子,不知道如何添加評論中的代碼... – Wade 2010-01-29 20:46:27