PHP打造高效在线活动票务系统

admin 2025-01-14 337 0

在数字化时代,线上活动已成为主流,而一个高效、便捷的在线票务系统则是成功举办活动的关键。本文将带你一步步用PHP构建一个功能完备的在线活动票务系统,助你轻松管理活动门票。

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,并设计以下表:

  1. events:存储活动信息

    • id
    • name
    • date
    • venue
    • total_tickets
    • available_tickets
  2. 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)