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
相关产品推荐
相关产品推荐

