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



















