
本文详解如何将 php 动态生成的课程卡片中按钮对应的数据库 id,以 get 方式从 `theory.php` 安全传递至 `theory1.php`,并正确接收与使用该值进行后续查询。
在构建多页课程展示系统时,常需将某张课程卡片(如
✅ 正确实现方式(推荐)
首先,在 theory.php 中修正链接生成逻辑,确保 courseID 参数被正确嵌入 URL:
@@##@@
' . htmlspecialchars($rowQuery['courseName']) . '
' . htmlspecialchars($rowQuery['courseTextOne']) . '
Proceed
? 关键改进说明: 放弃基于 $i 的循环索引,直接使用数据库返回的 courseID 字段值,避免因主键不连续或删除记录导致的 ID 错配; 使用 (int) 强制类型转换,从根本上防止非数字输入; 对输出到 HTML 的内容(如图片链接、课程名)调用 htmlspecialchars(),防止 XSS 攻击; 移除冗余的 $_SESSION['course_ID'] = $i(若仅用于跳转,session 非必需,且此处赋值逻辑与循环不匹配)。
其次,在 theory1.php 中安全获取并验证参数:
立即学习“PHP免费学习笔记(深入)”;
prepare("SELECT * FROM `courses` WHERE courseID = ?");
$stmt->bind_param("i", $courseID);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows === 0) {
die('Course not found.');
}
$course = $result->fetch_assoc();
// 3. 渲染课程详情(示例)
echo "" . htmlspecialchars($course['courseName']) . "
";
echo "" . htmlspecialchars($course['courseTextOne']) . "
";
// ... 其他字段
?>⚠️ 注意事项与最佳实践
- 永远不要信任用户输入:即使参数来自自己生成的链接,也必须在接收端校验(isset, is_numeric, 类型强制转换)和过滤(htmlspecialchars 输出时);
- 避免 SQL 注入:务必使用 MySQLi 预处理语句(如上)或 PDO,禁用字符串拼接查询;
- 区分 courseID 与索引 $i:数据库主键可能不从 0 开始或存在空缺,直接用 $i 作 ID 极易出错;
-
考虑使用 POST + 表单替代 GET?
若需传递敏感信息或大量数据,可用 - 增强用户体验:可在 theory1.php 中添加返回链接 ← Back to Courses。
通过以上结构化实现,你不仅能稳定传递课程 ID,更能构建起安全、可维护、符合 Web 开发规范的 PHP 页面间通信机制。











