PHP点击用户名无法显示所有者详情问题求助
问题修复指南
一、核心错误点排查
1. 首页链接参数格式错误
原代码中所有者姓名的链接误用了id:而非标准的id=,这会导致$_GET['id']无法正确接收参数:
// 错误写法 echo "<td>". "" ."<a href=OwnerDetails.php?id:" .$row['id']. ">". $row['Owner']. "</a></td>"; // 正确写法 echo "<td><a href='OwnerDetails.php?id=" . $row['id'] . "'>" . $row['Owner'] . "</a></td>";
2. 数据库连接变量不统一
首页使用mysqli的$conn变量,详情页却用了PDO的$dbo变量,若connection.php未正确初始化$dbo,会直接导致查询失败。需统一连接方式:要么全用mysqli,要么全用PDO。
3. 详情页未处理查询无结果的情况
即使execute()返回成功,若ID对应的所有者不存在,fetch()会返回false,直接访问$row->name会引发错误(因错误显示被关闭,所以无报错提示):
// 原代码未判断fetch结果 $row = $count->fetch(PDO::FETCH_OBJ); // 修复后增加判断 $row = $count->fetch(PDO::FETCH_OBJ); if (!$row) { echo "未找到该所有者信息"; exit; }
4. 详情页字段名与数据库不匹配
原首页SQL中owners表的字段为id、name、email,但详情页使用了class、mark等不存在的字段,导致输出空值。需替换为数据库实际存在的字段:
// 错误字段写法 <tr><td><b>Class</b></td><td>$row->class</td></tr> <tr><td><b>Mark</b></td><td>$row->mark</td></tr> // 替换为实际字段示例 <tr><td><b>邮箱</b></td><td>$row->email</td></tr> <tr><td><b>地址</b></td><td>$row->address</td></tr>
5. 首页HTML输出语法错误
原代码中table标签的输出存在语法错误,导致表格结构异常:
// 错误写法 echo "<table '<td align='center'> // 正确写法 echo "<table align='center'>";
二、修复后完整代码示例
首页修复后核心代码片段
// 正确输出表格头部 echo "<table align='center'> <tr> <th>Owner</th> <th>Email</th> <th>Dog</th> <th>Breed</th> <th>Average Score</th> </tr>"; // 修复链接参数 while($row = mysqli_fetch_assoc($result)) { echo "<tr>"; echo "<td><a href='OwnerDetails.php?id=" . $row['id'] . "'>" . $row['Owner'] . "</a></td>"; echo "<td><a href='mailto:" . $row['Email'] . "'>" . $row['Email'] . "</a></td>"; echo "<td>" . $row["Name"] . "</td>"; echo "<td>" . $row["breed_name"] . "</td>"; echo "<td>" . $row["avg_score"] . "</td>"; echo "</tr>"; } echo "</table>";
详情页修复后核心代码片段(统一使用mysqli)
<?php include './connection.php'; // 先检查参数合法性 if (!isset($_GET['id']) || !is_numeric($_GET['id'])) { echo "无效的请求参数"; exit; } $id = (int)$_GET['id']; // 使用mysqli执行查询 $result = $conn->query("SELECT * FROM owners WHERE id = $id"); if (!$result) { echo "查询失败: " . $conn->error; exit; } $row = $result->fetch_assoc(); if (!$row) { echo "未找到该所有者信息"; exit; } ?> <table> <tr bgcolor='#f1f1f1'><td><b>姓名</b></td><td><?php echo $row['name']; ?></td></tr> <tr><td><b>邮箱</b></td><td><?php echo $row['email']; ?></td></tr> <tr bgcolor='#f1f1f1'><td><b>地址</b></td><td><?php echo $row['address']; ?></td></tr> <!-- 其他字段根据实际数据库结构添加 --> </table>
三、额外优化建议
- 开启错误显示:在代码开头添加
error_reporting(E_ALL); ini_set('display_errors', 1);,方便排查隐藏错误; - 使用预处理语句防止SQL注入:即使是mysqli也建议用
prepare()绑定参数,避免安全风险; - 统一数据库连接方式:选择mysqli或PDO其中一种,避免混合使用导致混乱;
- 规范HTML输出:使用引号包裹属性值,保持代码结构清晰。
内容的提问来源于stack exchange,提问作者Ich Bin's
相关产品推荐
相关产品推荐

