2011-05-26 55 views
0

使用此代碼:Drupal 6,FAPI表單提交兩次,爲什麼?

drupal_set_message('form id: ' .$form_id. ' send with '. $delta . ' and field: '. $field); 

我注意到,每一次我點擊£發送」按鈕,提交表單的兩倍,因此我看到這樣的事情:

形式ID:formname2發與圖3和 字段XXX形式ID:formname2與 4和場XXX

的$增量發送,即其中一個的變化,是一種多組CCK場的Δ(我插入一個新的領域到一個cck內容)。這裏的提交功能:

function IngredientsForm_submit($form, &$form_state){ 
    global $user; 
    $ls_id = $user->ls_id; 
    $current_ls = node_load($ls_id);  
    $delta = $form_state['values']['delta']; 
    $field = $form_state['values']['field_name']; 
    $form_id = $form_state['values']['form_id']; 
    $current_ls->field_descrizione_ingrediente[$delta]['value'] = $field; 
    drupal_set_message('form id: ' .$form_id. ' send with delta: '. $delta . ' and field: '. $field); 
    node_save($current_ls);    
} 

奇怪的,事情只有第一次提交似乎是保存在數據庫中,所以保存的數據是正確的......

任何想法,爲什麼有雙submition?

回答

1

我會檢查表單變量,看看提交函數是否被列出多次。這可能是$ form ['#submit']或$ form ['buttons'] ['submit'] ['#submit'],取決於這是自定義窗體還是默認節點窗體。

它似乎提交函數被調用兩次,但node_save正在做一個更新而不是插入,所以數據庫看起來是正確的。

如果您沒有看到重複的提交處理程序被調用,那麼可能發佈代碼來構建/更改表單。

+0

它狡猾,你說得對。我這有兩個定義: '$形式[ '提交'] =陣列( \t \t '#TYPE'=> '提交', \t \t '#VALUE'=> T( '提交'), \t \t \t );' 和 '$形式[ '#提交'] =陣列( \t \t 'IngredientsForm_submit', );' 我怎樣才能合併嗎? – Segolas 2011-05-30 10:12:42

+0

就您的提交處理程序而言,它不會顯得不尋常。第一個是實際的提交按鈕,第二個是當按鈕被點擊時將被調用的函數(假設所有驗證通過)。如果你發佈你的實際表單功能,我可能會提供幫助。 – smthomas3 2011-06-02 18:43:40

1

我遇到了同樣類型的問題,我認爲這是drupal進程形式的方式。如果在保存數據後,將以下行移動到提交函數

drupal_set_message('form id: ' .$form_id. ' send with delta: '. $delta . ' and field: '. $field);" 

,您會發現該消息只會顯示一次。