在 CakePHP 中,防止重复提交表单的方法有很多种,以下是一些常见的方法:
CakePHP 提供了内置的 CSRF 保护功能,可以防止跨站请求伪造攻击。在表单中添加以下代码即可启用 CSRF 保护:
echo $this->Form->create($post);
echo $this->Form->control('title');
echo $this->Form->control('body');
echo $this->Form->end(__('Submit'));
表单令牌是一种防止表单重复提交的机制。在表单中添加以下代码即可启用表单令牌:
echo $this->Form->create($post, ['type' => 'post']);
echo $this->Form->control('title');
echo $this->Form->control('body');
echo $this->Form->token('token');
echo $this->Form->end(__('Submit'));
在前端使用 JavaScript 禁用提交按钮,以防止用户重复点击提交按钮:
document.getElementById("submit-btn").addEventListener("click", function() {
document.getElementById("submit-btn").disabled = true;
});
在控制器中检查表单数据是否已经存在,如果存在则防止重复提交:
public function add() {
$post = $this->Posts->newEmptyEntity();
if ($this->request->is('post')) {
$data = $this->request->getData();
if (!$this->Posts->exists(['title' => $data['title'], 'body' => $data['body']])) {
$post = $this->Posts->patchEntity($post, $data);
if ($this->Posts->save($post)) {
$this->Flash->success(__('The post has been saved.'));
return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__('The post could not be saved. Please, try again.'));
} else {
$this->Flash->error(__('The post already exists.'));
}
}
$this->set(compact('post'));
}
以上是一些常见的防止重复提交表单的方法,可以根据具体情况选择合适的方法。
领取专属 10元无门槛券
手把手带您无忧上云