php实现用户个人主页
创建数据库表结构
设计一个用户表存储基本信息,例如users表包含id, username, email, password_hash, avatar, bio等字段。使用MySQL创建表:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
avatar VARCHAR(255) DEFAULT 'default.jpg',
bio TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
用户认证与会话管理
实现登录功能确保用户访问个人主页时已认证。使用PHP的session_start()管理用户状态:
session_start();
if (!isset($_SESSION['user_id'])) {
header('Location: login.php');
exit;
}
获取用户数据
从数据库查询当前用户信息并显示在个人主页:
$userId = $_SESSION['user_id'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$userId]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
构建个人主页模板
创建HTML模板展示用户信息,例如profile.php:
<div class="profile-header">
<img src="/avatars/<?= htmlspecialchars($user['avatar']) ?>" alt="Profile Image">
<h1><?= htmlspecialchars($user['username']) ?></h1>
</div>
<div class="profile-bio">
<p><?= nl2br(htmlspecialchars($user['bio'])) ?></p>
</div>
处理表单更新
允许用户编辑个人资料,创建表单和处理逻辑:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$bio = $_POST['bio'];
$stmt = $pdo->prepare("UPDATE users SET bio = ? WHERE id = ?");
$stmt->execute([$bio, $userId]);
header('Location: profile.php');
exit;
}
文件上传处理
实现头像上传功能,确保安全处理文件:
if (isset($_FILES['avatar'])) {
$allowed = ['jpg', 'jpeg', 'png'];
$ext = pathinfo($_FILES['avatar']['name'], PATHINFO_EXTENSION);
if (in_array(strtolower($ext), $allowed)) {
$newName = uniqid() . '.' . $ext;
move_uploaded_file($_FILES['avatar']['tmp_name'], "avatars/$newName");
$stmt = $pdo->prepare("UPDATE users SET avatar = ? WHERE id = ?");
$stmt->execute([$newName, $userId]);
}
}
安全防护措施
对所有用户输入使用htmlspecialchars()防止XSS攻击,预处理SQL语句防止注入:
$username = htmlspecialchars($_POST['username'], ENT_QUOTES, 'UTF-8');
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
路由与访问控制
确保用户只能访问自己的个人主页,通过验证会话ID与请求ID匹配:
if ($_GET['id'] != $_SESSION['user_id']) {
header('HTTP/1.0 403 Forbidden');
exit;
}






