2010-02-27 66 views
0

我想創建一個網頁,註冊用戶挑選數字1到10。當用戶拿起這個數字是從可用列表中刪除一個號碼。挑一些1到10的網頁

有沒有辦法來保證,沒有2個或更多的用戶可以有相同的號碼嗎?

感謝, 杆

+3

是的,但它更像是「點擊一個數字來試圖聲明它,我們會告訴你它是否工作。」 - 您可以在數據庫中使用鎖定和表格來確定數字是否已被聲明。 (作爲評論發表,因爲我意識到這不是一個寫得好的答案,對不起。) – 2010-02-27 04:40:15

回答

2

我不知道如何做到這一點的技術,你的標籤,但你需要一個數據庫,即保留每個號碼的狀態:採取或免費。您將有一個頁面上的表單,將提交選擇一個表單處理程序,將檢查數據庫中的數的狀態數。如果被採用,您會向用戶發送一個網頁,上面寫着「採取太壞這就是」什麼的,如果它是免費的,你將其標記爲拍攝,然後再發送一個網頁說,他們得到了它。

您的服務器可能會按照先到先得的原則處理請求,如果您使用任何現代數據庫,它會阻止您(您只是不想讓兩個人同時嘗試獲取相同的號碼)

也,表格,表單處理程序不必是不同的文件

,你可能想記錄誰拿了什麼號碼,所以沒有上當受騙的狀態可能是好是沒有的狀態數字的用戶名。

1

這個問題被標記的SQL服務器,所以我將提供一個SQL Server的答案...

如果您有相關的註冊用戶ID和數量的表格,對這些兩列的唯一約束,然後,如果插入記錄成功記錄被該用戶聲明,否則它不可用。

CREATE TABLE dbo.UserSelection 
(
    user_id int not null, 
    selection int not null, 
    CONSTRAINT UK_UserSelection__user_id__selection UNIQUE (user_id, selection) 
) 

有很多方法來告訴我們,如果插入失敗。一種方法是檢查是否有錯誤。執行一些類似於你的應用程序的SQL:

SqlCommand cmd = connection.CreateCommand(); 
cmd.CommandText = "INSERT INTO dbo.UserSelection(user_id, selection) VALUES (@id, @selection); SELECT @@ERROR;"; 
cmd.Parameters.AddWithValue("@id", userId); 
cmd.Parameters.AddWithValue("@selection", selection); 
bool youHaveThatSelection = 0 == (int)cmd.ExecuteScalar();