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

这篇具有很好参考价值的文章主要介绍了【Unity+MySQL】实现注册登录系统(升级版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


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

1 UI界面重新设计

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

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

整体的UI框架搭建如下图所示:
【Unity+MySQL】实现注册登录系统(升级版),unity,mysql,数据库

1.1 注册界面

【Unity+MySQL】实现注册登录系统(升级版),unity,mysql,数据库

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

1.2 登录界面

【Unity+MySQL】实现注册登录系统(升级版),unity,mysql,数据库

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

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 = "";
        }
    }
}

相关变量绑定:
【Unity+MySQL】实现注册登录系统(升级版),unity,mysql,数据库
去注册的按钮事件绑定:
【Unity+MySQL】实现注册登录系统(升级版),unity,mysql,数据库

去登录的按钮事件绑定:
【Unity+MySQL】实现注册登录系统(升级版),unity,mysql,数据库

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。
【Unity+MySQL】实现注册登录系统(升级版),unity,mysql,数据库
注册成功后插入数据库的结果:
【Unity+MySQL】实现注册登录系统(升级版),unity,mysql,数据库

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);

        //省略
    }

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

注册成功后插入数据库的结果:
【Unity+MySQL】实现注册登录系统(升级版),unity,mysql,数据库

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 总体功能流程图

【Unity+MySQL】实现注册登录系统(升级版),unity,mysql,数据库

5 功能演示

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

【Unity+MySQL】实现注册登录系统(升级版),unity,mysql,数据库

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

【Unity+MySQL】实现注册登录系统(升级版),unity,mysql,数据库
UsersInfo数据表中的数据:
【Unity+MySQL】实现注册登录系统(升级版),unity,mysql,数据库

6 系列文章

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

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

  3. 【Unity+MySQL】实现注册登录系统(封装版)文章来源地址https://www.toymoban.com/news/detail-705993.html

到了这里,关于【Unity+MySQL】实现注册登录系统(升级版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot - 集成Swagger2、Knife4j接口文档/升级版swagger-bootstrap-ui配置以及账号密码登录

    请注意@Configuration和@EnableSwagger2注解。这两个注解分别表示这是一个配置类,以及启用了Swagger 2。只有在这两个注解都存在的情况下,Swagger才会被正确启用。 如果您的项目使用的是Swagger 3(即OpenAPI 3),则配置文件可能如下所示: 访问 http://localhost:8080/swagger-ui.html (假设项

    2024年02月08日
    浏览(42)
  • 高级DBA带你处理Mysql数据库漏洞修复方法以及升级版本方法指南最详细全网唯一

    日常运维实际工作中,经常碰到密评风险漏洞生产环境扫描出很多数据库漏洞,要求整改 MYSQL数据库整改方法就是升级版本,升更高版本就自动修复了上图的漏洞,能确保正常过风险评估。下文叙述了升级方法。 升级规范 5.7x升级5.7X 比如5.7.22升级5.7.36(5.7版本官方也一直在

    2024年02月06日
    浏览(89)
  • 机器学习算法实战案例:VMD-LSTM实现单变量多步光伏预测(升级版)

    机器学习算法实战案例系列 机器学习算法实战案例:确实可以封神了,时间序列预测算法最全总结! 机器学习算法实战案例:时间序列数据最全的预处理方法总结 机器学习算法实战案例:GRU 实现多变量多步光伏预测 机器学习算法实战案例:LSTM实现单变量滚动风电预测 机器

    2024年01月18日
    浏览(80)
  • selenium升级版

    1.1原理 Selenium 是一个 Web 应用的自动化框架。 通过它,我们可以写出自动化程序,像人一样在浏览器里操作web界面。 比如点击界面按钮,在文本框 中输入文字 等操作。(相当于真正的浏览) 而且还能从web界面获取信息。 比如获取12306票务信息,招聘网站职位信息,财经网

    2024年01月16日
    浏览(48)
  • C语言猜数字升级版

    题目概述 猜数字是一种益智游戏,既可以两个人一起玩,也可以与电脑一起玩。现在我们需要将这个游戏移到电脑上,让电脑与我们一起玩猜数字游戏. 需求分析 用户输入:确定用户输入的数据是否正确 游戏过程:保证计算机能正确选定一个随机数字,并能够正常与用户互

    2024年02月04日
    浏览(55)
  • 单身狗问题(初级)兼(升级版)

    所属专栏:经典算法题❤️ 🚀 博主首页:初阳785❤️ 🚀 代码托管:chuyang785❤️ 🚀 感谢大家的支持,您的点赞和关注是对我最大的支持!!!❤️ 🚀 博主也会更加的努力,创作出更优质的博文!!❤️ 🚀 关注我,关注我,关注我,重要的事情说三遍!!!!!!!!

    2024年02月16日
    浏览(43)
  • 爱心发射代码带名字升级版

    上次的爱心发射发出来之后,群友想问能不能把心爱的人名字放在爱心中间。 当然没问题啊,于是我就改了改代码,让女神王铁蛋显示在爱心中间,同时还可以在屏幕上飘动满屏的王铁蛋,大大小小、快快慢慢的王铁蛋。 这还拿不下王铁蛋? 话不多说,直接上效果图。 背景

    2024年02月11日
    浏览(49)
  • 爬虫练习-12306自动购票升级版

    hello兄弟们,偷懒归来了。别问为啥这么久没更,问就是失踪了 最近一直在学习Django以及爬虫进阶之类的知识,加上快期末了,一直没有想起来自己还有一个账号没有更新,sorry啦 言归正传,今天抽空把前面的文章升级了一下。这里先把整理好的代码提前放给大家 代码放上,

    2024年02月06日
    浏览(63)
  • 【Unity+MySQL】实现注册登录系统(封装版)

    接着 上篇文章的注册登录系统,这篇文章将MySQL相关操作封装,在Unity交互脚本中直接调用封装的方法。 编写一个DBConnector脚本,封装MySQL中常用的操作,如连接数据库、关闭数据库、查询数据库、除查询外的插入、更新、删除等操作。 编写一个User脚本用于封装用户注册、登

    2024年02月05日
    浏览(48)
  • 【Unity+MySQL】实现简单的注册登录系统

    确保这两个软件都能够在你的计算机上良好地运行。 镜像地址:http://mirrors.sohu.com/mysql/MySQL-8.0/ 下载完成后双击运行msi文件。 Next→ Next→ 选择自定义安装, Next→ 选择安装路径, Next→ Install安装, 安装完成,Finish。 此电脑→计算机→属性, 关于→高级系统设置, 高级→环

    2024年02月05日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包