我在c#中创建了mysql注册/登录系统。我可以注册并使用它登录。 我通过以下方式验证帐户:
MySqlConnection conn = new MySqlConnection(db_creds);
try { conn.Open(); }
catch { throw new Exception("Can't access database"); }
MySqlDataAdapter adapter;
DataTable table = new DataTable();
string query = "SELECT `Nickname`, `Password` FROM `" + db_table + "` WHERE `Nickname` = '" + nickname + "' AND `Password` = '" + password + "'";
adapter = new MySqlDataAdapter(query, conn);
adapter.Fill(table);
conn.Close();
if(table.Rows.Count <= 0)
{
return false;
}
else { return true; }
在昵称和密码之后我将varchar命名为active。我的问题是: 我怎样才能改变&#34;活跃&#34; (仅限此用户)当用户成功登录时为1?当注销将其更改为0?
答案 0 :(得分:0)
要更改表中的单个行,您需要获取它的ID(此表的唯一标识符)。让此唯一列的名称为str_Id
,然后为特定用户名和密码检索此ID。然后,您可以根据此唯一标识符更新活动状态。
另一个重要的建议是,不要使用这种类型的纯文本查询,这将为SQL注入打开一扇大门。所以我强烈建议您使用参数化查询,如下所示;
string query = "SELECT Nickname,str_Id FROM your_table_name" +
" WHERE Nickname =@nickname AND Password = @password";
MySqlConnection con = new MySqlConnection();
// Creating parameterized command
MySqlCommand cmd = new MySqlCommand(query, con);
cmd.Parameters.Add("@nickname", MySqlDbType.VarChar).Value = nickname;
cmd.Parameters.Add("@password", MySqlDbType.VarChar).Value = password;
MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
DataTable table = new DataTable();
// Collect the details to a DataTable
adapter.Fill(table);
if (table.Rows.Count>0) // Means there is some record found
{
// Get theUnique ID for the matching record
string uniqueId = table.Rows[0]["str_Id"].ToString();
// Update active state for that particular user
query = "Update your_table_name set active='0' Where str_Id=@str_Id";
cmd = new MySqlCommand(query, con);
cmd.Parameters.Add("@str_Id", MySqlDbType.VarChar).Value = uniqueId;
// Execute command here
}
else
{
// Print message thet no user found
}
答案 1 :(得分:0)
当您验证用户是否存在以及密码是否正确并在那里返回消息时,您需要为数据库添加更新命令。
使用该更新命令,您需要将列ACTIVE更新为1但更新为该用户,因此您需要使用此命令:
UPDATE table_name
SET column1=value1
WHERE some_column=some_value;
所以在你的情况下
UPDATE db_table SET active = 1 WHERE nickname = ' + nickname + '
因此用户现在具有ACTIVE状态。
现在你需要在注销时将其设置为非活动状态,这样当你按下注销按钮或关闭程序时就会这样做,但原则相同
UPDATE db_table SET active = 0 WHERE nickname = ' + nickname + '