php实现酒店预订
PHP 实现酒店预订系统
数据库设计
创建数据库表存储酒店、房间、预订信息。关键表包括:
hotels(酒店信息:id、名称、地址、描述等)rooms(房间信息:id、酒店id、房型、价格、容量等)bookings(预订记录:id、用户id、房间id、入住/退房日期、状态等)
CREATE TABLE hotels (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
address TEXT,
description TEXT
);
CREATE TABLE rooms (
id INT AUTO_INCREMENT PRIMARY KEY,
hotel_id INT,
type VARCHAR(50),
price DECIMAL(10,2),
capacity INT,
FOREIGN KEY (hotel_id) REFERENCES hotels(id)
);
CREATE TABLE bookings (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
room_id INT,
check_in DATE,
check_out DATE,
status ENUM('confirmed', 'cancelled'),
FOREIGN KEY (room_id) REFERENCES rooms(id)
);
预订流程实现
创建PHP处理表单提交和数据库操作。核心文件包括:

booking.php(处理预订逻辑)search.php(搜索可用房间)
// booking.php 示例代码
<?php
require 'db_connection.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$userId = $_POST['user_id'];
$roomId = $_POST['room_id'];
$checkIn = $_POST['check_in'];
$checkOut = $_POST['check_out'];
// 检查房间可用性
$stmt = $pdo->prepare("SELECT * FROM bookings WHERE room_id = ?
AND ((check_in <= ? AND check_out >= ?)
OR (check_in <= ? AND check_out >= ?))");
$stmt->execute([$roomId, $checkOut, $checkOut, $checkIn, $checkIn]);
if ($stmt->rowCount() === 0) {
// 创建预订
$insert = $pdo->prepare("INSERT INTO bookings
(user_id, room_id, check_in, check_out, status)
VALUES (?, ?, ?, ?, 'confirmed')");
$insert->execute([$userId, $roomId, $checkIn, $checkOut]);
echo "Booking confirmed!";
} else {
echo "Room not available for selected dates";
}
}
?>
支付集成
集成支付网关如Stripe或PayPal完成交易:
// 示例Stripe集成
require 'vendor/autoload.php';
\Stripe\Stripe::setApiKey('sk_test_...');
$token = $_POST['stripeToken'];
$amount = $_POST['amount'] * 100; // 转换为分
try {
$charge = \Stripe\Charge::create([
'amount' => $amount,
'currency' => 'usd',
'source' => $token,
'description' => 'Hotel Booking'
]);
// 更新预订状态为已支付
} catch (\Stripe\Exception\ApiErrorException $e) {
echo "Payment failed: " . $e->getMessage();
}
安全措施
实现安全防护机制:

- 使用预处理语句防止SQL注入
- 对用户输入进行验证和过滤
- 实施CSRF保护
- 敏感数据加密存储
// 输入验证示例
function validateDate($date) {
$d = DateTime::createFromFormat('Y-m-d', $date);
return $d && $d->format('Y-m-d') === $date;
}
if (!validateDate($_POST['check_in']) || !validateDate($_POST['check_out'])) {
die('Invalid date format');
}
邮件通知
发送预订确认邮件给用户:
$to = 'user@example.com';
$subject = 'Booking Confirmation';
$message = "Your booking for room $roomId from $checkIn to $checkOut is confirmed";
$headers = 'From: noreply@hotel.com';
mail($to, $subject, $message, $headers);
管理界面
创建后台管理界面处理预订:
- 查看/修改预订
- 房间管理
- 报表生成
通过合理设计数据库结构、实现核心业务流程、集成支付系统并加强安全防护,可以构建完整的酒店预订系统。系统应包含用户界面、管理后台和必要的API接口。






