2010-02-27 26 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();