使用此代码:
drupal_set_message('form id: ' .$form_id. ' send with '. $delta . ' and field: '. $field);
我注意到每次点击“发送”按钮时,表单都会提交两次,所以我看到这样的内容:
表单id:formname2发送3和 字段xxx表单id:formname2发送 4和字段xxx
$ delta,即更改的那个,是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);
}
奇怪的是,只有第一次提交似乎保存在数据库中,所以保存的数据是正确的......
知道为什么会出现双重问题?
答案 0 :(得分:1)
我会检查表单变量,看看是否多次列出了submit函数。这可能是$ form ['#submit']或$ form ['buttons'] ['submit'] ['#submit'],具体取决于这是自定义表单还是默认节点表单。
看来提交函数被调用了两次,但node_save正在进行更新而不是插入,因此数据库显示正确。
如果您没有看到调用的重复提交处理程序,那么可能会发布构建/更改表单的代码。
答案 1 :(得分:1)
我遇到了同样类型的问题,我认为这是drupal处理表单的方式。如果您移动以下行
drupal_set_message('form id: ' .$form_id. ' send with delta: '. $delta . ' and field: '. $field);"
保存数据后,进入提交功能,您会发现该消息只会显示一次。