PHP语言实现网站登录功能

使用PHP链接MySQL数据库进行登录验证。

创建数据表

首先,在数据库中创建登录功能所需要用到的数据表。该表应该包含用户名、密码、登录次数、最近一次登录时间、最近一次登录IP等字段。创建代码如下:

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `user_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '用户名',
  `user_password` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '用户密码',
  `login_times` int(11) UNSIGNED ZEROFILL DEFAULT 00000000000 COMMENT '登录次数',
  `last_time` datetime(0) DEFAULT NULL COMMENT '最近一次登录时间',
  `login_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '最近一次登录IP',
  PRIMARY KEY (`user_name`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

编写静态页面

然后,先写一个静态页面,效果如下图所示。
在这里插入图片描述
实现上述页面效果的代码:

<!Doctype html>
<html class="x-admin-sm">
<head>
    <meta charset="UTF-8">
    <title>XXXX管理系统</title>
    <meta name="renderer" content="webkit|ie-comp|ie-stand">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport"
          content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
    <meta http-equiv="Cache-Control" content="no-siteapp"/>
    <link rel="stylesheet" href="./css/font.css">
    <link rel="stylesheet" href="./css/login.css">
    <link rel="stylesheet" href="./css/xadmin.css">
    <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    <script src="./lib/layui/layui.js" charset="utf-8"></script>
    <!--[if lt IE 9]>
    <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
    <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>
<body class="login-bg">

<div class="login layui-anim layui-anim-up">
    <div class="message">XXXX管理系统<sup>Beta</sup></div>
    <div id="darkbannerwrap"></div>

    <form method="post" class="layui-form" action="login.php">
        <input name="username" placeholder="用户名" type="text" lay-verify="required" class="layui-input"
               value="<? echo $username; ?>">
        <hr class="hr15">
        <input name="password" lay-verify="required" placeholder="密码" type="password" class="layui-input">
        <hr class="hr15">
        <p style="color: red"><? echo $errmsg; ?></p>
        <input value="登录" lay-submit lay-filter="login" style="width:100%;" type="submit">
        <hr class="hr20">
    </form>
</div>
<!-- 底部结束 -->
</body>
</html>

编写业务逻辑代码

接下来,使用php语言编写登录功能,需要将用户输入的用户名和密码与数表中的数据进行匹配,判断是否是合法用户。
实现上述功能的代码如下;

<?php
error_reporting(0);
$username = $_POST['username'];
// 取得客户端提交的密码并用md5()函数时行加密转换以便后面的验证
$password = md5($_POST['password']);
// 设置一个错误消息变量,以便判断是否有错误发生
// 以及在客户端显示错误消息。 其初值为空
$errmsg = '';
if (!empty($username)) { // 用户填写了数据才执行数据库操作
    // 数据验证, empty()函数判断变量内容是否为空
    if (empty($username)) {
        $errmsg = '数据输入不完整';
    }
    if (empty($errmsg)) { // $errmsg为空说明前面的验证通过
        // 调用mysqli的构造函数建立连接,同时选择使用数据库'test'
        $db = @new mysqli("localhost", "admin", "password", "database");
        // 检查数据库连接
        if (mysqli_connect_errno()) {
            $errmsg = "数据库连接失败!\n";
        } else {
            // 查询数据库,看用户名及密码是否正确
            $sql = "SELECT * FROM user WHERE user_name='$username' AND user_password='$password'";
            $rs = $db->query($sql);
            // $rs->num_rows判断上面的执行结果是否含有记录,有记录说明登录成功
            if ($rs && $rs->num_rows > 0) {
                // 使用session保存当前用户
                session_start();
                $_SESSION['uid'] = $username;
                $errmsg = "登录成功!";
                // 更新用户登录信息
                $ip = $_SERVER['REMOTE_ADDR']; // 获取客户端的IP
                $sql = "UPDATE user SET login_times = login_times + 1,";
                $sql .= "last_time=now(), login_ip='$ip' ";
                $sql .= " WHERE user_name='$username'";
                $db->query($sql);
                //重定向浏览器
                header("Location: index.php");
//确保重定向后,后续代码不会被执行
                exit;
            } else {
                $errmsg = "用户名或密码不正确,登录失败!";
            }
            // 关闭数据库连接
            $db->close();
        }
    }
}
?>

写在最后

大部分在代码中都有注释,特别需要注意的有以下几点:

  1. 代码 error_reporting(0); 的功能是关闭notice级别的报错提示;
  2. 代码 $password = md5($_POST['password']); 用来接收用户输入的密码并进行md5加密转换;
  3. 代码 $db = @new mysqli("localhost", "admin", "password", "database");localhost 为数据库服务器地址,别忘记加端口号;
  4. 为了方便在密码错误的情况下重复登录时不需要再次输入用户名,可在用户名的 input 中写入属性 value="<? echo $username; ?>"

作者:戴翔
电子邮箱:[email protected]
微信开发者主页:Null
简介:中国公民,CSDN博客专家,秦淮区疾控中心托管社会公益组织指南针工作室志愿者,创业公司研发中心负责人,在校大学生。第二届大学生微信小程序应用开发大赛全国三等奖项目第一作者,微信小程序《约车吗》、《庆云慈善会》、《锋云速检》项目总工程师。


发布了105 篇原创文章 · 获赞 206 · 访问量 62万+

猜你喜欢

转载自blog.csdn.net/yuanxiang01/article/details/104231355