2012-03-14 89 views
0

当另一个用户已经在页面上时,我需要锁定用户。锁定用户,不允许mysql更新

它应该仍然可以查看帖子并添加东西,但mysql中的函数更新不应该被允许,因为它可能会覆盖数据。

有谁知道如何做到这一点?我一直在努力想出答案。

系统使用php和mysql。当另一个用户在同一页面上时,用户已经收到一条消息。我所需要的是找到一种方法来'禁用'mysql更新...

谢谢你提前!

Youri

回答

0

设置会话变量并跟踪它。假设变量的名称是“参与”

用户X访问页面,如果(参与== 1){readonly} else {read_and_write; set engaged = 1}

+0

现在某个用户将如何知道另一个用户正在编辑页面? – kirilloid 2012-03-14 22:28:31

+0

呵呵?被占用的变量将被设置为1.当用户完成该页面时,重置该变量。 – Stewie 2012-03-14 22:30:52

+0

在php中是否有全局会话?不同用户之间共享。 – kirilloid 2012-03-14 22:38:17

0

不要试图处理这是数据库。如果你开始购买和持有锁,尤其是与网络客户端,你正在进入一个痛苦的世界!

这是我如何处理它:

首先,创建一个表,让我们把它RecordLockTable_nameRecord_idtimeout)设超时是UNIX时间戳(保存所有有关使用日期时间的碴)让' table_name'和'Record_Id'是一个复合主键。

每当用户加载一个页面,请执行下列操作:

  1. DELETE FROM RecordLock WHERE timeout < CURRENT_TIMESTAMP这是清除任何过期的锁。
  2. 将一条记录插入到记录锁(table_name,record_id,timestamp + timeout)中,其中timeout是锁有效的秒数。这是为了确保一个记录不会永远锁定,如果有人离开他们的浏览器或断开与互联网的连接。您也可以通过SELECT查看锁是否存在,但请注意,根据您如何处理交易,可以在您的SELECTINSERT之间插入一条记录。

如果插入失败,某人已经获得锁定(由于表和记录ID上的PK),您的应用程序应该知道该记录是read_only并且不允许保存,并且警告用户记录正在编辑中。

如果插入成功,则锁定。 3.当当前用户关闭或保存记录时,删除RecordLock中的记录(否则它只会过期并可能阻止其他用户超过需要的时间)

+0

没关系,我已经完成了它。现在的问题是,当用户按下浏览器上的后退按钮时,它们会返回旧表单,然后可以再次保存。帮帮我 – Youri 2012-03-19 16:09:51