PHP写用户注册、登录和密码重置功能

目录

连接数据库:

用户注册功能:

用户登录功能:

密码重置功能:


首先,创建一个名为users的数据库表,包含以下字段:

  • id:用户ID,自增主键
  • username:用户名,唯一
  • password:加密后的密码
  • email:邮箱,唯一

接下来,编写PHP代码实现用户注册、登录和密码重置功能:

连接数据库:

php 复制代码
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检测连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
?>

​​​​​​​用户注册功能:

php 复制代码
<?php
if (isset($_POST['register'])) {
    $username = $_POST['username'];
    $password = password_hash($_POST['password'], PASSWORD_DEFAULT); // 对密码进行加密处理
    $email = $_POST['email'];

    $sql = "INSERT INTO users (username, password, email) VALUES ('$username', '$password', '$email')";

    if ($conn->query($sql) === TRUE) {
        echo "注册成功!";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
}
?>

用户登录功能:

php 复制代码
<?php
session_start(); // 开始会话

if (isset($_POST['login'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];

    $sql = "SELECT * FROM users WHERE username='$username'";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        $row = $result->fetch_assoc();
        if (password_verify($password, $row['password'])) { // 验证密码是否正确
            $_SESSION['username'] = $username; // 将用户名存入会话中
            header("Location: welcome.php"); // 跳转到欢迎页面
        } else {
            echo "密码错误!";
        }
    } else {
        echo "用户名不存在!";
    }
}
?>

密码重置功能:

php 复制代码
<?php
if (isset($_POST['reset'])) {
    $email = $_POST['email'];
    $newPassword = password_hash($_POST['newPassword'], PASSWORD_DEFAULT); // 对新密码进行加密处理
    $sql = "UPDATE users SET password='$newPassword' WHERE email='$email'";

    if ($conn->query($sql) === TRUE) {
        echo "密码重置成功!";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
} elseif (isset($_POST['confirm'])) { // 如果用户点击了确认按钮,发送重置邮件并跳转到登录页面(此处省略发送邮件的代码)
    header("Location: login.php"); // 跳转到登录页面
} elseif (isset($_GET['token']) && isset($_GET['email'])) { // 如果用户点击了重置链接,检查令牌是否匹配并允许用户重置密码(此处省略检查令牌的代码)?>
    <body>
        <form action="" method="post">
            <label for="newPassword">新密码:</label> <input type="password" name="newPassword" required><br> <br> <input type="submit" name="reset" value="重置密码"> <input type="submit" name="confirm" value="确认"> <a href="login.php">返回登录</a> <br> <br> <a href="index.php">返回首页</a> </form> <!-- 显示表单 --><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?><?php } ?>
相关推荐
heartbeat..3 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
麦聪聊数据6 小时前
MySQL并发与锁:从“防止超卖”到排查“死锁”
数据库·sql·mysql
AC赳赳老秦6 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
YMatrix 官方技术社区7 小时前
YMatrix 存储引擎解密:MARS3 存储引擎如何超越传统行存、列存实现“时序+分析“场景性能大幅提升?
开发语言·数据库·时序数据库·数据库架构·智慧工厂·存储引擎·ymatrix
辞砚技术录8 小时前
MySQL面试题——索引2nd
数据库·mysql·面试
linweidong8 小时前
C++thread pool(线程池)设计应关注哪些扩展性问题?
java·数据库·c++
欧亚学术9 小时前
突发!刚刚新增17本期刊被剔除!
数据库·论文·sci·期刊·博士·scopus·发表
黑白极客9 小时前
怎么给字符串字段加索引?日志系统 一条更新语句是怎么执行的
java·数据库·sql·mysql·引擎
大厂技术总监下海10 小时前
数据湖加速、实时数仓、统一查询层:Apache Doris 如何成为现代数据架构的“高性能中枢”?
大数据·数据库·算法·apache
LeenixP10 小时前
RK3576-Debian12删除userdata分区
linux·运维·服务器·数据库·debian·开发板