在数字化时代,线上活动已成为主流,而一个高效、便捷的在线票务系统则是成功举办活动的关键。本文将带你一步步用PHP构建一个功能完备的在线活动票务系统,助你轻松管理活动门票。
项目准备
首先,确保你的开发环境已安装PHP、MySQL和Web服务器(如Apache或Nginx)。创建一个新的项目目录,并在此目录下设置好基本的文件结构:
/ticket-system
/includes
config.php
/templates
header.php
footer.php
index.php
buy_ticket.php
admin.php
数据库设计
在MySQL中创建一个数据库ticket_system
,并设计以下表:
-
events:存储活动信息
- id
- name
- date
- venue
- total_tickets
- available_tickets
-
tickets:存储门票信息
- id
- event_id
- user_name
- user_email
- purchase_date
使用以下SQL语句创建表:
CREATE TABLE events (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
date DATE NOT NULL,
venue VARCHAR(255) NOT NULL,
total_tickets INT NOT NULL,
available_tickets INT NOT NULL
);
CREATE TABLE tickets (
id INT AUTO_INCREMENT PRIMARY KEY,
event_id INT NOT NULL,
user_name VARCHAR(255) NOT NULL,
user_email VARCHAR(255) NOT NULL,
purchase_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (event_id) REFERENCES events(id)
);
配置文件
在includes/config.php
中配置数据库连接:
<?php
$host = 'localhost';
$db = 'ticket_system';
$user = 'root';
$pass = 'password';
$dsn = "mysql:host=$host;dbname=$db;charset=utf8mb4";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
?>
前端页面
首页(index.php)
展示所有活动,并提供购票链接:
<?php
include 'includes/config.php';
include 'templates/header.php';
$stmt = $pdo->query("SELECT * FROM events");
$events = $stmt->fetchAll();
?>
<h1>欢迎来到在线票务系统</h1>
<div class="events">
<?php foreach ($events as $event): ?>
<div class="event">
<h2><?php echo $event['name']; ?></h2>
<p>日期:<?php echo $event['date']; ?></p>
<p>地点:<?php echo $event['venue']; ?></p>
<p>剩余票数:<?php echo $event['available_tickets']; ?></p>
<a href="buy_ticket.php?event_id=<?php echo $event['id']; ?>">购买门票</a>
</div>
<?php endforeach; ?>
</div>
<?php include 'templates/footer.php'; ?>
购票页面(buy_ticket.php)
处理用户购票请求:
<?php
include 'includes/config.php';
include 'templates/header.php';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$event_id = $_POST['event_id'];
$user_name = $_POST['user_name'];
$user_email = $_POST['user_email'];
$stmt = $pdo->prepare("SELECT available_tickets FROM events WHERE id = ?");
$stmt->execute([$event_id]);
$event = $stmt->fetch();
if ($event['available_tickets'] > 0) {
$stmt = $pdo->prepare("INSERT INTO tickets (event_id, user_name, user_email) VALUES (?, ?, ?)");
$stmt->execute([$event_id, $user_name, $user_email]);
$stmt = $pdo->prepare("UPDATE events SET available_tickets = available_tickets - 1 WHERE id = ?");
$stmt->execute([$event_id]);
echo "<p>购票成功!</p>";
} else {
echo "<p>票已售罄!</p>";
}
} else {
$event_id = $_GET['event_id'];
?>
<h1>购买门票</h1>
<form method="post">
<input type="hidden" name="event_id" value="<?php echo $event_id; ?>">
<label
评论(0)