当前位置:首页 > PHP

php实现用户个人主页

2026-04-03 14:14:09PHP

PHP 实现用户个人主页

数据库设计与连接

创建用户表 users 包含基础字段:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    password VARCHAR(255) NOT NULL,
    bio TEXT,
    avatar VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

建立数据库连接文件 config.php

<?php
$host = 'localhost';
$dbname = 'user_db';
$username = 'root';
$password = '';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("Connection failed: " . $e->getMessage());
}
?>

用户登录验证

创建登录验证逻辑 auth.php

session_start();
require 'config.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $email = $_POST['email'];
    $password = $_POST['password'];

    $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
    $stmt->execute([$email]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        header("Location: profile.php");
    }
}

个人主页显示

创建个人主页文件 profile.php

<?php
session_start();
require 'config.php';

if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
}

$userId = $_SESSION['user_id'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$userId]);
$user = $stmt->fetch();
?>

<!DOCTYPE html>
<html>
<head>
    <title><?= htmlspecialchars($user['username']) ?>'s Profile</title>
</head>
<body>
    <div class="profile-header">
        <img src="<?= htmlspecialchars($user['avatar']) ?>" alt="Profile Picture">
        <h1><?= htmlspecialchars($user['username']) ?></h1>
    </div>

    <div class="profile-bio">
        <p><?= nl2br(htmlspecialchars($user['bio'])) ?></p>
    </div>
</body>
</html>

用户数据更新

创建资料更新页面 edit_profile.php

<?php
session_start();
require 'config.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $bio = $_POST['bio'];
    $userId = $_SESSION['user_id'];

    $stmt = $pdo->prepare("UPDATE users SET bio = ? WHERE id = ?");
    $stmt->execute([$bio, $userId]);
    header("Location: profile.php");
}
?>

文件上传处理

实现头像上传功能:

if (isset($_FILES['avatar'])) {
    $targetDir = "uploads/";
    $targetFile = $targetDir . basename($_FILES["avatar"]["name"]);
    $imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));

    $check = getimagesize($_FILES["avatar"]["tmp_name"]);
    if ($check !== false) {
        move_uploaded_file($_FILES["avatar"]["tmp_name"], $targetFile);

        $stmt = $pdo->prepare("UPDATE users SET avatar = ? WHERE id = ?");
        $stmt->execute([$targetFile, $_SESSION['user_id']]);
    }
}

安全增强措施

添加输入验证和CSRF防护:

function sanitizeInput($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

// CSRF Token Generation
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

完整功能整合

将所有组件整合到MVC结构中:

project/
├── config/
│   └── database.php
├── controllers/
│   ├── AuthController.php
│   └── ProfileController.php
├── models/
│   └── User.php
├── views/
│   ├── auth/
│   │   ├── login.php
│   │   └── register.php
│   └── profile/
│       ├── show.php
│       └── edit.php
└── public/
    ├── css/
    └── uploads/

性能优化建议

启用PHP缓存和数据库索引:

ALTER TABLE users ADD INDEX idx_email (email);

在PHP配置中启用OPcache:

php实现用户个人主页

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

分享给朋友:

相关文章

vue实现删除用户

vue实现删除用户

Vue 实现删除用户功能 在 Vue 中实现删除用户功能通常涉及前端界面交互和后端 API 调用。以下是常见的实现方式: 前端部分 创建删除按钮并绑定点击事件: <button @clic…

vue用户功能实现

vue用户功能实现

Vue 用户功能实现方案 用户登录与认证 使用 Vue Router 和 Vuex 实现用户登录状态管理。前端发送登录请求到后端 API,获取 token 后存储在 localStorage 或 Vu…

vue实现用户删除

vue实现用户删除

Vue 实现用户删除功能 在 Vue 中实现用户删除功能通常涉及前端界面交互和后端 API 调用。以下是常见的实现方式: 删除按钮组件 <template> <button @…

react页面如何获取用户id

react页面如何获取用户id

获取用户ID的方法 在React应用中获取用户ID通常涉及前端与后端的交互,以下是几种常见实现方式: 通过登录认证获取 用户登录后,后端通常会返回包含用户ID的令牌(如JWT)或会话信息。前端可将这…

css怎么制作个人主页

css怎么制作个人主页

制作个人主页的CSS方法 布局设计 使用Flexbox或Grid布局实现响应式设计。Flexbox适合一维布局,Grid适合二维复杂布局。通过display: flex或display: grid定义…

php实现用户个人主页

php实现用户个人主页

实现用户个人主页的基本步骤 创建数据库表存储用户信息,通常包括用户ID、用户名、邮箱、密码哈希、头像URL等字段。使用MySQL示例: CREATE TABLE users ( id INT…