php实现登录修改密码
实现登录和修改密码功能
在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注入。
敏感操作前必须验证用户会话,确保用户已登录。
建议为密码设置复杂度要求,如最小长度、包含特殊字符等。

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






