PHP:如果用户未按下提交按钮,Mysql 回滚多个查询(通过 ajax 完成)

Posted

技术标签:

【中文标题】PHP:如果用户未按下提交按钮,Mysql 回滚多个查询(通过 ajax 完成)【英文标题】:PHP: Mysql rollback multiple query (done via ajax) if user not pressed submit button 【发布时间】:2014-11-03 16:41:30 【问题描述】:

我有一个页面,在这个页面中通过 ajax jQuery 执行插入/更新/删除操作。

如果用户不按提交按钮或按取消按钮,则回滚通过 ajax 执行的所有更改/查询。 临时表不可能,因为有很多数据。

请建议我这样做的正确方法。

【问题讨论】:

临时表也不错,如果使用得当的话,即使有很多数据。您还可以使用会话。将您的数据存储在用户的会话中,一旦您的表单被提交,请更新您的表格。 我会考虑将它存储在我自己的会话中,就像凯文所说的那样。我不确定临时表及其限制。 会话是您唯一的选择。添加ajax数据后,你有3种可能的结果,提交点击、取消点击、页面放弃。除了会话之外,没有其他方法可以处理 #3。 我会尝试使用会话或临时表。感谢您的回复。 @KevinLabécot,但管理编辑/更新记录很复杂,因为第一次需要从表中获取数据,然后用户执行操作,我想管理第二次用户操作。 【参考方案1】:

检测页面离开事件。然后删除你想要的。

window.onbeforeunload = function (e) 
  var message = "Your confirmation message goes here.",
  e = e || window.event;
  // For IE and Firefox
  if (e) 
    e.returnValue = message;
  

  // For Safari
  return message;
;

【讨论】:

假设浏览器永远不会崩溃。 哇...这是一个非常糟糕的方法。浏览器会崩溃,onbeforeunload 不是通用的... 最后一步,在事务结束时拉取flag。忽略没有最后一步标志的记录(true)。【参考方案2】:

如果您的数据库是 InnoDB,您可以检查mysql Transactions,特别是 ROLLBACK 语句。它会做你的工作。

如果您将查询放在事务中,则可以在提交按钮被按下时提交它,或者在其他情况下回滚它。

【讨论】:

事务不适用于此用例。他说数据是通过 ajax 调用添加的。 @ChrisCaviness 是的,我尝试了事务和回滚。 是的,你是对的,从来没有在 ajax 上使用过它们并认为我会工作

以上是关于PHP:如果用户未按下提交按钮,Mysql 回滚多个查询(通过 ajax 完成)的主要内容,如果未能解决你的问题,请参考以下文章

为啥 KeyListener 仅在未按下按钮时才起作用?

按下和未按下的 UIButton 图像

未按下按钮时如何调用按钮功能

TouchGFX:如何处理按下/未按下按钮的指令

UITableViewCell 中未按下 UIButton

在选择器视图上未按下按钮