当前位置:首页 > PHP

php实现修改密码

2026-02-16 11:52:04PHP

PHP 实现修改密码功能

修改密码功能通常涉及用户身份验证、旧密码验证、新密码设置及数据库更新。以下是实现步骤:

数据库准备

确保用户表包含密码字段(如 password),通常存储加密后的密码。示例表结构:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(255) NOT NULL
);

密码修改表单

创建 HTML 表单让用户输入旧密码和新密码:

<form action="change_password.php" method="post">
    <input type="password" name="old_password" placeholder="旧密码" required>
    <input type="password" name="new_password" placeholder="新密码" required>
    <input type="password" name="confirm_password" placeholder="确认新密码" required>
    <button type="submit">修改密码</button>
</form>

处理修改逻辑

change_password.php 中处理密码修改请求:

<?php
session_start();
require 'db_connection.php'; // 数据库连接文件

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $old_password = $_POST['old_password'];
    $new_password = $_POST['new_password'];
    $confirm_password = $_POST['confirm_password'];

    // 验证新密码是否一致
    if ($new_password !== $confirm_password) {
        die("新密码与确认密码不匹配");
    }

    // 获取当前用户信息(假设用户ID存储在session中)
    $user_id = $_SESSION['user_id'];
    $stmt = $pdo->prepare("SELECT password FROM users WHERE id = ?");
    $stmt->execute([$user_id]);
    $user = $stmt->fetch();

    // 验证旧密码
    if (!password_verify($old_password, $user['password'])) {
        die("旧密码错误");
    }

    // 更新密码
    $hashed_password = password_hash($new_password, PASSWORD_DEFAULT);
    $update_stmt = $pdo->prepare("UPDATE users SET password = ? WHERE id = ?");
    $update_stmt->execute([$hashed_password, $user_id]);

    echo "密码修改成功";
}
?>

安全注意事项

  1. 密码哈希:始终使用 password_hash()password_verify() 处理密码。
  2. 输入验证:检查新密码长度和复杂度(如至少8位,包含字母和数字)。
  3. CSRF防护:添加 CSRF 令牌防止跨站请求伪造。
  4. HTTPS:确保表单通过 HTTPS 提交,避免密码明文传输。

完整示例扩展

如需增强安全性,可在表单中添加 CSRF 令牌:

// 生成令牌并存入session
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

表单中增加隐藏字段:

<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">

处理时验证令牌:

php实现修改密码

if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die("无效的CSRF令牌");
}

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

相关文章

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $nam…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中存…

php 实现md5

php 实现md5

使用 PHP 内置函数实现 MD5 PHP 提供了 md5() 函数,可以直接计算字符串的 MD5 哈希值。该函数接受一个字符串参数,返回 32 字符的十六进制哈希值。 $string = "H…

php实现评论功能

php实现评论功能

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

php 实现长轮询

php 实现长轮询

PHP 实现长轮询的方法 长轮询(Long Polling)是一种服务器推送技术,客户端发送请求后,服务器保持连接开放直到有新数据或超时。以下是实现步骤: 基础实现代码 创建一个简单的长轮询 PHP…