You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询触发重复请求致book_total被扣减两次的技术问题咨询

解决页面操作时book_total被扣减两次的问题

这种重复扣减的情况我碰到过好几次,大概率是提交逻辑或者请求触发的问题,咱们一步步来排查:

先查最常见的「重复提交」问题

  • 前端按钮/事件重复绑定:你先看看页面里的提交按钮,是不是同时用了表单默认提交(比如<button type="submit">)又加了AJAX提交的onclick事件?这会导致一次点击触发两次请求。另外也检查下有没有给提交事件绑定了两次监听代码,比如写了两次$('form').submit(function(){...})。
  • 页面里有重复表单/按钮:有时候模板渲染错误会导致同一个表单或提交按钮被渲染两次,肉眼可能没注意到,点击一次其实触发了两个表单的提交。

再看请求是否被发送了两次

打开浏览器的开发者工具(按F12),切换到「网络」标签,然后在页面上完成借阅操作,盯着请求记录看——如果出现两个一模一样的扣减接口请求,那问题肯定在前端的提交逻辑上;如果只有一次请求,那就要去后端找原因了。

后端逻辑排查(虽然数据库直接操作正常,但也要确认)

你说直接操作数据库没问题,但页面调用的接口脚本里,会不会不小心写了两次扣减book_total的代码?比如:

// 会不会写了两次UPDATE?
$sql = "UPDATE books SET book_total = book_total - 1 WHERE id = ?";
// 执行了一次之后,又不小心执行了一次?

或者有没有在事务里重复执行了更新操作?可以在后端的扣减代码前加个简单的日志,比如把当前时间、请求参数写入一个日志文件,看看这段代码是不是被执行了两次。

结合你给的表单代码的小检查

你贴的表单片段:

<div class="fInput">
  <input type="number" name="bookCount" value="1" min="1" max="<?php echo($row[0][2]); ?>">
</div>
<div class="fInput">
  <input type="date" min="<?php echo($today); ?>" name="dateBorrowed" value="<?php echo($today); ?>">
</div>

先确认bookCount的默认值是1,后端接收这个参数的时候有没有被错误解析成2?不过你说数据库直接操作是对的,这个可能性不大,但可以顺便排查下后端拿到的bookCount参数值是不是正确的。

快速验证小技巧

  1. 操作页面时,立刻看网络请求数,区分是前端多提交还是后端多执行;
  2. 在后端扣减代码里加日志,直接看执行次数,比瞎猜高效多了。

内容的提问来源于stack exchange,提问作者MaakuD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:04:34