如何实现数据库用户姓名列表展示并跳转至个人详情页?
完善用户列表展示页面(带详情链接)
我来帮你把这个页面的功能补全,实现展示用户姓氏+名字,并且名字可点击跳转到详情页的需求。先给你完整的修正代码,再拆解关键细节:
<!doctype html> <html> <head> <meta charset="UTF-8"> <title>用户列表</title> <style> table { border-collapse: collapse; width: 60%; margin: 20px auto; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; } a { color: #007bff; text-decoration: none; } a:hover { text-decoration: underline; } </style> </head> <body> <h1 style="text-align: center;">用户列表</h1> <?php include 'db.php'; // 确保这个文件正确建立了数据库连接$conn // 优化查询:只获取需要的字段(避免SELECT *的冗余) $query = 'SELECT id, last_name, first_name FROM subjects'; $result = $conn->query($query); if (!$result) { // 处理查询失败的情况 echo "<p style='text-align: center; color: red;'>查询用户数据失败:" . $conn->error . "</p>"; exit; } ?> <?php if ($result->num_rows > 0): ?> <table> <thead> <tr> <th>姓氏</th> <th>名字</th> </tr> </thead> <tbody> <?php while ($row = $result->fetch_assoc()): ?> <tr> <!-- 转义输出防止XSS攻击 --> <td><?php echo htmlspecialchars($row['last_name']); ?></td> <td> <!-- 名字作为链接,传递用户ID到详情页 --> <a href="user_details.php?id=<?php echo htmlspecialchars($row['id']); ?>"> <?php echo htmlspecialchars($row['first_name']); ?> </a> </td> </tr> <?php endwhile; ?> </tbody> </table> <?php else: ?> <p style="text-align: center;">暂无用户数据</p> <?php endif; ?> <?php // 释放结果集和关闭连接 $result->free(); $conn->close(); ?> </body> </html>
关键细节说明:
- 优化数据库查询:我把
SELECT *改成了SELECT id, last_name, first_name,只获取需要的字段,减少数据传输量,提升性能。 - 详情页链接构建:通过
user_details.php?id=用户ID的形式传递参数,你的详情页(比如user_details.php)可以通过$_GET['id']获取用户ID,然后查询该用户的全部信息展示。 - XSS安全防护:所有输出的用户数据都用
htmlspecialchars()转义,避免恶意脚本注入,这是Web开发的基础安全规范。 - 规范HTML结构:用
<thead>和<tbody>区分表头和表格内容,添加了基础的CSS样式让页面更美观。 - 异常处理:增加了查询失败的提示,以及没有用户数据时的友好提示,提升用户体验。
另外,你的user_details.php可以参考这样的逻辑(简单示例):
<!doctype html> <html> <head> <meta charset="UTF-8"> <title>用户详情</title> </head> <body> <?php include 'db.php'; if (!isset($_GET['id']) || !is_numeric($_GET['id'])) { echo "<p>无效的用户ID</p>"; exit; } $userId = intval($_GET['id']); // 用预处理语句防止SQL注入 $stmt = $conn->prepare('SELECT * FROM subjects WHERE id = ?'); $stmt->bind_param('i', $userId); $stmt->execute(); $result = $stmt->get_result(); if ($user = $result->fetch_assoc()) { echo "<h1>" . htmlspecialchars($user['first_name'] . ' ' . $user['last_name']) . " 的详情</h1>"; echo "<p>邮箱:" . htmlspecialchars($user['email']) . "</p>"; // 输出其他用户字段... } else { echo "<p>未找到该用户</p>"; } $stmt->close(); $conn->close(); ?> </body> </html>
注意:在user_details.php中使用了预处理语句,这是防止SQL注入的关键,一定要避免直接把$_GET['id']拼接到SQL语句里。
内容的提问来源于stack exchange,提问作者FoxXH0und
相关产品推荐
相关产品推荐

