php实现酒店预订
实现酒店预订系统的基本步骤
数据库设计
创建必要的数据库表结构:
hotels表存储酒店信息(名称、地址、星级等)rooms表存储房型信息(类型、价格、最大入住人数等)bookings表存储预订记录(用户ID、入住/退房日期、订单状态等)
CREATE TABLE hotels (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
address TEXT,
star_rating INT
);
CREATE TABLE rooms (
id INT AUTO_INCREMENT PRIMARY KEY,
hotel_id INT,
type VARCHAR(50),
price DECIMAL(10,2),
max_guests 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('pending','confirmed','cancelled'),
FOREIGN KEY (room_id) REFERENCES rooms(id)
);
核心功能实现
房源搜索功能
通过日期范围和人数筛选可用房型:
function searchAvailableRooms($checkIn, $checkOut, $guests) {
$sql = "SELECT r.*, h.name as hotel_name
FROM rooms r
JOIN hotels h ON r.hotel_id = h.id
WHERE r.max_guests >= ?
AND r.id NOT IN (
SELECT room_id FROM bookings
WHERE status = 'confirmed'
AND ((check_in <= ? AND check_out >= ?)
OR (check_in <= ? AND check_out >= ?))
)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$guests, $checkOut, $checkIn, $checkIn, $checkOut]);
return $stmt->fetchAll();
}
预订处理逻辑
验证房源可用性后创建订单:

function createBooking($userId, $roomId, $checkIn, $checkOut) {
// 检查房态
if (!isRoomAvailable($roomId, $checkIn, $checkOut)) {
throw new Exception("该房型在所选日期不可用");
}
// 创建订单
$sql = "INSERT INTO bookings
(user_id, room_id, check_in, check_out, status)
VALUES (?, ?, ?, ?, 'confirmed')";
$stmt = $pdo->prepare($sql);
$stmt->execute([$userId, $roomId, $checkIn, $checkOut]);
return $pdo->lastInsertId();
}
支付系统集成
调用第三方支付API(如支付宝/微信支付):
function processPayment($bookingId, $amount, $paymentMethod) {
$paymentResult = callPaymentGateway($amount, $paymentMethod);
if ($paymentResult['success']) {
updateBookingStatus($bookingId, 'confirmed');
return true;
} else {
updateBookingStatus($bookingId, 'cancelled');
return false;
}
}
安全注意事项
输入验证
对所有用户输入进行过滤:

$checkIn = filter_input(INPUT_POST, 'check_in', FILTER_SANITIZE_STRING);
$guests = filter_input(INPUT_POST, 'guests', FILTER_VALIDATE_INT);
防SQL注入
使用预处理语句:
$stmt = $pdo->prepare("SELECT * FROM rooms WHERE id = ?");
$stmt->execute([$roomId]);
扩展功能建议
库存管理系统
实现房量动态管理:
ALTER TABLE rooms ADD COLUMN inventory INT DEFAULT 1;
价格动态计算
根据日期实现浮动价格:
function getDynamicPrice($roomId, $checkIn) {
// 获取基础价格
// 添加节假日溢价逻辑
// 返回最终价格
}






