当前位置:首页 > PHP

php实现酒店预订

2026-02-27 23:09:07PHP

PHP 实现酒店预订系统

酒店预订系统通常包含用户注册、房间查询、预订管理、支付处理等功能。以下是使用 PHP 实现酒店预订系统的关键步骤和代码示例。

数据库设计

创建数据库表结构,存储用户、房间和预订信息。

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    password VARCHAR(255) NOT NULL
);

CREATE TABLE rooms (
    id INT AUTO_INCREMENT PRIMARY KEY,
    type VARCHAR(50) NOT NULL,
    price DECIMAL(10, 2) NOT NULL,
    description TEXT,
    availability BOOLEAN DEFAULT TRUE
);

CREATE TABLE bookings (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    room_id INT NOT NULL,
    check_in DATE NOT NULL,
    check_out DATE NOT NULL,
    status VARCHAR(20) DEFAULT 'pending',
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (room_id) REFERENCES rooms(id)
);

用户注册与登录

实现用户注册和登录功能,确保安全性。

// 注册处理
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['register'])) {
    $username = $_POST['username'];
    $email = $_POST['email'];
    $password = password_hash($_POST['password'], PASSWORD_DEFAULT);

    $stmt = $pdo->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
    $stmt->execute([$username, $email, $password]);
}

// 登录处理
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['login'])) {
    $email = $_POST['email'];
    $password = $_POST['password'];

    $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
    $stmt->execute([$email]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        header("Location: dashboard.php");
    }
}

房间查询与预订

实现房间查询和预订功能。

// 查询可用房间
$check_in = $_POST['check_in'];
$check_out = $_POST['check_out'];

$stmt = $pdo->prepare("SELECT * FROM rooms WHERE availability = TRUE AND id NOT IN (
    SELECT room_id FROM bookings WHERE 
    (check_in <= ? AND check_out >= ?) OR
    (check_in <= ? AND check_out >= ?)
)");
$stmt->execute([$check_out, $check_in, $check_in, $check_out]);
$rooms = $stmt->fetchAll();

// 预订房间
if (isset($_POST['book'])) {
    $room_id = $_POST['room_id'];
    $user_id = $_SESSION['user_id'];

    $stmt = $pdo->prepare("INSERT INTO bookings (user_id, room_id, check_in, check_out) VALUES (?, ?, ?, ?)");
    $stmt->execute([$user_id, $room_id, $check_in, $check_out]);
}

支付处理

集成支付网关(如 Stripe 或 PayPal)处理支付。

// Stripe 支付示例
require_once 'vendor/autoload.php';
\Stripe\Stripe::setApiKey('your_stripe_api_key');

$token = $_POST['stripeToken'];
$amount = $_POST['amount'];

try {
    $charge = \Stripe\Charge::create([
        'amount' => $amount * 100,
        'currency' => 'usd',
        'source' => $token,
        'description' => 'Hotel Booking Payment'
    ]);

    $stmt = $pdo->prepare("UPDATE bookings SET status = 'paid' WHERE id = ?");
    $stmt->execute([$booking_id]);
} catch (\Stripe\Exception\ApiErrorException $e) {
    echo $e->getMessage();
}

预订管理

提供用户和管理员界面管理预订。

// 用户查看预订
$user_id = $_SESSION['user_id'];
$stmt = $pdo->prepare("SELECT bookings.*, rooms.type, rooms.price FROM bookings JOIN rooms ON bookings.room_id = rooms.id WHERE user_id = ?");
$stmt->execute([$user_id]);
$bookings = $stmt->fetchAll();

// 管理员管理预订
$stmt = $pdo->query("SELECT bookings.*, users.username, rooms.type FROM bookings JOIN users ON bookings.user_id = users.id JOIN rooms ON bookings.room_id = rooms.id");
$all_bookings = $stmt->fetchAll();

安全性考虑

确保系统安全性,防止 SQL 注入和 XSS 攻击。

// 使用预处理语句防止 SQL 注入
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);

// 转义输出防止 XSS
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');

部署与优化

部署到服务器并进行性能优化。

php实现酒店预订

  • 使用缓存(如 Redis)减少数据库查询。
  • 启用 HTTPS 确保数据传输安全。
  • 定期备份数据库。

通过以上步骤,可以构建一个功能完整的酒店预订系统。根据需求,可以进一步扩展功能,如评价系统、房间图片上传等。

标签: 酒店预订php
分享给朋友:

相关文章

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php 实现类

php 实现类

PHP 类的基本实现 在 PHP 中,类通过 class 关键字定义,后跟类名和一对花括号。类名通常遵循大驼峰命名法(如 ClassName)。以下是基本语法: class ClassName {…