当前位置:首页 > PHP

php实现登录修改密码

2026-04-03 11:54:32PHP

实现登录和修改密码功能

在PHP中实现登录和修改密码功能需要结合数据库操作和表单处理。以下是一个完整的实现方案,包括用户登录、验证和密码修改。

数据库设计

创建一个用户表存储用户信息:

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

用户登录实现

<?php
session_start();

// 数据库连接
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['login'])) {
    $username = trim($_POST['username']);
    $password = $_POST['password'];

    // 查询用户
    $stmt = $db->prepare("SELECT * FROM users WHERE username = :username");
    $stmt->bindParam(':username', $username);
    $stmt->execute();
    $user = $stmt->fetch(PDO::FETCH_ASSOC);

    // 验证密码
    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['username'] = $user['username'];
        header('Location: dashboard.php');
        exit;
    } else {
        $error = "用户名或密码错误";
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
    <?php if (isset($error)) echo "<p>$error</p>"; ?>
    <form method="post">
        <input type="text" name="username" placeholder="用户名" required>
        <input type="password" name="password" placeholder="密码" required>
        <button type="submit" name="login">登录</button>
    </form>
</body>
</html>

修改密码实现

<?php
session_start();

// 检查用户是否登录
if (!isset($_SESSION['user_id'])) {
    header('Location: login.php');
    exit;
}

$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['change_password'])) {
    $current_password = $_POST['current_password'];
    $new_password = $_POST['new_password'];
    $confirm_password = $_POST['confirm_password'];

    // 验证新密码是否匹配
    if ($new_password !== $confirm_password) {
        $error = "新密码不匹配";
    } else {
        // 获取当前用户信息
        $stmt = $db->prepare("SELECT password FROM users WHERE id = :id");
        $stmt->bindParam(':id', $_SESSION['user_id']);
        $stmt->execute();
        $user = $stmt->fetch(PDO::FETCH_ASSOC);

        // 验证当前密码
        if (password_verify($current_password, $user['password'])) {
            // 更新密码
            $hashed_password = password_hash($new_password, PASSWORD_DEFAULT);
            $update = $db->prepare("UPDATE users SET password = :password WHERE id = :id");
            $update->bindParam(':password', $hashed_password);
            $update->bindParam(':id', $_SESSION['user_id']);

            if ($update->execute()) {
                $success = "密码修改成功";
            } else {
                $error = "密码修改失败";
            }
        } else {
            $error = "当前密码错误";
        }
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>修改密码</title>
</head>
<body>
    <?php if (isset($error)) echo "<p>$error</p>"; ?>
    <?php if (isset($success)) echo "<p>$success</p>"; ?>

    <form method="post">
        <input type="password" name="current_password" placeholder="当前密码" required>
        <input type="password" name="new_password" placeholder="新密码" required>
        <input type="password" name="confirm_password" placeholder="确认新密码" required>
        <button type="submit" name="change_password">修改密码</button>
    </form>
</body>
</html>

安全注意事项

密码存储必须使用password_hash()函数进行哈希处理,验证时使用password_verify()函数。

所有数据库查询都应使用预处理语句防止SQL注入。

敏感操作前必须验证用户会话,确保用户已登录。

建议为密码设置复杂度要求,如最小长度、包含特殊字符等。

php实现登录修改密码

考虑实现密码重置功能,通过邮箱验证等方式。

标签: 修改密码php
分享给朋友:

相关文章

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php mvc 实现

php mvc 实现

PHP MVC 实现方法 MVC(Model-View-Controller)是一种设计模式,用于分离应用程序的逻辑、数据和界面。以下是实现PHP MVC框架的关键步骤。 目录结构 创建以下目录结构…

php 实现面包屑导航

php 实现面包屑导航

实现面包屑导航的方法 面包屑导航(Breadcrumb Navigation)是一种常见的网站导航方式,用于显示用户当前页面的路径。以下是几种在 PHP 中实现面包屑导航的方法。 基于 URL 路径…

php 实现链表

php 实现链表

PHP 实现链表的方法 链表是一种线性数据结构,由节点组成,每个节点包含数据和指向下一个节点的指针。PHP 中可以通过类和对象来实现链表。 定义链表节点类 创建一个 ListNode 类,用于表示链…

php实现评论功能

php实现评论功能

数据库设计 创建评论表(示例结构): CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id`…