php实现登录修改密码
PHP 实现登录修改密码功能
数据库准备
创建用户表 users,包含字段 id, username, password, email 等。密码字段建议使用哈希存储(如 password_hash)。
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL
);
登录功能实现
创建登录表单 login.php,包含用户名和密码输入框。

<form action="authenticate.php" method="post">
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<button type="submit">Login</button>
</form>
验证用户凭据 authenticate.php,使用 password_verify 检查密码。

session_start();
$username = $_POST['username'];
$password = $_POST['password'];
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
header("Location: dashboard.php");
} else {
echo "Invalid credentials";
}
修改密码功能
创建密码修改表单 change_password.php,包含旧密码、新密码和确认新密码输入框。
<form action="update_password.php" method="post">
<input type="password" name="old_password" placeholder="Old Password" required>
<input type="password" name="new_password" placeholder="New Password" required>
<input type="password" name="confirm_password" placeholder="Confirm New Password" required>
<button type="submit">Change Password</button>
</form>
处理密码更新 update_password.php,验证旧密码并更新为新密码。
session_start();
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit;
}
$old_password = $_POST['old_password'];
$new_password = $_POST['new_password'];
$confirm_password = $_POST['confirm_password'];
if ($new_password !== $confirm_password) {
die("New passwords do not match");
}
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $pdo->prepare("SELECT password FROM users WHERE id = ?");
$stmt->execute([$_SESSION['user_id']]);
$user = $stmt->fetch();
if ($user && password_verify($old_password, $user['password'])) {
$hashed_password = password_hash($new_password, PASSWORD_DEFAULT);
$update_stmt = $pdo->prepare("UPDATE users SET password = ? WHERE id = ?");
$update_stmt->execute([$hashed_password, $_SESSION['user_id']]);
echo "Password updated successfully";
} else {
echo "Old password is incorrect";
}
安全注意事项
- 使用 HTTPS 确保数据传输安全。
- 对用户输入进行过滤和验证,防止 SQL 注入。
- 使用
password_hash和password_verify处理密码。 - 设置会话超时和 CSRF 保护。






