PHP原生MySQLi实现简易登录:代码与流程解析

听雨眠
听雨眠
发布时间:2026-10-13 | 4人浏览过
原创

本文将详细解析如何使用PHP原生mysqli类库结合HTML/CSS构建一个简单的用户登录系统。内容涵盖数据库表结构搭建、前端表单设计、后端身份验证逻辑以及Session/Cookie的状态保持,同时针对原示例中的安全风险提供修正方案。

结果预览与准备条件

最终实现的登录页面将包含用户名与密码输入框,并在验证通过后展示成功界面或跳转至个人中心。若输入为空或凭证错误,则弹出相应的提示信息。

以下是项目运行前的必备环境条件:

  1. 服务器环境:已安装支持PHP且开启了mysqli扩展的Web服务器(如Apache/Nginx + PHP)。
  2. 数据库配置:本地或远程MySQL服务正常运行,需提前创建好存储用户信息的数据库与数据表。
  3. 文件结构:确保HTML页面、CSS样式表与PHP处理脚本在服务器正确路径下,且路径引用无误。

第1步:搭建数据库基础

在进行代码开发前,必须确保数据库中存有符合预期的测试数据。通常登录模块需要一张存储账号与密钥的表。

假设我们使用名为 mybs 的数据库,表名为 users,其中至少应包含以下字段:

  • username:用户唯一标识。
  • userpassword:用于比对的用户凭证(注:实际生产环境中建议使用哈希值而非明文)。

请执行SQL插入测试数据,确保有可用账号用于后续的流程验证。

第2步:编写前端登录页面

前端主要负责展示交互界面并将用户输入的凭据通过HTTP Post请求发送至后端。以下为一个基础的结构示例:

<form action="login.php" method="post">
    <!-- 此处为输入框与按钮结构 -->
    <input name="fusername" type="text" placeholder="请输入用户名">
    <input name="fuserpassword" type="text" placeholder="请输入密码">
    <button type="submit">登陆</button>
</form>

关键参数说明:action属性指向处理验证的PHP脚本,method="post"确保数据不暴露在URL中,name属性决定后端获取数据的键名。

第3步:实施后端PHP验证逻辑

接收表单数据后,login.php需完成三项核心任务:建立连接、校验数据、管理会话状态。

3.1 连接数据库

使用new mysqli()实例化连接对象,传入主机、用户名、密码及库名。务必检查连接是否成功:

$servername = "localhost";
$username = "root";
$password = "your_password";
$dbname = "mybs";

$conn = new mysqli($servername, $username, $password, $dbname);

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

3.2 获取并验证输入

优先检查输入是否为空,避免无效查询。isset()结合三元运算符可优雅地处理未发送的变量:

$fusername = isset($_POST['fusername']) ? $_POST['fusername'] : "";
$fuserpassword = isset($_POST['fuserpassword']) ? $_POST['fuserpassword'] : "";

3.3 安全比对与状态维持

在确认数据不为空后,执行查询。请注意,原始教程中存在SQL注入风险,此处仅作逻辑对照。

if (!empty($fusername) && !empty($fuserpassword)) {
    // 推荐做法:使用预处理语句$stmt = $conn->prepare(...)替代直接拼接
    $sql = "SELECT username FROM users WHERE username = '$fusername' AND userpassword = '$fuserpassword'";
    $result = $conn->query($sql);
    
    if ($row = $conn->fetch_assoc($result)) {
        // 设置Cookie维持登录状态
        setcookie("fusername", $fusername, time() + (86400 * 30), "/");
        echo "登录成功!";
    } else {
        echo "<script>alert('用户名或密码错误');location.href='index.html';</script>";
    }
} else {
    echo "<script>alert('信息不能为空');location.href='index.html';</script>";
}

当上述逻辑返回成功提示时,即代表验证通过:

常见排错指南

在开发过程中,可能会遇到以下典型问题:

  1. 数据库连接拒绝访问:检查mysqli_connect_errno()返回值,确认MySQL服务是否启动及权限配置是否正确。
  2. 输入为空报错:前端未携带name属性或JS拦截了默认提交行为,导致后端$_POST数组无对应键值。
  3. Cookie失效:确保在输出任何HTML之前调用setcookie(),或者刷新页面后重新加载即可生效。

关于空值拦截时的前端交互反馈如下:

而密码错误的警告提示则为:

简要总结

本教程通过原生PHP展示了从连接数据库到实现基础登录功能的完整过程。掌握了Form传参、mysqli操作及Cookie应用这三点后,即可在此基础上扩展更复杂的RBAC权限控制。以上就是PHP连接数据库实现简单登录页面功能的详细内容,更多关于PHP数据库登录页面的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表