如何使用 php 在 mysql 中进行购票预订系统?
Posted
技术标签:
【中文标题】如何使用 php 在 mysql 中进行购票预订系统?【英文标题】:How do I make a reservation system for purchasing tickets in mysql using php? 【发布时间】:2015-06-28 08:54:17 【问题描述】:两个有问题的场景:
如果 2 位用户想每人购买 1 张票,而 1 张票有库存怎么办? 如果 3 位用户想每人购买 1 张门票,但有 2 张门票有库存怎么办?我希望能够在门票位于支付网关时“预订”门票。这意味着门票仍未购买,但当前保留给相关用户,因此当第一个用户仍在付款过程中时,其他用户无法购买。
我的数据库中有两个表:
1. Ticket_type_id:包含票据的类型
ticket_type-id 姓名 说明 stock_remaining2. Ticket_purchased:包含所有已购买的门票
ticket_id ticket_type_id user_id购买机票时,应从“stock_remaining”中减去正确的金额,并在该人在支付网关中时进行保留。只有在支付成功后,才能在第二个表中创建所有票,并且从“stock_remaining”中扣除是最终的。
到目前为止,我想出了以下过程(我的尝试代码):
当用户点击“签出”时,PHP 会话 就会启动。 php 开始一个数据库内的事务。此交易从门票库存总额中扣除并为给定用户生成门票,但不提交。
如果以下任何查询失败,则整个事务回滚,会话关闭,并为用户提供错误消息。但是,如果成功,支付网关将打开。
一旦网关完成,支付成功,用户从网关返回我使用Volley向正在运行的session发送成功参数。如果事务提交成功,则回滚。
session_start();
$response = array();
begin(); // transaction begins
if (isset($_POST['ticketTypeId']) && isset($_POST[‘ticketQuantity’]) && isset($_POST['userId']))
$ticketTypeId = $_POST['ticketTypeId'];
$ticketQuan = $_POST['ticketQuantity'];
$userId= $_POST['userId'];
$query1 = check if quantity required is available
$query2 = deduct quantity from total remaining
ForLoop(ticket quantity)
$query3 = generate one ticket for user
if(!success)
// On SUCCESS
$response["success"] = 1;
echo json_encode($response);
else
// On Failed
$response["success"] = 0;
echo json_encode($response);
rollback(); // transaction rolls back
exit;
if (isset($_POST['Transaction']))
$transaction = $_POST['Transaction'];
if($transaction == 1)
// On Success
$response["success"] = 1;
echo json_encode($response);
commit(); // transaction is committed
exit;
else
// On Failed
$response["success"] = 0;
echo json_encode($response);
rollback(); // transaction rolls back
exit;
我不知道如何重新连接到会话,所以我不知道这是否有效。
【问题讨论】:
您好,请考虑发布您的尝试(代码)。没有人愿意完成你的工作:) 【参考方案1】:对于销售 1 张票的问题情况,当 2 张请求它时,您可能希望在有人将其放入购物车后锁定 1 张票或/并且您可以在 mysql 上使用事务。
同样的问题也发生在信用卡上。当两辆购物车试图同时拉动最大信用额度时。只有第一个得到服务.. 希望 ;)
【讨论】:
以上是关于如何使用 php 在 mysql 中进行购票预订系统?的主要内容,如果未能解决你的问题,请参考以下文章
计算机毕业设计ssm+vue基本微信小程序的电影票务系统-电影票预订系统