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

PHP页面无法查看数据库内容,求助按ID获取数据的解决方案

问题排查与修正方案

我来帮你梳理下代码里的几个关键问题,这些问题导致你无法正确获取并展示数据库中的数据:

1. 未正确获取目标ID

你的代码里$usid被初始化为0,但没有从请求中获取实际需要查询的ID(比如URL参数?id=xxx或者表单提交的ID),所以查询的是id=0的记录,大概率不存在。

2. SQL查询的逻辑错误

  • 执行SELECT语句时,$conn->query($sql)返回的是结果集对象,不是布尔值TRUE,所以你的判断条件if ($conn->query($sql) === TRUE)永远不会成立,后续的取数据逻辑根本不会执行。
  • 直接拼接SQL语句存在SQL注入风险,非常不安全,应该使用预处理语句。

3. 未定义$result变量

你在while ($row = $result->fetch_array())里使用了$result,但之前没有把query的结果赋值给它,会导致报错。

4. 数据传递错误

即使你获取到了$docname,在跳转Editeform.php前没有把这个值传递过去(比如用SESSION或者URL参数),所以目标页面的$users['docname']根本没有来源,自然显示为空。


修正后的代码(查询页面)

<?php
// 开启会话,用来传递数据到跳转页面
session_start();

// 数据库连接
$servername = "localhost";
$userdbname = "root";
$dbpassword = "";
$dbname = "users";

// 获取要查询的ID(假设从URL参数?id=xxx获取)
$usid = isset($_GET['id']) ? (int)$_GET['id'] : 0;

// 验证ID有效性
if ($usid <= 0) {
    die("无效的用户ID");
}

$conn = new mysqli($servername, $userdbname, $dbpassword, $dbname);
// 检查连接
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 使用预处理语句,避免SQL注入
$sql = "SELECT * FROM users WHERE id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i", $usid); // "i"表示整数类型
$stmt->execute();
$result = $stmt->get_result();

// 判断是否查询到数据
if ($result->num_rows > 0) {
    // 因为ID是唯一的,所以不需要循环,直接取一条
    $user = $result->fetch_assoc();
    // 把用户数据存入会话,方便跳转后获取
    $_SESSION['user'] = $user;
} else {
    $_SESSION['error'] = "未找到该用户";
}

// 关闭连接和语句
$stmt->close();
$conn->close();

// 跳转到编辑页面
header("Location: Editeform.php");
exit; // 跳转后一定要exit,避免后续代码执行
?>

修正后的编辑页面(Editeform.php)表单部分

<?php
session_start();
// 从会话中获取用户数据
$user = isset($_SESSION['user']) ? $_SESSION['user'] : [];
// 清理会话数据,避免重复使用
unset($_SESSION['user']);
?>

<div class="form-group">
    <input type="text" class="form-input" name="docname" id="name" placeholder="Your Name" 
           value="<?php echo isset($user['docname']) ? htmlspecialchars($user['docname']) : ''; ?>" />
</div>

额外说明

  • 使用htmlspecialchars()是为了防止XSS攻击,把用户输入的特殊字符转义,确保页面安全。
  • 如果你是通过表单POST方式传递ID,把$_GET['id']改成$_POST['id']即可,但要确保表单的method是POST。
  • 记得在所有使用SESSION的页面开头调用session_start(),否则无法访问会话数据。

内容的提问来源于stack exchange,提问作者Somar kn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:46:51