2010-08-24 138 views
2

你好親愛的 我是PHP和JavaScript新手。我創建了一個使用PHP/JavaScript的預訂網站,但是當兩個人或兩個以上人選擇導致併發生產衝突的時間段(用於預訂)時,我遇到了問題。所以請幫助如何用PHP/JavaScript代碼解決這個問題。如何解決PHP衝突?

+3

請向我們展示您的代碼! – DLH 2010-08-24 12:59:52

+2

不明白爲什麼這個問題應該關閉,這是一個問題如何解決簡單預約系統中的數據衝突的措辭。 – 2010-08-24 13:03:22

+1

@DLH:這不涉及更多的設計解決方案,而不是一個編碼解決方案(即使他要求代碼)。完整的代碼是否可以在幾行內處理? – 2010-08-24 13:08:28

回答

7

你好,親愛的

你的問題是很常見的尤其是在預訂系統。您可以採取一些措施來解決此問題,但如果沒有首先查看代碼,任何人都無法發佈免費代碼,因此現在我們只需向您提供想法。

我會假設訪問者預訂一個我將稱之爲「座位」的隱私。

預訂座位

用戶希望預訂座位。將座位狀態設置爲保留。這將在其他用戶屏幕上顯示爲已預訂。預訂將在30分鐘內過期,因此訪問者不再需要它。儘管要小心這種濫用,但訪問者可以不斷地「保留」所有座位,阻止任何人購買門票。

先到先得

讓大家預訂座位,誰支付它首先它,然後其他人必須重新挑選座位。這個選項不是非常用戶友好的,但很容易實現。

+0

@Tom Gullen:很好的答案,但是先到先得的服務是那麼容易?!如果過程A更新了表示「SEAT BOOKED」的DB行,並且過程B同時進行,他們都將預訂相同的座位。你使用SQL原子trasaction回滾?你可以解釋一下,這很有趣。 – 2010-08-24 13:12:13

+0

在付款之前,您根本不會更改座位的狀態。付款完成後,在處理付款之前,請檢查是否已預訂,如果是,請重新選擇座位,如果沒有,請將其設置爲正在購買,然後處理付款。如果付款失敗,請將座位恢復爲免費。這會吸引人們可能需要重新啓動多次的流行事件。 – 2010-08-24 13:19:45

+0

@Tom Gullen:對最後一條評論不能不同意。這正是我們在這裏面臨的問題。你怎麼能確定我們避免了這一點:進程A讀取行並看到「SEAT NOT BOOKED」,同時進程B(併發運行)執行相同的操作,並看到相同的「SEAT NOT BOOKED」,因此兩個進程都去打開並更新具有相同值「BOOKED」的同一DB行,現在兩名用戶已預訂相同的座位。重新排列DB行不能解決併發預訂問題。這就是我要求解釋的原因。 – 2010-08-24 13:33:44