PHP如何通过URL的bid参数读取MySQL数据生成对应图书详情页
实现步骤
整体采用单文件路由逻辑,同一个index.php根据是否携带bid参数分别渲染列表页/详情页,不需要额外新增页面,也不需要JS参与。
1. 修改列表页书名跳转逻辑
你之前渲染图书列表表格时,原来的书名列是纯文本输出,修改为带GET参数的跳转链接即可,示例代码:
<!-- 原有表格图书列修改前 --> <td><?php echo $book['b_title']; ?></td> <!-- 修改后 --> <td> <a href="index.php?bid=<?php echo (int)$book['b_id']; ?>"> <?php echo htmlspecialchars($book['b_title']); ?> </a> </td>
注:这里用
(int)强制转换图书ID为数字,避免参数异常问题,htmlspecialchars用于转义书名特殊字符防止页面渲染异常。
2. 新增详情页逻辑判断与渲染
在index.php的最顶部添加参数判断逻辑,检测到存在合法的bid参数时,优先走详情查询与渲染逻辑:
2.1 参数校验与数据查询
<?php // 数据库连接逻辑保持你之前的写法即可 $conn = mysqli_connect('你的数据库地址', '账号', '密码', 's-lib'); // 检测是否存在有效bid参数 if (isset($_GET['bid']) && is_numeric($_GET['bid'])) { $bid = (int)$_GET['bid']; // 用预处理查询防止SQL注入 $stmt = mysqli_prepare($conn, "SELECT b_id, b_title, b_author, b_year, b_dl, b_descr, b_cover FROM 你的图书表名 WHERE b_id = ?"); mysqli_stmt_bind_param($stmt, "i", $bid); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $bookDetail = mysqli_fetch_assoc($result); // 没有查询到对应图书时跳转回列表页 if (!$bookDetail) { header('Location: index.php'); exit; } // ------------ 以下是详情页渲染代码 ------------ ?> <!DOCTYPE html> <html> <head> <title><?php echo htmlspecialchars($bookDetail['b_title']); ?> - 图书详情</title> </head> <body> <div class="book-detail"> <!-- 封面展示 --> <img src="<?php echo htmlspecialchars($bookDetail['b_cover']); ?>" alt="<?php echo htmlspecialchars($bookDetail['b_title']); ?> 封面"> <h1><?php echo htmlspecialchars($bookDetail['b_title']); ?></h1> <p>作者:<?php echo htmlspecialchars($bookDetail['b_author']); ?></p> <p>出版年份:<?php echo htmlspecialchars($bookDetail['b_year']); ?></p> <p><a href="<?php echo htmlspecialchars($bookDetail['b_dl']); ?>" target="_blank">点击下载图书</a></p> <div class="description"> <h3>图书描述</h3> <p><?php echo htmlspecialchars($bookDetail['b_descr']); ?></p> </div> <p><a href="index.php">返回图书列表</a></p> </div> </body> </html> <?php // 详情页渲染完成后直接退出,不执行后面的列表页代码 exit; } // ------------ 以下是你原有的图书列表页代码 ------------ // 你之前查询所有图书、渲染列表表格的代码保持不变即可 ?>
2.2 注意事项
- 代码里的
你的图书表名替换为你实际使用的图书表表名 - 所有输出字段都用
htmlspecialchars转义,避免XSS安全问题 - 必须使用预处理查询,不要直接把bid拼接到SQL语句里,避免SQL注入风险
内容的提问来源于stack exchange,提问作者Moonstone
相关产品推荐
相关产品推荐

