我制作了多用户应用程序,如果两个用户打开相同的编辑页面,同时用户在表单中输入数据就会出现冲突数据,所以我需要一个解决方案,如果一个用户打开特定的编辑页面然后全部其他用户阻止一段时间,并向他们提示消息,如“其他用户编辑同一页面....”
答案 0 :(得分:2)
可能,
您可以在数据库中添加两列'打开'和'时间'
设置'打开'真的'或者' false'如果有人正在编辑它。 同时为时间设置时间戳'柱。在编辑过程中每隔这么多秒替换时间戳。
如果其他人打开了它,请检查“打开”状态。列和它的真实',计算从'时间过去的时间'柱。 如果超过一定时间(例如2或3分钟),则假设其他用户不再编辑并允许此用户进行编辑。
为了清楚起见,
选项1:
选项2:
答案 1 :(得分:1)
最佳和最简单的方法是在点击编辑后在网站和编辑用户之间保持实时连接。
所以基本步骤:
1)用户点击编辑
2)启动与该用户的ajax或websocket连接,告诉服务器文件仍在编辑中
3)如果用户手动关闭或刚离开网站,有一些逻辑来处理它服务器端
4)利润。
连续的ajax调用服务器(如聊天应用程序)可以更新“time_last_edited”列,如果该列超过10秒,文件可以安全编辑,否则表示某人仍在编辑它
答案 2 :(得分:0)
为内容提供修改时间。在提交新内容之前,请检查时间是否与之前相同。如果不同,则内容已更改,应通知用户。
绕过大多数边缘情况。
答案 3 :(得分:0)
在表格中有一个字段,例如Page_status,如果用户打开它进行编辑,则将其设置为已锁定。如果编辑完成,则将其设置为解锁。并且每次在允许每个用户编辑之前检查状态。
如果用户关闭页面而不进行编辑。然后为每个用户设置会话并设置时间限制,如果会话过期,则将状态设置为解锁。
答案 4 :(得分:0)
为此,你必须在表中保留标志,如果你有表名" userdetails"使用名称,移动设备,电子邮件,地址等列,现在又添加两个列名称
使用数据类型TINYINT,默认值为0 inuseddatetime,数据类型为datetime,默认值为NULL
一旦特定用户打开详细信息进行编辑 将inused列更新为1 和当前日期和时间的inuseddatetime列
因此,其他用户打开相同的详细信息进行编辑,如果列有值1则显示提示。
为了再次将1改为0, 当第一个用户点击提交按钮再次更新 inused列为0 和inuseddatetime列为null
在某些情况下,如果用户没有按下提交按钮并离开页面以避免这种情况,您可以在服务器上写入cron作业,该服务器将检入indatetime列并将更新的inused列更新为0,用于最近10分钟理想的列或5分钟