php实现密码修改
PHP 实现密码修改功能
密码修改功能通常包括验证当前密码、输入新密码、确认新密码等步骤。以下是一个完整的实现方法:
数据库连接与准备
确保已建立数据库连接并创建用户表。用户表至少包含 id, username, password 字段,密码建议使用哈希存储:

$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
表单设计
创建密码修改表单,包含当前密码、新密码和确认新密码字段:

<form method="POST" action="change_password.php">
<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">修改密码</button>
</form>
处理逻辑
在 change_password.php 中处理密码修改请求:
session_start();
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit;
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$current_password = $_POST['current_password'];
$new_password = $_POST['new_password'];
$confirm_password = $_POST['confirm_password'];
$user_id = $_SESSION['user_id'];
$stmt = $db->prepare("SELECT password FROM users WHERE id = ?");
$stmt->execute([$user_id]);
$user = $stmt->fetch();
if (!password_verify($current_password, $user['password'])) {
$error = "当前密码不正确";
} elseif ($new_password !== $confirm_password) {
$error = "新密码与确认密码不匹配";
} elseif (strlen($new_password) < 8) {
$error = "密码长度至少为8位";
} else {
$hashed_password = password_hash($new_password, PASSWORD_DEFAULT);
$update_stmt = $db->prepare("UPDATE users SET password = ? WHERE id = ?");
$update_stmt->execute([$hashed_password, $user_id]);
$success = "密码修改成功";
}
}
安全注意事项
- 始终使用
password_hash()和password_verify()处理密码 - 实施 CSRF 防护措施
- 强制新密码满足复杂度要求
- 记录密码修改操作日志
- 考虑添加密码修改频率限制
前端验证
可添加 JavaScript 验证确保密码匹配和复杂度:
document.querySelector('form').addEventListener('submit', function(e) {
if (document.querySelector('[name="new_password"]').value !==
document.querySelector('[name="confirm_password"]').value) {
alert('密码不匹配');
e.preventDefault();
}
});
这个实现涵盖了密码修改的基本功能和安全考虑。根据具体需求可以添加更多功能如密码强度检查、邮件通知等。






