如何将PHP生成按钮的ID值从theory.php传递到theory1.php?
解决PHP按钮ID跨页传递问题
现有代码的问题
- 循环内重复执行SQL查询,效率极低,而且
$i作为courseID并不一定匹配数据库中实际的课程ID(比如数据库中ID可能不是连续从0开始) - 链接中的
$i被包裹在单引号里,PHP不会解析这个变量,点击按钮后传递的是字符串$i而非实际ID - 循环中不断覆盖
$_SESSION['course_ID'],最终SESSION里只会保留最后一个课程的ID,完全没必要用SESSION传递
修正后的代码(theory.php)
require('components/db.php'); // 一次查询所有课程数据,避免循环内重复查询 $query = "SELECT * FROM `courses`"; $result = mysqli_query($connect, $query) or die("Error:" . mysqli_error($connect)); // 直接遍历查询结果,无需先获取行数再循环 while ($rowQuery = mysqli_fetch_assoc($result)) { // 获取数据库中真实的courseID $courseId = $rowQuery['courseID']; echo ' <div class="card"> <img class="cardImage" src="' . $rowQuery['imageLink'] . '" alt="Course"> <h3>' . $rowQuery['courseName'] . '</h3> <p>' . $rowQuery['courseTextOne'] . '</p> <a href="theory1.php?course_ID=' . $courseId . '" class="button">Proceed</a> </div>'; }
在theory1.php中接收并使用ID
require('components/db.php'); // 检查是否接收到course_ID参数 if (isset($_GET['course_ID'])) { // 对参数做安全处理,防止SQL注入 $courseId = mysqli_real_escape_string($connect, $_GET['course_ID']); // 使用预处理语句更安全 $stmt = mysqli_prepare($connect, "SELECT * FROM `courses` WHERE courseID = ?"); mysqli_stmt_bind_param($stmt, "i", $courseId); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $courseData = mysqli_fetch_assoc($result); // 这里可以使用$courseData中的数据 if ($courseData) { echo "课程名称:" . $courseData['courseName']; // 其他业务逻辑... } else { echo "未找到对应课程"; } } else { echo "未传入课程ID"; }
关键说明
- 直接使用数据库中真实的
courseID而非循环变量$i,确保传递的ID准确对应课程 - 链接拼接时用字符串连接(
.)或者将变量放在双引号字符串中,确保PHP解析变量 - 接收参数时必须做安全处理,避免SQL注入,推荐使用预处理语句
内容的提问来源于stack exchange,提问作者Maltoon Yezi
相关产品推荐
相关产品推荐

