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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:01:34