You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 04:02:22