php怎么实现停车
PHP实现停车场管理系统
停车管理系统的核心功能包括车辆进出记录、停车计费、车位管理等。以下是一个基于PHP和MySQL的简单实现方案:
数据库设计
创建名为parking_system的数据库,包含以下表结构:
CREATE TABLE `parking_lots` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`total_spaces` int(11) NOT NULL,
`available_spaces` int(11) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `vehicles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`plate_number` varchar(20) NOT NULL,
`vehicle_type` enum('car','motorcycle') NOT NULL,
`entry_time` datetime NOT NULL,
`exit_time` datetime DEFAULT NULL,
`parking_lot_id` int(11) NOT NULL,
`fee` decimal(10,2) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `plate_number` (`plate_number`,`exit_time`)
);
车辆进入处理
创建entry.php处理车辆进入:
<?php
$conn = new mysqli('localhost', 'username', 'password', 'parking_system');
$plateNumber = $_POST['plate_number'];
$vehicleType = $_POST['vehicle_type'];
$parkingLotId = $_POST['parking_lot_id'];
// 检查车位可用性
$lotQuery = "SELECT available_spaces FROM parking_lots WHERE id = $parkingLotId";
$lotResult = $conn->query($lotQuery);
$lotData = $lotResult->fetch_assoc();
if ($lotData['available_spaces'] > 0) {
$insertQuery = "INSERT INTO vehicles (plate_number, vehicle_type, entry_time, parking_lot_id)
VALUES ('$plateNumber', '$vehicleType', NOW(), $parkingLotId)";
if ($conn->query($insertQuery)) {
$updateQuery = "UPDATE parking_lots SET available_spaces = available_spaces - 1 WHERE id = $parkingLotId";
$conn->query($updateQuery);
echo "车辆进入成功记录";
} else {
echo "记录失败: " . $conn->error;
}
} else {
echo "车位已满";
}
$conn->close();
?>
车辆离开处理
创建exit.php处理车辆离开和计费:
<?php
$conn = new mysqli('localhost', 'username', 'password', 'parking_system');
$plateNumber = $_POST['plate_number'];
$parkingLotId = $_POST['parking_lot_id'];
// 获取进入时间
$query = "SELECT id, entry_time FROM vehicles
WHERE plate_number = '$plateNumber' AND exit_time IS NULL LIMIT 1";
$result = $conn->query($query);
if ($result->num_rows > 0) {
$vehicle = $result->fetch_assoc();
$entryTime = new DateTime($vehicle['entry_time']);
$exitTime = new DateTime();
$duration = $exitTime->diff($entryTime);
$hours = $duration->h + ($duration->days * 24);
// 简单计费规则:每小时5元
$fee = $hours * 5;
$updateQuery = "UPDATE vehicles SET exit_time = NOW(), fee = $fee
WHERE id = {$vehicle['id']}";
if ($conn->query($updateQuery)) {
$updateLotQuery = "UPDATE parking_lots SET available_spaces = available_spaces + 1
WHERE id = $parkingLotId";
$conn->query($updateLotQuery);
echo "停车费: $fee 元, 停车时间: $hours 小时";
} else {
echo "更新失败: " . $conn->error;
}
} else {
echo "未找到该车辆记录";
}
$conn->close();
?>
车位管理界面
创建dashboard.php显示车位状态:
<?php
$conn = new mysqli('localhost', 'username', 'password', 'parking_system');
$query = "SELECT * FROM parking_lots";
$result = $conn->query($query);
while ($row = $result->fetch_assoc()) {
echo "<div class='parking-lot'>";
echo "<h3>{$row['name']}</h3>";
echo "<p>总车位: {$row['total_spaces']}</p>";
echo "<p>可用车位: {$row['available_spaces']}</p>";
echo "</div>";
}
$conn->close();
?>
安全增强措施
在实际部署时应考虑以下安全措施:
- 使用预处理语句防止SQL注入
- 对用户输入进行验证和过滤
- 实现用户认证和授权
- 添加HTTPS加密传输
- 定期备份数据库
这个基础实现可以扩展添加更多功能如:

- 会员系统与折扣
- 预约停车位
- 多层级计费规则
- 数据分析报表
- 移动端适配界面
系统可根据实际需求调整数据库结构和业务逻辑。对于大型停车场,可能需要考虑分布式架构和性能优化。






