2012-03-14 101 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