You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP开发租车网站:如何整合车辆与预订详情实现提交入库可查

PHP+MySQL租车系统车辆详情与预订数据关联存储实现方案

1. 先搭建带关联关系的数据库表结构

数据关联的核心是靠外键绑定车辆和预订记录,先在phpMyAdmin里执行以下SQL建两张核心表:

-- 车辆产品详情表,存所有车辆的固定信息
CREATE TABLE `vehicles` (
  `vehicle_id` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '车辆唯一ID',
  `vehicle_name` varchar(100) NOT NULL COMMENT '车型名称',
  `brand` varchar(50) NOT NULL COMMENT '品牌',
  `price_per_day` decimal(10,2) NOT NULL COMMENT '日租金',
  `seat_count` tinyint NOT NULL COMMENT '座位数',
  `gear_type` varchar(20) NOT NULL COMMENT '变速箱类型',
  `status` tinyint NOT NULL DEFAULT '1' COMMENT '1=可租 2=已租 3=维护中'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 预订记录表,存用户提交的表单数据,通过vehicle_id关联车辆表
CREATE TABLE `bookings` (
  `booking_id` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '预订记录ID',
  `vehicle_id` int UNSIGNED NOT NULL COMMENT '关联的车辆ID',
  `user_name` varchar(50) NOT NULL COMMENT '预订人姓名',
  `user_phone` varchar(20) NOT NULL COMMENT '预订人手机号',
  `pickup_date` date NOT NULL COMMENT '取车日期',
  `return_date` date NOT NULL COMMENT '还车日期',
  `total_fee` decimal(10,2) NOT NULL COMMENT '订单总金额',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '提交时间',
  FOREIGN KEY (`vehicle_id`) REFERENCES `vehicles`(`vehicle_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

建表时必须选InnoDB引擎,才能支持外键约束,避免出现预订记录关联不存在的车辆的脏数据。

2. 车辆详情页绑定关联ID

用户访问单辆车的详情页时,URL需要携带对应车辆ID,比如car_detail.php?id=2,页面逻辑分两部分:

  • 接收URL中的id参数,查询vehicles表中对应ID的车辆数据,渲染车辆详情(价格、配置、图片等)
  • 页面内的预订表单加一个隐藏输入框,把当前车辆ID存进去,提交表单时会自动把这个ID一起传给后端,示例表单代码:
<!-- 先在页面顶部查询到当前车辆数据存到$vehicle变量 -->
<form action="submit_booking.php" method="post">
  <!-- 隐藏域绑定车辆ID,用户不可见,提交时自动传参 -->
  <input type="hidden" name="vehicle_id" value="<?php echo (int)$vehicle['vehicle_id']; ?>">
  <div>
    <label>姓名:</label>
    <input type="text" name="user_name" required>
  </div>
  <div>
    <label>手机号:</label>
    <input type="tel" name="user_phone" required>
  </div>
  <div>
    <label>取车日期:</label>
    <input type="date" name="pickup_date" required>
  </div>
  <div>
    <label>还车日期:</label>
    <input type="date" name="return_date" required>
  </div>
  <button type="submit">提交预订</button>
</form>

3. 后端接收表单数据入库

新建submit_booking.php文件处理表单提交,用PDO做预处理语句防SQL注入,不要直接拼接用户输入的参数到SQL里,示例代码:

<?php
// 连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=你的数据库名;charset=utf8mb4', '数据库账号', '数据库密码');
// 接收并校验参数
$vehicle_id = (int)$_POST['vehicle_id'];
$user_name = trim($_POST['user_name']);
$user_phone = trim($_POST['user_phone']);
$pickup_date = trim($_POST['pickup_date']);
$return_date = trim($_POST['return_date']);

// 基础校验
if ($vehicle_id <=0 || empty($user_name) || empty($user_phone) || strtotime($pickup_date) >= strtotime($return_date)) {
  exit("提交参数不合法,请检查后重新提交");
}
// 校验关联的车辆是否存在且可租
$checkCar = $pdo->prepare("SELECT vehicle_id, price_per_day, status FROM vehicles WHERE vehicle_id = ?");
$checkCar->execute([$vehicle_id]);
$car = $checkCar->fetch(PDO::FETCH_ASSOC);
if (!$car || $car['status'] != 1) {
  exit("所选车辆暂不可租");
}
// 计算总租金
$days = (strtotime($return_date) - strtotime($pickup_date)) / 86400;
$total_fee = $days * $car['price_per_day'];

// 插入预订记录
$insert = $pdo->prepare("INSERT INTO bookings (vehicle_id, user_name, user_phone, pickup_date, return_date, total_fee) VALUES (?, ?, ?, ?, ?, ?)");
$insertResult = $insert->execute([$vehicle_id, $user_name, $user_phone, $pickup_date, $return_date, $total_fee]);

if ($insertResult) {
  // 插入成功可以跳转到预订成功页
  header("Location: booking_success.php");
  exit;
} else {
  exit("预订提交失败,请稍后重试");
}
?>

4. phpMyAdmin查看关联数据

代码逻辑跑通后,用户提交的预订数据会自动存入bookings表:

  • 直接点phpMyAdmin左侧对应数据库下的bookings表,就能看到所有用户提交的预订记录
  • 如果要同时查看每条预订对应的车辆详情,在phpMyAdmin的SQL查询页执行关联查询语句即可:
SELECT b.*, v.vehicle_name, v.brand, v.price_per_day
FROM bookings b
LEFT JOIN vehicles v ON b.vehicle_id = v.vehicle_id
ORDER BY b.create_time DESC

注意:所有用户传入的参数必须做类型校验和格式校验,比如手机号正则、日期合法性校验,不要信任任何前端传过来的数据;高并发场景下需要加事务处理,避免同一辆车被重复预订。

内容的提问来源于stack exchange,提问作者Navya Mariam Babu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 07:48:56