PHP登录后从phpMyAdmin数据库获取显示用户信息故障求助
问题:登录后无法从数据库获取并展示用户信息
我尝试在用户登录后,从phpMyAdmin数据库中获取对应的firstName、lastName、email和username信息并显示到HTML页面,但始终无法正常展示这些信息,恳请协助解决。
我曾尝试在SAA_Login_Connect.php中创建Session来获取所需字段并在HTML页面显示,但出现登录错误。
相关代码
SAA_Register_Connect.php
<?php $firstName = $_POST['firstname']; $lastName = $_POST['lastname']; $email = $_POST['email']; $username = $_POST['username']; $password = $_POST['password']; // Database connection $conn = new mysqli('localhost','root','','test'); if($conn->connect_error){ echo "$conn->connect_error"; die("Connection Failed : ". $conn->connect_error); } else { $stmt = $conn->prepare("INSERT INTO register(firstName, lastName, email, username, password) VALUES (?, ?, ?, ?, ?)"); $stmt->bind_param("sssss", $firstName, $lastName, $email, $username, $password); $execval = $stmt->execute(); if ($execval === FALSE) { echo "Error: " . $conn->error; } else { echo "Registration successfully..."; } $stmt->close(); $conn->close(); } ?>
SAA_Login_Connect.php
<?php $username = $_POST['username']; $password = $_POST['password']; // Database connection $conn = new mysqli('localhost', 'root', '', 'test'); if ($conn->connect_error) { die("Connection Failed: " . $conn->connect_error); } // Prepare SQL statement to retrieve user data $stmt = $conn->prepare("SELECT * FROM register WHERE username = ?"); $stmt->bind_param("s", $username); $stmt->execute(); $stmt_result = $stmt->get_result(); if ($stmt_result->num_rows > 0) { $data = $stmt_result->fetch_assoc(); if($data['password'] === $password){ echo json_encode(array("message" => "Login Successfully",)); } else{ echo json_encode(array("error" => "Invalid Email or Password")); } } else { echo json_encode(array("error" => "Invalid Email or Password")); } $stmt->close(); $conn->close(); ?>
解决方案
1. 修复Session初始化问题
Session使用前必须先开启,在SAA_Login_Connect.php最顶部添加:
session_start();
所有需要读取Session的页面(比如用户信息展示页),开头也必须加这行代码。
2. 登录成功后存储用户信息到Session
修改SAA_Login_Connect.php中登录成功的逻辑,把用户数据存入Session:
if($data['password'] === $password){ // 存储用户信息到Session $_SESSION['user'] = [ 'firstName' => $data['firstName'], 'lastName' => $data['lastName'], 'email' => $data['email'], 'username' => $data['username'] ]; echo json_encode(array("message" => "Login Successfully")); }
3. 创建用户信息展示页面
新建user_profile.php,读取Session并展示数据:
<?php session_start(); // 验证用户是否已登录 if(!isset($_SESSION['user'])){ header("Location: login.html"); // 未登录跳转登录页 exit; } $user = $_SESSION['user']; ?> <!DOCTYPE html> <html> <head> <title>用户信息</title> </head> <body> <h2>用户信息</h2> <ul> <li>姓名:<?php echo $user['firstName'] . ' ' . $user['lastName']; ?></li> <li>邮箱:<?php echo $user['email']; ?></li> <li>用户名:<?php echo $user['username']; ?></li> </ul> </body> </html>
4. 修复密码安全问题(必做)
当前代码直接存储明文密码,存在严重安全风险,需修改为哈希存储:
- 注册页
SAA_Register_Connect.php修改密码处理:
// 替换原密码赋值行 $hashedPassword = password_hash($password, PASSWORD_DEFAULT); $stmt->bind_param("sssss", $firstName, $lastName, $email, $username, $hashedPassword);
- 登录页
SAA_Login_Connect.php修改密码验证:
// 替换原密码判断行 if(password_verify($password, $data['password'])){ // 存储Session逻辑... }
5. 前端登录跳转处理
如果前端用AJAX发送登录请求,成功后跳转到信息页:
// 示例jQuery代码 $.post('SAA_Login_Connect.php', {username: $('#username').val(), password: $('#password').val()}, function(res){ let response = JSON.parse(res); if(response.message){ window.location.href = 'user_profile.php'; } else { alert(response.error); } });
内容的提问来源于stack exchange,提问作者Vincent Goods
相关产品推荐
相关产品推荐

