查看: 981|回复: 12

[原创] sqlite+js+php+html实现简单的登录

[复制链接]

4

技术

17

魅力

6

原创

版主

禁止发言

Rank: 7Rank: 7Rank: 7

积分
5385
人气
208
分享
36

最佳新人活跃会员

发表于 2023-1-17 01:48:50 | 显示全部楼层 |阅读模式
本帖最后由 YFSafe 于 2023-1-17 01:50 编辑

体验地址:

项目逻辑
html作为前端显示
js实现在html中,作用是将输入的信息加密并发送到php
php使用现成的sqlite3接口对数据库进行读取,判断内容是否与获取到的传入密码一致
sqlite存储着用户的名称,id,密码等


实现过程
html+js
html的实现部分很简单,只需要添加一个背景和一个悬浮框,在悬浮框中添加两个输入框即可
背景部分:
[HTML] 纯文本查看 复制代码
<div id="background" style="position: fixed; top: 0px; left: 0px; width: 100%; height: 100%; z-index: -1;">
            <img class="img" src="Default2.jpg"
            style="position: absolute; left: 0px; top: 0px; width: 100%; height: 100%;">

悬浮框:
[HTML] 纯文本查看 复制代码
<div style="width:300px;height:350px;background-color:White;border-radius:30px;margin:140px auto;text-align: center">

js部分,我们需要引入一个md5.js用于对将输入的密码进行md5计算,毕竟安全最重要.调用也很简单:var value = md5(你要计算的内容);
如何获取输入的内容呢?我们在这里使用document.getElementById.value来读取.那么获取id为name的输入框中的内容就可以这么写:
[JavaScript] 纯文本查看 复制代码
var tag=document.getElementById('name');
var name=tag.value;

请求部分,我们使用XMLHttpRequests.本来想使用ajax,但是想了一下没必要.
会使用到的函数有XMLHttpRequests.open,XMLHttpRequests.send.
我们要请求的url可以这样构造:var url = "./handle.php?name=" + name.value + "&password=" + hash;(这里的hash是pwd经过md5计算后的结果)
如果请求的状态码为200,那我们就需要修改页面中的status,我们是这么定义这个status的:
[HTML] 纯文本查看 复制代码
<a>Status:</a>
            <lable type='text' id='login_status'></lable>

lable标签的id是login_status,那我们修改标签就可以这么写:
[JavaScript] 纯文本查看 复制代码
var tag = document.getElementById('login_status');
tag.innerText = req.responseText;

代码中的innerText是文本内容的意思,req.responseText则是返回的内容.
到这里,我们的html+js部分的内容基本结束.
php
php部分的逻辑比较简单.
获取网页传入的参数:
[PHP] 纯文本查看 复制代码
$name = $_GET['name'];
$password = $_GET['password'];

接下来就要构造我们的sql查询语句,使用接口对数据库进行查询,获取用户对应的密码(也是md5加密的)
查询+判断部分代码如下:
[PHP] 纯文本查看 复制代码
$sql = "SELECT `password` FROM `users` WHERE name = '$name' limit 1";
$db = new SQLite3('./user.db');
$password1 = $db->querySingle($sql);
if($password1 == $password)
{
    echo "Login Success";
}
else 
{
    echo "Login Failed";
}

sqlite
由于我们使用的环境是ubuntu,所以我们使用apt install sqlite来安装sqlite
安装好后,终端键入sqlite3进入sqlite环境,使用sqlite3 你想要的数据库名称.db来创建一个数据库
接下来的内容就比较简单,就是创建表再塞入数据
创建数据表:
[Bash shell] 纯文本查看 复制代码
CREATE TABLE users( ID INT PRIMARY KEY     NOT NULL, NAME           TEXT    NOT NULL, PASSWORD        CHAR(50));

塞入数据:
[Bash shell] 纯文本查看 复制代码
INSERT INTO users VALUES(1,'admin','e3d0e74a1aef6605dee86648d69e6b5b');

测试
输入错误的密码,登录失败

输入正确的密码,登录成功


源代码
html+js
[HTML] 纯文本查看 复制代码
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <script src="md5.js"></script>
        <script>
            function post()
            {
                var name = document.getElementById('name');
                var passwd = document.getElementById('password').value;
                var hash = md5(passwd);
                var req = new XMLHttpRequest();
                var url = "./handle.php?name=" + name.value + "&password=" + hash;
                req.open('GET',url,false);
                req.send(null);
                if(req.status=200)
                {
                    var tag = document.getElementById('login_status');
                    tag.innerText = req.responseText;
                }
            }
        </script>
    </head>
    <body>
        <div id="bing-container" style="position: fixed; top: 0px; left: 0px; width: 100%; height: 100%; z-index: -1;">
            <img class="bing-img" src="Default2.jpg"
            style="position: absolute; left: 0px; top: 0px; width: 100%; height: 100%;">
        </div>
        <script src='https://api.vvhan.com/api/snow'></script>
        <div style="width:300px;height:350px;background-color:White;border-radius:30px;margin:140px auto;text-align: center">
            <h2>登录</h2>
            <br>
            <a >name</a>
            <input style="margin:0 auto" type="text" id="name" >
            <br>
            <a style="margin:0 auto">password</a>
            <input type='password' id="password">
            <br>
            <br>
            <button>Click To Login</button>
            <!--<a>or</a>-->
            <!--<button>Click To Register</button>-->
            <br>
            <br>
            <a>Status:</a>
            <lable type='text' id='login_status'></lable>
        </div>
    </body>
</html>

php
[PHP] 纯文本查看 复制代码
<?php
header("Content-type: text/html; charset=utf-8");
$name = $_GET['name'];
$password = $_GET['password'];
$sql = "SELECT `password` FROM `users` WHERE name = '$name' limit 1";
$db = new SQLite3('./user.db');
$password1 = $db->querySingle($sql);
if($password1 == $password)
{
    echo "Login Success";
}
else 
{
    echo "Login Failed";
}
?>

md5.js
Default2.jpg

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

参与人数 1经验 +30 人气 +5 分享 +3 收起 理由
JimmyzZZ + 30 + 5 + 3

查看全部评分

YF工作室驻x64论坛分部
工作室曾开发的软件:YFSafe安全软件,YFChat在线聊天软件,MBRTools等。
欢迎有能力的你加入我们一起共同进步。请发邮件至yfstudio2021@outlook.com

0

技术

0

魅力

0

原创

略有小成

Rank: 4

积分
1004
人气
3
分享
0
发表于 2023-1-17 07:46:27 | 显示全部楼层
本帖最后由 zgrhlsmyms 于 2023-1-17 07:51 编辑

斯,这个是不是不能在本地HTML+js实现,看这代码里还得调用api
个人主页:https://blog.zgrhlsmyms.repl.co

0

技术

0

魅力

0

原创

略有小成

Rank: 4

积分
1004
人气
3
分享
0
发表于 2023-1-17 07:51:48 | 显示全部楼层
本帖最后由 zgrhlsmyms 于 2023-1-17 07:54 编辑

问题就是,登录界面普通HTML5即可实现,但是密码什么的存储不上
个人主页:https://blog.zgrhlsmyms.repl.co

0

技术

7

魅力

0

原创

版主

Rank: 7Rank: 7Rank: 7

积分
5133
人气
137
分享
5
发表于 2023-1-17 08:10:55 | 显示全部楼层
zgrhlsmyms 发表于 2023-1-17 07:51
问题就是,登录界面普通HTML5即可实现,但是密码什么的存储不上

你SQLITE没有建表吧
Manners maketh man

0

技术

7

魅力

0

原创

版主

Rank: 7Rank: 7Rank: 7

积分
5133
人气
137
分享
5
发表于 2023-1-17 08:14:42 | 显示全部楼层
php是世界上最好的编程语言,楼主一定要发扬光大
Manners maketh man

0

技术

0

魅力

0

原创

略有小成

Rank: 4

积分
1004
人气
3
分享
0
发表于 2023-1-17 08:22:39 | 显示全部楼层
xiaomeng 发表于 2023-1-17 08:10
你SQLITE没有建表吧

喃是windows,不是ubuntu捏
个人主页:https://blog.zgrhlsmyms.repl.co

0

技术

7

魅力

0

原创

版主

Rank: 7Rank: 7Rank: 7

积分
5133
人气
137
分享
5
发表于 2023-1-17 08:34:19 | 显示全部楼层
zgrhlsmyms 发表于 2023-1-17 08:22
喃是windows,不是ubuntu捏

这跟系统有关系吗
Manners maketh man

0

技术

0

魅力

0

原创

略有小成

Rank: 4

积分
1004
人气
3
分享
0
发表于 2023-1-17 09:00:19 | 显示全部楼层
xiaomeng 发表于 2023-1-17 08:34
这跟系统有关系吗

。。。。。。。。。似乎好像木有
个人主页:https://blog.zgrhlsmyms.repl.co

0

技术

7

魅力

0

原创

版主

Rank: 7Rank: 7Rank: 7

积分
5133
人气
137
分享
5
发表于 2023-1-17 09:12:45 | 显示全部楼层
zgrhlsmyms 发表于 2023-1-17 09:00
。。。。。。。。。似乎好像木有

那你六楼的回复有意义吗
Manners maketh man

0

技术

0

魅力

0

原创

略有小成

Rank: 4

积分
1004
人气
3
分享
0
发表于 2023-1-17 09:41:27 | 显示全部楼层
xiaomeng 发表于 2023-1-17 09:12
那你六楼的回复有意义吗

木有
个人主页:https://blog.zgrhlsmyms.repl.co
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表