如何实现登录后Web端仅展示当前用户的专属数据?
问题解决:登录后仅显示当前用户数据
核心问题分析
当前登录后表格展示所有用户数据,而非仅当前登录用户数据,主要排查方向集中在Session用户ID有效性、数据库字段映射、SQL查询逻辑三个方面,以下是具体修复步骤:
1. 验证Session中用户ID的正确性
首先确认登录环节是否将当前用户的idUser正确存入Session。当前代码使用$_SESSION['usuario'][0]作为查询条件,需验证该值是否为有效用户ID:
- 在
datos.php开头添加调试代码:session_start(); var_dump($_SESSION['usuario'][0]); // 输出Session存储的用户ID exit; - 若输出为空或非目标用户ID,需修正登录逻辑,确保用户ID被正确存入Session,示例:
// 登录成功后存储用户ID的示例代码 $_SESSION['usuario'][0] = $loggedUser['idUser']; // 替换为实际获取用户ID的逻辑
2. 修正数据库字段与代码的映射错误
你的MySQL表字段为first name、last name、phone number、address,但PHP代码中使用的是西班牙语命名的键名(nombre、apellidos等),需统一字段映射:
- 修改SQL查询语句,用字段别名匹配代码中的键:
注:MySQL中含空格的字段名需用反引号$sentencia = "SELECT idUser, `first name` as nombre, `last name` as apellidos, `phone number` as telefono, address as direccion FROM users_data WHERE idUser = :idUser";`包裹。
3. 加强PDO查询的错误捕获
添加异常捕获,快速定位查询过程中的错误:
try { $conexion = DB::conn(); $sentencia = "SELECT idUser, `first name` as nombre, `last name` as apellidos, `phone number` as telefono, address as direccion FROM users_data WHERE idUser = :idUser"; $consulta = $conexion->prepare($sentencia); $consulta->execute(array(':idUser' => $_SESSION['usuario'][0])); // 数据处理逻辑... } catch(PDOException $e) { echo json_encode(['error' => $e->getMessage()]); exit; }
4. 修复后的完整datos.php代码
<?php session_start(); // 必须放在代码最顶部,确保Session正常启动 include('./DB.php'); try { // 校验Session有效性 if(!isset($_SESSION['usuario'][0]) || empty($_SESSION['usuario'][0])) { echo json_encode(['error' => '未登录或用户ID无效']); exit; } $conexion = DB::conn(); $sentencia = "SELECT idUser, `first name` as nombre, `last name` as apellidos, `phone number` as telefono, address as direccion FROM users_data WHERE idUser = :idUser"; $consulta = $conexion->prepare($sentencia); $consulta->execute(array(':idUser' => $_SESSION['usuario'][0])); $json = []; while ($row = $consulta->fetch(PDO::FETCH_ASSOC)) { $json[] = [ 'idUser' => $row['idUser'], 'nombre' => $row['nombre'], 'apellidos' => $row['apellidos'], 'telefono' => $row['telefono'], 'direccion' => $row['direccion'] ]; } echo json_encode($json); } catch(PDOException $e) { echo json_encode(['error' => $e->getMessage()]); } ?>
前端调试辅助
在AJAX回调中添加日志,查看返回数据是否正确:
$.ajax({ type: "GET", url: "datos.php", success: (response) => { let datos = JSON.parse(response); console.log(datos); // 查看返回的用户数据 let template = ""; datos.forEach((dato) => { template += ` <tr> <td>${dato.idUser}</td> <td>${dato.nombre}</td> <td>${dato.apellidos}</td> <td>${dato.telefono}</td> <td>${dato.direccion}</td> </tr> `; }); $('#datos').html(template); }, error: (xhr) => { console.log(xhr.responseText); // 查看请求错误信息 } });
内容的提问来源于stack exchange,提问作者Miguel
相关产品推荐
相关产品推荐

