iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >【Unity+MySQL】实现注册登录系统(升级版)
  • 372
分享到

【Unity+MySQL】实现注册登录系统(升级版)

unitymysql数据库 2023-10-08 18:10:47 372人浏览 八月长安
摘要

目录 1 UI界面重新设计1.1 注册界面1.2 登录界面1.3 交互实现 2 注册功能完善2.1 判断用户输入的用户名是否与数据库中的重复2.2 将当前时间更新至用户表的当前注册时间列2

目录


接着 上篇文章所谈到的系统缺陷,这篇文章进行升级解决。

1 UI界面重新设计

问题:注册界面与登录界面是同一个界面,导致用户输入用户密码进行注册后,即可点击登录。

解决:在同一个场景中分别创建注册界面和登录界面,使用SetActive控制注册/登录成功后UI的显示与隐藏。

整体的UI框架搭建如下图所示:
在这里插入图片描述

1.1 注册界面

在这里插入图片描述

其中,底下蓝色的文字作为提示信息提示用户的注册情况。

1.2 登录界面

在这里插入图片描述

其中,底下紫色的文字作为提示信息提示用户的注册情况。

1.3 交互实现

由于这里注册与登录使用的是同一个输入框,因此在登录或注册后对输入框清空。这里还需要注意一点,需要判断登录和注册时用户名密码是否为空,如果为空,给出不能为空的提示。

交互功能代码:

using UnityEngine;using UnityEngine.UI;using Mysql.Data.mysqlClient;using System;public class DatabaseManager : MonoBehaviour{    // 数据库连接相关变量    private MysqlConnection connection;    private string serverName = "localhost";    private string dbName = "UnityGame";// 数据库    private string userName = "root";// 登录数据库的用户名    private string passWord = "123456";// 登录数据库的密码    private string port = "3306";           // MySQL服务的端口号    // 注册UI和登录UI    public GameObject ReGISterUI;    public GameObject LoginUI;    // 用户名输入框和密码输入框    public InputField usernameInputField;    public InputField passwordInputfield;    // 注册消息和登录消息    public Text registerMessage;    public Text loginMessage;    void Start()    {        // 初始化UI状态        LoginUI.SetActive(true);        RegisterUI.SetActive(false);        // 连接数据库        string connectionString = "Server=" + serverName + ";Database=" + dbName + ";Uid=" + userName      + ";Pwd=" + password + ";Port=" + port + ";";        connection = new MySqlConnection(connectionString);        connection.Open();        Debug.Log("连接数据库成功");    }    // 注册逻辑    public void OnRegister()    {        // 从输入框获取用户名和密码        string username = usernameInputField.text;        string password = passwordInputfield.text;        if (username == "" || password == "")        {            registerMessage.text = "账号或密码不能为空";        }        else        {            // 构造插入数据的SQL语句,并将用户名和密码赋值给参数            string query = "INSERT INTO usersinfo(username, password) VALUES (@username, @password)";            MySqlCommand cmd = new MySqlCommand(query, connection);            cmd.Parameters.AddWithValue("@username", username);            cmd.Parameters.AddWithValue("@password", password);            // 执行SQL语句,获取影响的行数            int rowsAffected = cmd.ExecuteNonQuery();            // 根据影响的行数给出注册成功或失败的消息,并清空输入框            if (rowsAffected > 0)            {                Debug.Log("注册成功");                registerMessage.text = "注册成功";            }            else            {                Debug.Log("注册失败");                registerMessage.text = "注册失败";            }            usernameInputField.text = "";            passwordInputfield.text = "";        }    }    // 登录逻辑    public void OnLogin()    {        // 从输入框获取用户名和密码        string username = usernameInputField.text;        string password = passwordInputfield.text;        if(username == "" || password == "")        {            loginMessage.text = "账号或密码不能为空";        }        else        {            // 构造查询数据的SQL语句,并将用户名和密码赋值给参数            string query = "SELECT COUNT(*) FROM usersinfo WHERE username=@username AND password=@password";            MySqlCommand cmd = new MySqlCommand(query, connection);            cmd.Parameters.AddWithValue("@username", username);            cmd.Parameters.AddWithValue("@password", password);            // 执行SQL语句,获取查询结果            object result = cmd.ExecuteScalar();            int count = Convert.ToInt32(result);            // 根据影响的行数给出注册成功或失败的消息,并清空输入框            if (count > 0)            {                Debug.Log("登录成功");                loginMessage.text = "登录成功";            }            else            {                Debug.Log("登录失败");                loginMessage.text = "登录失败";            }            usernameInputField.text = "";            passwordInputfield.text = "";        }    }}

相关变量绑定:
在这里插入图片描述
去注册的按钮事件绑定:
在这里插入图片描述

去登录的按钮事件绑定:
在这里插入图片描述

2 注册功能完善

问题1:用户注册时没有对用户信息进行校验,如一个用户用同一个用户名进行注册时应该进行提示、用户名或密码为空也应该进行提示。
问题2:用户注册时的注册时间没有加入用户表。
问题3:用户注册时输入的密码以明文存储于数据库中,这是不安全的。

2.1 判断用户输入的用户名是否与数据库中的重复

使用SQL查询语句查询数据库中是否存在具有给定用户名的用户记录,检查查询结果并根据需要返回检查用户输入的信息。如果 count 变量的值为0,则表示数据库中不存在具有该用户名的用户记录,可以继续进行注册流程。如果 count 变量的值大于0,则表示该用户名已经被占用,需要提示用户选择不同的用户名。

修改后的注册功能的代码实现:

// 注册逻辑    public void OnRegister()    {        // 从输入框获取用户名和密码        string username = usernameInputField.text;        string password = passwordInputfield.text;        if (username == "" || password == "")        {            registerMessage.text = "账号或密码不能为空";        }        else        {            // 检查数据库中是否存在具有给定用户名的用户记录            string query1 = "SELECT COUNT(*) FROM usersinfo WHERE username = @Username";            MySqlCommand cmd1 = new MySqlCommand(query1, connection);            cmd1.Parameters.AddWithValue("@Username", username);            int count = Convert.ToInt32(cmd1.ExecuteScalar());            // 根据查询结果提示用户            if (count > 0)            {                Debug.Log("用户名已存在,请选择不同的用户名!");                registerMessage.text = "用户名已存在,请选择不同的用户名!";            }            else            {                // 构造插入数据的SQL语句,并将用户名和密码赋值给参数                string query2 = "INSERT INTO usersinfo(username, password) VALUES (@username, @password)";                MySqlCommand cmd2 = new MySqlCommand(query2, connection);                cmd2.Parameters.AddWithValue("@username", username);                cmd2.Parameters.AddWithValue("@password", password);                // 执行SQL语句,获取影响的行数                int rowsAffected = cmd2.ExecuteNonQuery();                // 根据影响的行数给出注册成功或失败的消息                if (rowsAffected > 0)                {                    Debug.Log("注册成功");                    registerMessage.text = "注册成功";                }                else                {                    Debug.Log("注册失败");                    registerMessage.text = "注册失败";                }            }            //清空输入框            usernameInputField.text = "";            passwordInputfield.text = "";        }    }

2.2 将当前时间更新至用户表的当前注册时间列

将usersinfo的createtime列类型设置为timestamp,并将其默认值修改为CURRENT_TIMESTAMP。
在这里插入图片描述
注册成功后插入数据库的结果:
在这里插入图片描述

2.3 将用户输入的注册密码使用哈希加密

C#脚本中对用户注册和登录的结果都使用哈希进行加密,这样在进行比较时,都是使用加密后的密文进行比较的。

修改的部分代码:

using System.Security.Cryptography;    // 加密密码    private static string HashPassword(string password)    {        SHA256Managed crypt = new SHA256Managed();        StringBuilder hash = new StringBuilder();        byte[] crypto = crypt.ComputeHash(Encoding.UTF8.GetBytes(password));        foreach (byte theByte in crypto)        {            hash.Append(theByte.ToString("x2"));        }        return hash.ToString();    }// 注册逻辑    public void OnRegister()    {        // 从输入框获取用户名和密码        string username = usernameInputField.text;        //使用哈希进行加密        string password = HashPassword(passwordInputfield.text);                //省略    }// 登录逻辑    public void OnLogin()    {        // 从输入框获取用户名和密码        string username = usernameInputField.text;        //使用哈希进行加密        string password = HashPassword(passwordInputfield.text);        //省略    }

其中,加入了关闭数据库,用户登录成功后关闭数据库。

注册成功后插入数据库的结果:
在这里插入图片描述

3 登录功能完善

问题:用户登录时,没有针对特定错误进行提示,不论是因用户名密码错误还是该用户未注册都是提示“登录失败”。

修改后的登录功能的代码实现:

// 登录逻辑    public void OnLogin()    {        // 从输入框获取用户名和密码        string username = usernameInputField.text;        //使用哈希进行加密        string password = HashPassword(passwordInputfield.text);        if (username == "" || password == "")        {            loginMessage.text = "账号或密码不能为空";        }        else        {            // 构造查询数据的SQL语句,并将用户名和密码赋值给参数            string query = "SELECT COUNT(*) FROM usersinfo WHERE username=@username AND password=@password";            MySqlCommand cmd = new MySqlCommand(query, connection);            cmd.Parameters.AddWithValue("@username", username);            cmd.Parameters.AddWithValue("@password", password);            // 执行SQL语句,获取查询结果            object result = cmd.ExecuteScalar();            int count = Convert.ToInt32(result);            // 根据影响的行数给出注册成功或失败的消息,并清空输入框            if (count > 0)            {                Debug.Log("登录成功");                loginMessage.text = "登录成功";            }            else            {                // 根据查询结果给出不同的提示消息                string errORMessage;                query = "SELECT COUNT(*) FROM usersinfo WHERE username=@username";                cmd = new MySqlCommand(query, connection);                cmd.Parameters.AddWithValue("@username", username);                result = cmd.ExecuteScalar();                count = Convert.ToInt32(result);                if (count == 0)                {                    errorMessage = "用户名不存在";                }                else                {                    errorMessage = "密码错误";                }                Debug.Log("登录失败:" + errorMessage);                loginMessage.text = errorMessage;            }            usernameInputField.text = "";            passwordInputfield.text = "";        }    }

4 总体功能流程图

在这里插入图片描述

5 功能演示

填写用户名密码登录→用户名不存在→去注册→填写用户名密码注册→注册成功:

请添加图片描述

用同样的用户名注册→用户名已存在→去登录→输入其他用户名→用户名不存在→输入正确用户名错误密码→密码错误→输入正确用户名正确密码→登录成功:

请添加图片描述
UsersInfo数据表中的数据:
在这里插入图片描述

6 系列文章

  1. 【Unity+MySQL】实现简单的注册登录系统

  2. 【Unity+MySQL】实现注册登录系统(升级版)

  3. 【Unity+MySQL】实现注册登录系统(封装版)

来源地址:https://blog.csdn.net/qq_41084756/article/details/130262778

您可能感兴趣的文档:

--结束END--

本文标题: 【Unity+MySQL】实现注册登录系统(升级版)

本文链接: https://www.lsjlt.com/news/425549.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【Unity+MySQL】实现注册登录系统(升级版)
    目录 1 UI界面重新设计1.1 注册界面1.2 登录界面1.3 交互实现 2 注册功能完善2.1 判断用户输入的用户名是否与数据库中的重复2.2 将当前时间更新至用户表的当前注册时间列2...
    99+
    2023-10-08
    unity mysql 数据库
  • java实现注册登录系统
    本文实例为大家分享了java实现注册登录系统的具体代码,供大家参考,具体内容如下 1、创建菜单,注册,登录,退出 2、注册模块: a) 通过键盘输入用户名,密码b) 保存用户名密码到...
    99+
    2024-04-02
  • 一个注册、登录系统的实现
    github:https://github.com/BgirlStar/lazyDemo功能需求:该项目主要实现了前台用户登录注册以及显示用户所有注册信息的功能,后台数据库的比对数据修改添加查询功能。开发工...
    99+
    2024-04-02
  • java如何实现注册登录系统
    本篇内容介绍了“java如何实现注册登录系统”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、创建菜单,注册,登录,退出2、注册模块:a) ...
    99+
    2023-06-30
  • MySQL 实现点餐系统的用户登录注册功能
    MySQL 实现点餐系统的用户登录注册功能在开发点餐系统时,用户登录注册功能是必不可少的一部分。本文将介绍如何使用MySQL数据库实现点餐系统的用户登录注册功能,并给出具体的代码示例。创建用户表首先,我们需要在MySQL数据库中创建一个用户...
    99+
    2023-11-01
    MySQL 用户登录注册 点餐系统
  • Android Studio+Servlet+MySql实现登录注册
    一、Android 项目当中设置明文传输 1、设置明文传输的xml <?xml version="1.0" encoding="UTF-8"?...
    99+
    2024-04-02
  • NodeJs+MySQL实现注册登录功能
    本文实例为大家分享了NodeJs+MySQL实现注册登录功能的具体代码,供大家参考,具体内容如下 之前写过一个没有连接数据库的注册与登陆的实现,这次加上了数据库 刚刚接触后端,很多不...
    99+
    2024-04-02
  • Vue+MySQL实现登录注册案例
    Vue+MySQL实现登录注册案例 1.新建vue项目并连接数据库 具体步骤见vue连接mysql数据库 2.新建登录页面、注册页面和首页 在src/views文件夹下,新建 login.vue(登录...
    99+
    2023-09-03
    mysql vue.js 前端
  • java+mysql实现登录和注册功能
    初学JAVA  EE,老师留下一小作业,用JAVA实现与服务器端交互,实现登录和注册功能,初学一种专业课很多老师都会留下一种让学生实现登录和注册的作业。 下面是记录的实现步...
    99+
    2024-04-02
  • 使用PHP怎么实现一个注册登录系统
    这篇文章给大家介绍使用PHP怎么实现一个注册登录系统,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。目录结构如下,其中function文件夹下包含两个函数文件,uploads文件夹用于存放上传的文件。html页面登录页面...
    99+
    2023-06-15
  • springboot+VUE实现登录注册
    本文实例为大家分享了springboot+VUE实现登录注册的具体代码,供大家参考,具体内容如下 一、springBoot 创建springBoot项目 分为三个包,分别为contr...
    99+
    2024-04-02
  • 登录-注册网页实现
    re.php(登录的前端界面) 登录页面 .home{ text-align: center; font-wei...
    99+
    2023-08-31
    数据库 php 前端
  • NodeJs+MySQL怎么实现注册登录功能
    这篇文章主要介绍“NodeJs+MySQL怎么实现注册登录功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“NodeJs+MySQL怎么实现注册登录功能”文章能帮助大家解决问题。nodejs中mys...
    99+
    2023-06-30
  • python 容器 用户注册登录系统
    1. 列表和普通变量有什么区别  列表是数据类型,普通变量是用来存储数据的  可以把列表赋值给普通变量 2.存在列表 a = [11, 22, 33], 如何向列表中添加(增)新元素 44  a.append(44)  或者  a.ins...
    99+
    2023-01-30
    用户注册 容器 系统
  • Python实现注册登录功能
    用Python写个注册登录功能,供大家参考,具体内容如下 本文是用Python写一个注册登录功能,难度不大,很适合练手主要就是用列表和字典,以及逻辑判断用到的第3方库模块是time模...
    99+
    2024-04-02
  • Python实现用户登录注册
    简单的Python代码:用户登录注册 利用业余时间,写了一个用户进行登录注册的代码,非常简单。主要实现的功能是: 1、可以进行用户登录,在用户进行登录之前,对用户名进行检查,查看是否...
    99+
    2024-04-02
  • javaweb实现注册登录页面
    本文实例为大家分享了javaweb实现注册登录页面的具体代码,供大家参考,具体内容如下 <%@ page language="java" contentType="text/h...
    99+
    2024-04-02
  • Node.js实现登录注册功能
    本文实例为大家分享了Node.js实现登录注册功能的具体代码,供大家参考,具体内容如下 目录结构 注册页面: reg.html <!DOCTYPE html> <...
    99+
    2024-04-02
  • Redis如何实现登录注册
    今天小编给大家分享一下Redis如何实现登录注册的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 引言在传统的项目中,用户...
    99+
    2023-07-02
  • vue怎么实现注册登录
    今天小编给大家分享一下vue怎么实现注册登录的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。关于npm安装速度慢或不成功使用淘...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作