我有一個簡單的窗體,在節點顯示頁面上有一個選擇菜單。有沒有簡單的方法來驗證我的回調函數中的表單?通過驗證,我並不是說任何先進的東西,只是爲了檢查值實際上存在於表單數組中。例如,如果沒有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,看起來好像沒有數據。現在有點失落。
你的目標究竟是什麼?這聽起來像你在這裏走錯了路。 – googletorp 2010-01-25 11:14:05
對不起,如果我沒有解釋得太好,我的目標只是檢查該選項是否存在於表單select數組中,並且尚未被操縱。例如,假設我的選擇菜單有3個項目,紅色,綠色,藍色。現在有人試圖向我的數據庫輸入虛假信息,並添加了第四個選項,黑色。如果我提交這個表單時沒有使用ajax,Drupal會知道這個數組中不存在黑色,並且會說有非法選擇。但是,如果我使用帶回調函數的ajax,則不會發生此基本驗證,因此將插入黑色值。希望這能說明問題。 – Wade 2010-01-25 18:08:26