2010-08-24 249 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