php实现报修
PHP实现报修系统的方法
数据库设计 创建报修表(repair_orders)包含字段:id(主键)、user_id(用户ID)、title(标题)、content(报修内容)、status(状态)、create_time(创建时间)、update_time(更新时间)
CREATE TABLE `repair_orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`content` text NOT NULL,
`status` tinyint(1) DEFAULT 0 COMMENT '0-待处理 1-处理中 2-已完成',
`create_time` datetime NOT NULL,
`update_time` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
提交报修表单 创建HTML表单页面(repair_form.php)包含标题、内容等输入项
<form action="submit_repair.php" method="post">
<input type="text" name="title" placeholder="报修标题" required>
<textarea name="content" placeholder="详细描述问题" required></textarea>
<button type="submit">提交报修</button>
</form>
处理报修提交 创建处理脚本(submit_repair.php)接收表单数据并存入数据库
<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=repair_system', 'username', 'password');
// 获取表单数据
$title = $_POST['title'];
$content = $_POST['content'];
$user_id = $_SESSION['user_id']; // 从会话获取用户ID
$create_time = date('Y-m-d H:i:s');
// 插入数据库
$stmt = $db->prepare("INSERT INTO repair_orders (user_id, title, content, status, create_time, update_time)
VALUES (?, ?, ?, 0, ?, ?)");
$stmt->execute([$user_id, $title, $content, $create_time, $create_time]);
// 返回结果
header('Location: repair_list.php');
?>
报修列表展示 创建列表页面(repair_list.php)显示所有报修记录
<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=repair_system', 'username', 'password');
// 查询数据
$stmt = $db->query("SELECT * FROM repair_orders ORDER BY create_time DESC");
$repairs = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<table>
<tr>
<th>标题</th>
<th>内容</th>
<th>状态</th>
<th>创建时间</th>
</tr>
<?php foreach ($repairs as $repair): ?>
<tr>
<td><?= htmlspecialchars($repair['title']) ?></td>
<td><?= htmlspecialchars($repair['content']) ?></td>
<td><?= $repair['status'] == 0 ? '待处理' : ($repair['status'] == 1 ? '处理中' : '已完成') ?></td>
<td><?= $repair['create_time'] ?></td>
</tr>
<?php endforeach; ?>
</table>
状态更新功能 创建管理员界面(admin_repair.php)允许修改报修状态
<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=repair_system', 'username', 'password');
// 处理状态更新
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$id = $_POST['id'];
$status = $_POST['status'];
$update_time = date('Y-m-d H:i:s');
$stmt = $db->prepare("UPDATE repair_orders SET status = ?, update_time = ? WHERE id = ?");
$stmt->execute([$status, $update_time, $id]);
}
// 查询数据
$stmt = $db->query("SELECT * FROM repair_orders ORDER BY create_time DESC");
$repairs = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<?php foreach ($repairs as $repair): ?>
<form method="post">
<input type="hidden" name="id" value="<?= $repair['id'] ?>">
<select name="status">
<option value="0" <?= $repair['status'] == 0 ? 'selected' : '' ?>>待处理</option>
<option value="1" <?= $repair['status'] == 1 ? 'selected' : '' ?>>处理中</option>
<option value="2" <?= $repair['status'] == 2 ? 'selected' : '' ?>>已完成</option>
</select>
<button type="submit">更新状态</button>
</form>
<?php endforeach; ?>
安全注意事项
输入验证 对所有用户输入进行过滤和验证,防止SQL注入和XSS攻击
$title = filter_input(INPUT_POST, 'title', FILTER_SANITIZE_STRING);
$content = filter_input(INPUT_POST, 'content', FILTER_SANITIZE_STRING);
用户认证 确保只有登录用户才能提交报修,管理员才能修改状态
session_start();
if (!isset($_SESSION['user_id'])) {
header('Location: login.php');
exit;
}
错误处理 添加适当的错误处理机制,记录错误日志

try {
$db = new PDO('mysql:host=localhost;dbname=repair_system', 'username', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
error_log('数据库连接失败: ' . $e->getMessage());
die('系统繁忙,请稍后再试');
}






