ข้อผิดพลาดหมายถึงform_token
ความต้องการที่ไม่ถูกต้องและจะต้องมีการสร้างใหม่ นี่เป็นฟิลด์แบบฟอร์มที่ซ่อนอยู่ (โดยทั่วไปใช้เพื่อป้องกันการปลอมแปลงข้ามไซต์)
โดยปกติแล้วจะมีการเพิ่มองค์ประกอบโทเค็นในแต่ละรูปแบบ Drupal โดยdrupal_prepare_form()
อัตโนมัติดังนั้นโดยทั่วไปคุณไม่จำเป็นต้องเพิ่มตัวเองยกเว้นว่าคุณกำลังเขียนโค้ดของคุณเอง
หากคุณกำลังพยายามตั้งโปรแกรมรูปแบบหลายหน้าบางหน้าคุณอาจต้องสร้างโทเค็นใหม่ในการส่งแต่ละครั้งโดยใช้drupal_get_token()
เช่นที่แสดงที่นี่ :
$form_state['input']['form_token'] = drupal_get_token($form['#token']);
สำหรับวิธีแก้ปัญหาเพื่อบังคับให้สร้างโทเค็นของฟอร์มใหม่ใน form_alter ให้ตรวจสอบตัวอย่างต่อไปนี้:
/**
* Implements hook_form_alter().
*/
function mymodule_form_alter(&$form, &$form_state, $form_id) {
if ($form_id === 'your_form_entityform_edit_form' && !empty($form_state['input']['form_id'])) {
$form_id = $form_state['input']['form_id'];
$form ['#token'] = $form_id;
$form ['form_token'] = array(
'#id' => drupal_html_id('edit-' . $form_id . '-form-token'),
'#type' => 'token',
'#default_value' => drupal_get_token($form['#token']),
'#parents' => array('form_token'),
);
}
}
การแก้ไขปัญหา
ตรวจสอบอีกครั้งว่าแบบฟอร์มของคุณไม่ได้ hardcoded มิฉะนั้นเพิ่มโทเค็นตามที่แนะนำโดย@thirdender :
<input name='form_token' type='hidden' value='<?php print drupal_get_token('MY_FORM_ID'); ?>'>
ตรวจสอบว่าข้อผิดพลาดเกิดขึ้นกับแบบฟอร์มของคุณหรือไม่ในแบบฟอร์มอื่น ๆ (เช่นแบบฟอร์มภายในแบบฟอร์ม)
drupal_valid_token()
ตรวจแก้จุดบกพร่อง