[英]c# login registration form registers user details only 1 time
我已经创建了使用md5加密的ac#用户注册表格...但是我的问题是我只想一次在“管理员级别”下注册用户详细信息。
我想要的是当我选择管理员级别并尝试重新注册为另一个用户时,系统可能未授予注册另一个管理员的权限。并显示一个消息框,“抱歉管理员已在系统中注册”。 。
我的代码是.....
if (textBox1.Text != "" && textBox2.Text != "" && comboBox1.Text != "" && (comboBox1.Text == "Administrator" || comboBox1.Text == "Employee" || comboBox1.Text == "Developer"))
{
connection.Open();
string TypeUser;
int level = Convert.ToInt32(0);
TypeUser = comboBox1.Text;
if (TypeUser == "Administrator")
{
level = 1;
}
else if (TypeUser == "Employee")
{
level = 2;
}
else if (TypeUser == "Developer")
{
level = 3;
}
MySqlDataReader dr;
MySqlCommand cmd;
string sql = "INSERT INTO users(name,password,level) VALUES('" + textBox1.Text + "',MD5('" + textBox2.Text + "'),'" + level + "')";
cmd = new MySqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Connection = connection;
dr = cmd.ExecuteReader();
MessageBox.Show("Registration Success !","Success",MessageBoxButtons.OK,MessageBoxIcon.Information);
connection.Close();
cmd.Dispose();
}
else
{
MessageBox.Show("All Fields must be required / something is wrong", "error", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
}
您需要检查数据库中是否已经存在等于1的记录。您可以编写这样的方法,并且在插入用户之前应调用它。
public bool CheckForExistingAdmin(int level)
{
if(level != 1)
return false;
int count = 0;
using(MySqlConnection conn = new MySqlConnection ("ConnectionString")
{
conn.Open();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText = @"SELECT Count(ID) FROM Users WHERE Level = 1";
count = (int)cmd.ExecuteScalar();
}
return count > 0 ? true : false;
}
之后,在您的代码中:
if(CheckForExistingAdmin)
{
//show error message;
return; //exit from the method;
}
MySqlDataReader dr;
MySqlCommand cmd;
//other stuff.
您的代码有一些基本问题。 首先,您可以使用sql注入。 您应该使用参数化查询进行保护。 就像我在示例中所示,在将连接写入db时,也可以使用using块或try / catch / finally。 可能会发生异常,在这种情况下,您的连接将保持打开状态。
您也可以编写单独的模块来连接数据库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.