使用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();
}
}
}
?>
写在最后
大部分在代码中都有注释,特别需要注意的有以下几点:
- 代码
error_reporting(0);
的功能是关闭notice级别的报错提示; - 代码
$password = md5($_POST['password']);
用来接收用户输入的密码并进行md5加密转换; - 代码
$db = @new mysqli("localhost", "admin", "password", "database");
中localhost
为数据库服务器地址,别忘记加端口号; - 为了方便在密码错误的情况下重复登录时不需要再次输入用户名,可在用户名的
input
中写入属性value="<? echo $username; ?>"
。
作者:戴翔
电子邮箱:[email protected]
微信开发者主页:Null
简介:中国公民,CSDN博客专家,秦淮区疾控中心托管社会公益组织指南针工作室志愿者,创业公司研发中心负责人,在校大学生。第二届大学生微信小程序应用开发大赛全国三等奖项目第一作者,微信小程序《约车吗》、《庆云慈善会》、《锋云速检》项目总工程师。