我目前正在开发一个具有编辑按钮的应用程序:
我的编辑按钮:
<th title="Edit task" class="edit" style="float: right; $color;">
<?php
echo "<a href=edit.php?id=" . $row["id"] . ">
<i class=material-icons>edit</i>
</a>";
?>
</th>
我的目标是一次只有一个人可以编辑一篇文章。这有可能吗?如果是的话,我怎么做呢?
发布于 2018-10-19 04:37:05
如果您只想禁用按钮以避免并发编辑,那么这是一个糟糕的想法,因为用户总是可以通过直接链接打开编辑页面。实际上,您需要实现并发控制。
您可以实现对记录的锁定以实现并发控制。
例如,可以使用以下简单算法实现并发控制:
但是,您可以实现乐观锁定,而不是这个算法。
乐观锁定允许用户同时打开编辑页面,但它禁止以并行方式保存记录。这是避免对记录进行并行修改的一种更好的方法。
乐观锁定包括接受或拒绝с更改的记录,以依赖记录版本。
它的工作原理如下:每一篇文章都有一个“version”param,其中包含了记录修改的数量。一个用户打开版本等于1的文章的编辑页面,另一个用户同时打开它。他们都保存了同一篇文章。首先,您得到一个记录修改请求,并将存储记录的版本与更新记录的版本进行比较,如果它们相等,那么您应该接受更改,并将更新的记录保存在存储中,并以1的增量增加“version”param,否则,您应该拒绝更改。由于该算法的结果,存储记录的版本将等于2。接下来,您将得到第二个请求并再次比较版本,但是由于存储记录的版本等于2,而从第二个请求中更新的记录版本等于1,因此此更改将被拒绝。当然,您必须将其更改的拒绝通知用户,并使用户能够更新新的记录变体。
发布于 2018-10-22 05:04:39
这就是我在我的申请中所做的:
当用户按下“编辑”按钮时,将时间戳记录在数据库中,并将用户重定向到编辑页面。在编辑页面中,设置一个计时器并将其显示给可以编辑记录的用户,直到计时器用完为止。
例如,根据您的记录,您可以考虑用户编辑记录的时间为2分钟。时间从01:59“开始到00‘:00”。
对于其他用户,单击“编辑”按钮时,应检查其他用户是否正在编辑该记录,您可以通过从登录数据库中计算时间来实现这一点。
如果用户编辑2分钟以下的记录并保存它,您可以删除编辑日志,让其他用户进行编辑。
发布于 2018-10-12 02:42:01
以我的观点来看,这不是完全可能的。
但是试着用下面的方式来做。
您可以在数据库中添加“打开”和“时间”两列
如果有人在编辑,将“打开”设置为“true”或“false”。还将时间戳设置为“time”列。在编辑过程中,每隔几秒钟替换一次时间戳。
如果有人打开它,检查'open‘列和它的'true',计算从' time’列传递的时间。如果超过一定的时间(例如2或3分钟),假设另一个用户不再编辑,并允许该用户进行编辑。
为了说清楚,
您需要添加一个ajax调用,它是在每分钟/秒之后更新时间戳。如果您在编辑页面中。因此,如果有人关闭浏览器,时间戳将不会更新,在下一个用户尝试编辑之后,如果时间戳较旧,则允许编辑该用户。因为我们假设用户关闭了选项卡或浏览器,因此没有更新标志,但时间戳更旧。
这不是完美的解决方案,但你可以试试。
https://stackoverflow.com/questions/52777070
复制相似问题