基于WAMP环境的简单用户登录系统实现(v3版)(持续迭代)

news2024/11/13 22:38:17

目录

版本说明

实现环境:

流程逻辑框图:

数据库连接

登录页面:login.html

 登录处理实现:doLogin.php

用户欢迎页面:welcome.php

密码修改页面:change_password.html

修改处理:doChangePassword.php 

 用户注册页面:register.html

注册处理:doRegister.php


版本说明

v3实现功能:

数据库连接(php)

用户登录(*前后端判断输入是否为空(弹窗))

欢迎页面(*欢迎用户)

用户注册(*前后端判断输入是否为空(弹窗))

欢迎页面(*欢迎用户)

用户密码修改

实现环境:

Windows11、Apache、MySQL、PHP8

流程逻辑框图:

数据库连接

基于php的MySQL数据库联动代码模板

外部文件,使用文件包含:include 'session_conn.php';

(以下代码都是)

登录页面:login.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录</title>
    <style type="text/css">
        form{
            position: absolute;
            top: 20%;
            left: 39%;
        }
        /* 控制input:name=login的元素居中 */
        input[ name='login' ]{
            width: 172px;
            display: block;
            margin-left: 28%;
            margin-top: 3%;
        }
        input[ name='register' ]{
            width: 173px;
            display: block;
            margin-left: 28%;
            margin-top: 3%;
        }
    </style>
    <script type="text/javascript" src="./_js/login_web.js"></script>
</head>

<body>
    <form onsubmit="return checkForm(this)" action="./_php/doLogin.php" method="post" >
        <fieldset>
            <legend>
                用户登录-php登录与注册系统测试
            </legend>
            <ul>
                <li>
                    <label> 
                        用户名:
                    </label>
                    <input type="text" name="username" />
                </li>
                <li>
                    <label>密&emsp;码:</label>
                    <input type="password" name="password" />
                </li>
                <label></label>
               onclick="checkForm(form)" /> -->

                <input type="submit" name="login" value="登录" />

               onclick="redirectToPage()" /> -->
                <input type="button" name="register" value="注册" onclick="redirectTopage()" />

            </ul>
        </fieldset>
    </form>
</body>

</html>

login_web.js:

引入利用js阻断登录框空输入的判断:

function checkForm(form) {
    // 表单.文本域名.value
    if (form.username.value == "" || form.username.value == null) {
        alert("用户名不能为空");
        form.username.focus();
        return false;
    }
    else if (form.password.value == "" || form.password.value == null) {
        alert("密码不能为空");
        form.password.focus();
        return false;
    }
    else {
        return true;
    }

}
function redirectTopage() {
    window.location.href = './register.html';
}

登录处理实现:doLogin.php

<?php
include './session_conn.php';
session_start();
// $username = htmlspecialchars($_POST['username']);
$username = $_POST['username'];
$password = md5($_POST['password']);

// $conn = mysqli_connect($host, $db_username, $db_pwd, $db_name);

if (!$conn) {
    // 判断数据库连接状态
    // die(),输出一条信息,然后退出脚本.
    die('连接数据库失败!请检查数据库是否开启' . mysqli_connect_errno());
} else {
    
    if(isset($username) && !empty($username)) {

        if (isset($_POST['password']) && !empty($_POST['password'])) {

            $Logincheck_query = mysqli_query($conn, "select * from login_user where username = '$username' limit 1");

            // 从查询结果中取得一行作为结果集
            // $arr = mysqli_fetch_assoc($Logincheck_query);
            $arr = mysqli_fetch_assoc(mysqli_query($conn, "select * from login_user where username = '$username' limit 1"));

            if ($password == $arr['password']) {

                $_SESSION['username'] = $arr['username'];
                $_SESSION['id'] = $arr['id'];
                echo "<script language = 'javascript'> alert('登录成功!');location = './welcome.php' </script>";
                return true;

            } else {
                echo "<script language = 'javascript'> alert('密码错误');location = '../login.html' </script>";
                return false;
            }
        } else {
            echo "<script language = 'javascript'> alert('请补全登录信息');location = '../login.html' </script>";
            return false;
        }
    } else {
        echo "<script language='javascript'>alert('请完善账户信息!');location='../login.html'</script>";
        return false;
    }
}

用户欢迎页面:welcome.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>welcome</title>
    <style>
        .table{
            text-align: center;
            width: 70%;
            padding: 15px;
            background-color: skyblue;
            border: 5px solid  green;
            border-collapse: collapse;
            margin-left: 17%;
        }

        input[type='button']{
            margin-left: 50%;
        }

        .change_password{
            margin-left: 70%;
        }
    </style>
    <script>
        function redirectToPage(){
            window.location.href = "../htdocs/login.html";
        }

    </script>
</head>
<body>
    <br/><br/><br/><br/><br/><br/><br/><br/>
        <?php
        include "./session_conn.php";   //数据库连接信息引入
        session_start();
        $user_id = $_SESSION['id'];

        if (empty($user_id)) {
            
            echo "<script language='javascript'> alert('请先登录');location='../login.html'</script>";
            exit;
        } else {
       $username = $_SESSION['username'];
    //    $conn = mysqli_connect('$host','$db_username','$db_pwd','$db_name');

       if (!$conn) {
        die('数据库连接失败!请检查数据库是否开启?'. mysqli_connect_error());
        }
        else {
            if (isset($_SESSION['username']) && !empty($_SESSION['username']) ) {
                echo "<h2 class='table'>登录成功,欢迎用户:$username </h2> ";
                echo "<a class = 'change_password' href = '../change_password.html'/>修改密码</a>";
            } else {
                // $_SESSION['username']  =false;
                die("超时,重新登录");
            }
            
        }
        echo "<input type='button' name='back_login' value='返回登录' onclick='redirectToPage()'/>";
        echo "<a href='close_login.php'/>用户注销</a>";
    }
    
        ?>
</body>
</html>

密码修改页面:change_password.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>账户修改</title>
    <style type="text/css">
        .title {
            text-align: center;
        }

        .change_password{
            text-align: center;
        }
    </style>
    <script type="text/javascript" src="./_js/change_password.js"></script> 
</head>

<body>
    <div class="box">
        <div class="title">
            change your password
        </div>
        <!-- <form onsubmit="return check(this)" action="doChangePassword.php" method="post"> -->
            <form  action="./_php/doChangePassword.php" method="post">
            <table class="change_password">
                <tr>
                    <th>
                        当前用户名:
                    </th>
                    <td>
                        <input type="text" name="username" />
                    </td>
                </tr>
                <tr>
                    <th>
                        原密码:
                    </th>
                    <td>
                        <input type="password" name="OldPassword">
                    </td>
                </tr>
                <tr>
                    <th>
                        新密码:
                    </th>
                    <td>
                        <input type="password" name="NewPassword" />
                    </td>
                </tr>
                <tr>
                    <th>
                        确认密码:
                    </th>
                    <td>
                        <input type="password" name="ConfirmNewPassword" />
                    </td>
                </tr>
            </table>
            <input type="submit" name="confirm" value="确认修改"  />
            <input type="button" name="back" value="返回登录" onclick="redirectTopage()">
        </form>
    </div>
</body>

</html>

change_password.js

引入利用js阻断空输入的判断:

function redirectTopage() {
    window.location.href = '../htdocs/login.html';
}
function check() {
    // if (form.OldPassword.value === "" && form.OldPassword.value === null && form.OldPassword.value === undefined) {
    if (form.OldPassword.value == "" && form.OldPassword.value == null) {
        alert("原密码为空");
        form.OldPassword.focus();
        return false;
    } else {
        // if (form.NewPassword.value === "" && form.NewPassword.value === null && form.NewPassword.value === undefined) {
        if (form.NewPassword.value == "" && form.NewPassword.value == null) {
            alert("输入新密码");
            form.NewPassword.focus();
            return false;
        }
        else {
            // if (form.ConfirmNewPassword.value === "" && form.ConfirmeNewPassword.value === null && form.ConfirmNewPassword.value === undefined) {
            if (form.ConfirmNewPassword.value == "" && form.ConfirmeNewPassword.value == null) {
                alert("请确认密码");
                form.ConfirmNewPassword.focus();
                return false;
            } else {
                return true;
            }
        }
    }
}
function   redirectTopage(){
    window.location.href = './login.html';
}

修改处理:doChangePassword.php 

<?php
include("session_conn.php");

$change_password = [];
$change_password["old_password"] = md5($_POST["OldPassword"]);
$change_password["Newpassword"] = md5($_POST["NewPassword"]);
$change_password["confirm_Newpassword"] = md5($_POST["ConfirmNewPassword"]);
$MD5_NewPassword = $change_password["Newpassword"];

if (!$conn) {
    die('数据库连接失败!' . mysqli_connect_errno());
} else {
    if (isset($_POST["OldPassword"]) && (strlen($_POST["OldPassword"]) != 0)) {

        if (isset($_POST["NewPassword"])  && (strlen($_POST["NewPassword"]) != 0)) {

            if (isset($_POST["ConfirmNewPassword"]) && (strlen($_POST["ConfirmNewPassword"]) != 0)) {

                if ($change_password["confirm_Newpassword"] == $change_password["Newpassword"]) {

                    //  $MD5_NewPassword = $change_password["Newpassword"];

                    $username = $_POST['username'];

                    $sql_update = "update login_user set password = '$MD5_NewPassword' where username = '$username' ";

                    if (mysqli_query($conn, $sql_update)) {
                        echo "<script language='javascript'>alert('修改成功,请重新登录!');location='../login.html'</script>";
                        return true;
                    } else {
                        echo "<script language='javascript'>alert('密码修改失败,请重新修改!');location='../change_password.html'</script>";
                        return false;
                    }
                } else {
                    echo "<script language='javascript'>alert('密码确认错误');location='../change_password.html'</script>";
                    return false;
                }
            } else {
                echo "<script language='javascript'>alert('请确认密码!');location = '../change_password.html'</script>";
                return false;
            }
        } else {
            echo "<script language='javascript'>alert('请输入新密码!');location='../change_password.html'</script>";
            return false;
        }
    } else {
        echo "<script language='javascript'>alert('请输入原密码信息!');location='../change_password.html'</script>";
        return false;
    }
}

 用户注册页面:register.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>用户注册</title>
</head>
<style type="text/css">
    .title {
        /* 文本排列到中央 */
        text-align: center;

        /* 行间距 */
        /* line-height: 80%;     */
        margin-top: 6%;
        margin-left: 8%;
    }

    .login {
        display: block;
        position: absolute;
        transform: translate(-50%, -61.8%);

        left: 56%;
        top: 20%;
        width: 450px;
        border: redius 8px;
        ;
        background: rgba(255, 255, 255, 0.9);
    }

    input[type='submit'] {
        width: 173px;
        display: block;
        margin-left: 0%;
        margin-top: 3%;
    }

    input[type='button'] {
        width: 173px;
        display: block;
        margin-left: 0%;
        margin-top: 3%;

    }
</style>
<script type="text/javascript" src="./_js/register_web.js"></script>
<body>
    <div class='box'>
        <div class='title'>new user register</div>
        <form onsubmit="return checkRegister(this)"  action="./_php/doRegister.php"  method="post" >
            <table class="login">
                <tr>
                    <th>
                        用户名:
                    </th>
                    <td>
                        <input type="text" name="username">
                    </td>
                </tr>
                <tr>
                    <th>
                        密码:
                    </th>
                    <td>
                        <input type="password" name="password" >
                    </td>
                </tr>
                <tr>
                    <th>
                        确认密码:
                    </th>
                    <td>
                        <input type="password" name="repassword" >
                    </td>
                </tr>
                <tr>
                    <th>

                    </th>
                    <td>
                        <input type="submit" value="注册完成" />
                    </td>
                    <td>
                        <input type="button" value="返回登陆" onclick=" redirectTopage() " />
                    </td>
                </tr>
            </table>
        </form>
    </div>

</body>

</html>

 register_web.js

注册引导

function checkRegister(form) {
    if (form.username.value == "" || form.username.value == null) {
        alert("!请建立新用户名");
        form.username.focus();
        return false;
    } else {
        if (form.password.value == "" || form.password.value == null) {
            alert("!需要输入注册密码");
            form.password.focus();
            return false;
        } else {
            if (form.repassword.value == "" | form.repassword.value == null) {
                alert("!需要确认密码");
                form.repassword.focus();
                return false;
            } else {
                if (form.password.value == form.repassword.value) {
                    return true;
                } else {
                    alert("!确认密码不一致");
                    form.repassword.focus();
                }
            }
        }

    }

}

function   redirectTopage(){
    window.location.href = './login.html';
}

注册处理:doRegister.php

<?php
include 'session_conn.php';

$data = [];
//  $data['$username'] = htmlspecialchars($_POST['username']);
// $data['$username'] = $_POST['username'];
//  $username = $data['username'];
$username = $_POST['username'];

$data['password'] = md5($_POST['password']);
$data['repassword'] = md5($_POST['repassword']);
$sql_select = "select * from login_user where username = '$username' limit 1;";
$sql_id = "select id from login_user";
$result_select = mysqli_query($conn, $sql_select);


if (mysqli_num_rows($result_select) != 0) {
    echo "<script language='javascript'>alert('该用户已存在,请更换用户名!');location='../register.html'</script>";

    //释放查询结果
    mysqli_free_result($result_select);
} else {
    // 先判断是否存在,再判断是否为空
    if (!empty($data['password']) && !empty($data['repassword'])) {

        if ($data['repassword'] == $data['password']) {
            $password  = $data['repassword'];
            // $result_sql_id = mysqli_query($conn, $sql_id);

            $result_id = mysqli_num_rows(mysqli_query($conn, $sql_id));
            $result_new_id = $result_id + 1;
            $sql_insert = "insert into login_user(id,username,password) values('$result_new_id','$username','$password')";

            if (mysqli_query($conn, $sql_insert)) {
                echo "<script language='javascript'>alert('注册成功请重新登录!');location = '../login.html'</script>";
                mysqli_refresh($conn,MYSQLI_REFRESH_TABLES);
                mysqli_close($conn);
                return true;
            } else {
                echo "<script language='javascript'>alert('注册失败请重新注册!');location='../register.html'</script>";
                return false;
            }
        } else {
            echo "<script language='javascript'>alert('确认密码错误!');location='../register.html'</script>";
            return false;
        }
    } else {
        echo "<script language='javascript'>alert('请完善密码。');location='../register.html'</script>";
        return false;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2038177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python学习-UI界面】PyQt5 小部件1-Label

QLabel 对象可用作显示不可编辑的文本、图像或动态GIF影片的占位符。 它还可以用作其他小部件的助记键。 标签可以显示普通文本、超链接或富文本。 1、普通文本 直接双击输入即可 2、添加超链接 选中对应Label&#xff0c;右键选择多信息文本&#xff0c;添加链接&#xff0c…

全网最详细haproxy配置

Haproxy是法国人Willy Tarreau开发的一款高性能的TCP和HTTP负载均衡器&#xff0c;具有广泛的功能和特性&#xff0c;使其在负载均衡和反向代理领域备受推崇。以下是对Haproxy的详细介绍&#xff1a; 一、基本概述 定义&#xff1a;Haproxy是一个开源的高性能的反向代理或者说…

15个提升学术写作的 ChatGPT 高效技巧

不束手无策地面对空白页面这里有 15 个充满灵感的 ChatGPT 提示&#xff0c;帮助你找到研究灵感、建有力论据、撰写条理清晰的文章&#xff0c;突破创作的障碍&#xff0c;提高学术写作的效率。 学术写作充满挑战。要创作出优秀的文章&#xff0c;必须探索新思维&#xff0c;并…

Python OpenCV 影像处理:边缘检测

►前言 上篇介绍使用OpenCV Python findContours() 函数用于在二值化影像中寻找连通的白色区域&#xff0c;并返回一系列点的集合来表示找到的轮廓。本篇将介绍基于计算影像的梯度&#xff0c;通过在影像中找到梯度值的变化来识别边缘&#xff0c;边缘检测通常用于预处理步骤&…

XXL-JOB分布式定时任务框架快速入门

文章目录 前言定时任务分布式任务调度 1、XXL-JOB介绍1.1 XXL-JOB概述1.2 XXL-JOB特性1.3 整体架构 2、XXL-JOB任务中心环境搭建2.1 XXL-JOB源码下载2.2 IDEA导入xxljob工程2.3 初始化数据库2.4 Docker安装任务管理中心 3、XXL-JOB任务注册测试3.1 引入xxl-job核心依赖3.2 配置…

rust 编译时报错:type annotations needed for Box

如下图所示&#xff1a; 解决方法&#xff1a; 升级time的版本&#xff1a; cargo update -p time

【Python基础】Python入门基础教程(非常详细){附带源码}

引言 Python 是一种广泛使用的高级编程语言&#xff0c;因其简洁的语法和强大的功能库而受到开发者的喜爱。本教程将带你从零开始&#xff0c;逐步掌握 Python 的基础知识&#xff0c;并通过附带的源码和表格来加深理解。 点击免费领取《CSDN大礼包》&#xff1a;Python入门到…

c语言基础知识详解,c语言入门必看

在线书籍&#xff1a;54笨鸟 前言 C 语言是一门抽象的、面向过程的语言&#xff0c;C 语言广泛应用于底层开发&#xff0c;C 语言在计算机体系中占据着不可替代的作用&#xff0c;可以说 C 语言是编程的基础&#xff0c;也就是说&#xff0c;不管你学习任何语言&#xff0c;都…

最详细!教你学习haproxy七层代理

一、工作原理 &#xff08;1&#xff09;包括 监听端口&#xff1a;HAProxy 会在指定的端口上监听客户端的请求。 例如&#xff0c;它可以监听常见的 HTTP 和 HTTPS 端口&#xff0c;等待客户端连接。请求接收&#xff1a;当客户端发起请求时&#xff0c;HAProxy 接收到请求。…

Gin框架接入pyroscope完美替代pprof实现检测内存泄露

传统检测内存泄露可以看一下我这篇文章Gin框架接入Prometheus,grafana辅助pprof检测内存泄露-CSDN博客 pyroscope被Grafana收购,GPT来总结一下pyroscope的强大之处&#x1f436; pyroscope github地址 pyroscope与grafana的安装 docker compose安装&#xff0c;这里我们其实…

GET和POST这两种常用的HTTP请求方法的区别

GET和POST是HTTP协议中最常用的两种请求方法&#xff0c;它们在使用场景、安全性、数据传输等方面有很大的不同。让我从以下几个方面来比较GET和POST&#xff1a; 1.「用途和语义」 「GET」: 主要用于获取资源 应该是幂等的&#xff0c;即多次请求应该返回相同的结果 通常用…

超详细!!!electron-vite-vue开发桌面应用之开启调试工具(二)

云风网 云风笔记 云风知识库 上篇已经初步搭建完项目&#xff0c;这次配置比较重要的一部分&#xff0c;那就是开启调试工具&#xff0c;这是开发项目比较重要且基础的部分 vite.config.ts配置更新 main: {// Shortcut of build.lib.entry.entry: electron/main.ts,onstart(ar…

2003-2023年高铁数据高铁开通时间数据

2003-2023年高铁数据高铁开通时间数据 1、时间&#xff1a;2003-2023年 2、来源&#xff1a;整理自高铁航线数据库&#xff08;Chinese High-speed Rail and Airline Database&#xff0c;CRAD&#xff09; 3、指标&#xff1a;高铁站名称、开通时间、所在省份、所在城市、所…

通过网关将数据上传到两台eqmx服务器上

我们是通过WAN 来读取数据。 线连接以后打开 然后要配置上去服务器 在这里遇到的问题是我自己搭emqx服务器的时候&#xff0c;没有固定ip地址&#xff0c;这个ip地址要通过ipconfig来获取&#xff0c;然后将其设置为静态IP地址&#xff0c;才可以的。让后emqx服务器还要重新启…

美股开户:新手投资者的完整入门教程

炒美股是许多投资者心中的梦想&#xff0c;但对于新手小白来说&#xff0c;如何开户炒美股可能会显得有些复杂和困难。本文将为您提供一份完整的入门教程&#xff0c;详细介绍从选择券商到完成开户的步骤&#xff0c;帮助您顺利进入美股市场。 选择合适的券商 在开户之前&…

【Linux基础】Linux中的开发工具(1)--yum和vim

目录 ✈️前言一&#xff0c;Linux 软件包管理器 yum1. 什么是软件包2. 如何安装软件3. 如何卸载软件 二&#xff0c;Linux编辑器-vim使用1. vim的基本概念1.1 命令/正常/普通模式1.2 插入模式1.3 底行模式 三&#xff0c;vim命令模式命令集1. 移动光标2. 删除字符3. 复制4. 替…

后端调优——分布式锁选型——入门

文章目录 引言正文分布式锁的定义分布式锁的具体应用场景如何实现分布式锁主动轮询型分布式锁实现思路一、MySQL分布式锁二、Redis分布式锁 监听回调型分布式锁Etcd分布式锁Zookeeper分布式锁 锁的对比 总结 引言 最近面试&#xff0c;一直被问到分布式锁&#xff0c;然后仅仅…

基于Martin实现MapboxGL自定义底图

概述 本文分享基于Martin实现MapboxGL底图的自定义。 实现后效果 Martin简介 Martin 是一个瓦片服务器&#xff0c;它能够从 PostGIS 数据库、PMTiles&#xff08;本地或远程&#xff09;以及 [MBTiles] (https://github.com/mapbox/mbtiles-spec) 文件中快速生成并提供矢量瓦…

七人共享拼团:社交电商的裂变新引擎

在当今电商市场中&#xff0c;七人共享拼团模式以其独特的社交属性和裂变机制&#xff0c;正成为一股不可忽视的力量。这一模式巧妙融合了社交电商的互动性与拼购的实惠性&#xff0c;通过平台利润回馈用户的方式&#xff0c;构建了一个既人性化又高效的奖励体系&#xff0c;旨…

QT 添加程序图标

1. 使用免费网站将其他图片格式转化成ico格式 Ico转换器 &#xff1a; https://cn.free-converter.com/ico-converter 2.qmake项目添加程序图标 在.pro文件内添加语句,如下图 RC_ICONS favicon.ico2.1 程序图标文件添加到项目目录内 2.2 通过windeployqt xxx.exe构建生成的…