PHP原生实现:根据URL参数查询SQL数据填充动态模板页
纯原生PHP实现编辑页模板方案
不需要任何第三方组件,全程使用原生PHP语法即可实现,做最简化的逻辑、视图分离,代码可直接复用。
第一步:安全获取并校验URL参数
在editradio.php文件最顶部处理参数逻辑,先做合法性校验,避免非法参数引发报错或注入风险:
<?php // 初始化变量 $radioId = isset($_GET['radioID']) ? intval($_GET['radioID']) : 0; $error = ''; $radioInfo = []; // 参数非法直接标记错误 if ($radioId <= 0) { $error = '无效的设备ID'; }
第二步:连接数据库查询目标数据
参数校验通过后,使用PHP原生自带的PDO做参数化查询,彻底避免SQL注入问题,不要使用老旧的mysql_*系列函数:
// 无错误时才执行数据库查询 if (empty($error)) { // 替换为你自己的数据库连接配置 $dbHost = 'localhost'; $dbName = '你的库存数据库名'; $dbUser = '你的数据库账号'; $dbPass = '你的数据库密码'; try { $pdo = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8mb4", $dbUser, $dbPass); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 预处理查询,绝对不要直接把变量拼接进SQL语句 $stmt = $pdo->prepare("SELECT * FROM 你的库存表名 WHERE lid = ?"); $stmt->execute([$radioId]); $radioInfo = $stmt->fetch(PDO::FETCH_ASSOC); if (!$radioInfo) { $error = '未找到对应设备的信息'; } } catch (PDOException $e) { $error = '数据库查询失败:' . $e->getMessage(); } } ?>
第三步:编写原生模板填充内容
所有逻辑代码放在文件顶部,下方直接编写HTML结构,需要填充变量的位置用PHP短输出标签<?= ?>直接输出即可,原生PHP本身就可以作为模板使用,不需要额外引擎:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>编辑对讲机信息</title> <style> .form-item { margin: 12px 0; } label { display: inline-block; width: 120px; } .error { color: #c00; padding: 10px; border: 1px solid #fcc; background: #fff2f2; } </style> </head> <body> <h1>编辑设备信息</h1> <?php if (!empty($error)): ?> <div class="error"><?= htmlspecialchars($error) ?></div> <p><a href="javascript:history.back()">返回列表页</a></p> <?php else: ?> <form action="saveradio.php" method="post"> <!-- 隐藏域传递设备ID,供后续保存逻辑使用 --> <input type="hidden" name="lid" value="<?= htmlspecialchars($radioInfo['lid']) ?>"> <div class="form-item"> <label>设备ID:</label> <input type="text" value="<?= htmlspecialchars($radioInfo['lid']) ?>" disabled> </div> <div class="form-item"> <label>设备类型:</label> <input type="text" name="radio_typ" value="<?= htmlspecialchars($radioInfo['radio_typ'] ?? '') ?>"> </div> <div class="form-item"> <label>使用人:</label> <input type="text" name="user" value="<?= htmlspecialchars($radioInfo['user'] ?? '') ?>"> </div> <div class="form-item"> <label>警号:</label> <input type="text" name="badge" value="<?= htmlspecialchars($radioInfo['badge'] ?? '') ?>"> </div> <div class="form-item"> <label>所属单位:</label> <input type="text" name="entity" value="<?= htmlspecialchars($radioInfo['entity'] ?? '') ?>"> </div> <div class="form-item"> <label>部门:</label> <input type="text" name="department" value="<?= htmlspecialchars($radioInfo['department'] ?? '') ?>"> </div> <div class="form-item"> <label>设备序列号:</label> <input type="text" name="radio_serial" value="<?= htmlspecialchars($radioInfo['radio_serial'] ?? '') ?>"> </div> <div class="form-item"> <label>配发日期:</label> <input type="date" name="setup_date" value="<?= htmlspecialchars($radioInfo['setup_date'] ?? '') ?>"> </div> <div class="form-item"> <label>登记人:</label> <input type="text" name="author" value="<?= htmlspecialchars($radioInfo['author'] ?? '') ?>"> </div> <div class="form-item"> <button type="submit">保存修改</button> <a href="list.php" style="margin-left: 15px;">返回列表</a> </div> </form> <?php endif; ?> </body> </html>
关键注意点
- 所有从URL参数、数据库取出后输出到HTML的内容,必须用
htmlspecialchars()做转义,避免XSS安全风险 - 所有数据库查询必须使用参数化预处理语句,禁止直接把变量拼接到SQL字符串中,防止SQL注入
- 逻辑代码统一放在文件最顶部,和HTML视图部分自然分离,不需要额外引入模板语法,这是PHP原生开发最经典的轻量模板实现方式
- 你现有列表页生成的跳转链接不需要做任何修改,点击后会自动传入ID、查询数据并填充到表单中
内容的提问来源于stack exchange,提问作者SirRoadwolf
相关产品推荐
相关产品推荐

