我的网站上有一些数据(用PHP和MySql编写),用户可以编辑。
如您所知,如果User A
打开编辑框,并且在此编辑过程中另一个User B
打开相同的编辑框,则其中一个用户将丢失其修订版(首先完成的修订版)
所以我为第一个尝试编辑的用户实现了一种访问时间(20分钟)。这是代码:
$dateBlock=date("Y-m-d H:i:s");
$update=mysql_query("UPDATE tracklist SET block_user='".$_SESSION['nickname']."', block_date='".$dateBlock."' WHERE
(trackid='".$_GET['trackid']."' AND block_user='') or
(trackid='".$_GET['trackid']."' AND block_user='".$_SESSION['nickname']."') or
(trackid='".$_GET['trackid']."' AND block_date<SUBTIME('".$dateBlock."', '0:20'))",$mydb);
$updatedRows=mysql_affected_rows();
if($updatedRows==0) $messaggio="Sorry but another User is editing this tracklist";
但我不喜欢这种approch。
你能给我什么建议?例如,stackoverflow上的approch是什么?
答案 0 :(得分:2)
最好的方法是使第二版无效,因为你可以做出反应,推动这种情况 要以这种方式进行管理,您需要跟踪增量“editionID”,因此,如果版本ID是您接受版本的当前版本,则两个会话在开始编辑时,在第一次提交时(以及在事务上)都会返回相同的版本ID(和增加editionID),否则(给第二个浏览器)你会给出一个指示情况的消息 请记住,此方法仅在低切割概率情况下有效。
答案 1 :(得分:2)
您必须在两个选项中进行选择:
您还可以提供的增强功能是通过将版本/提交时间与他下载的帖子进行比较,通知用户该帖子在他想要发送其编辑的那一刻打开后已更新。他可以先选择先查看并整合变化。
答案 2 :(得分:0)
最好的方法是通过websockets锁定编辑框,只要它们被其他人打开...