두 가지 액세스 레벨을 갖는 로그인 시스템을 만들려고합니다. 액세스 레벨이 1이면 'carer 홈 페이지'를 수신하고, 레벨이 2이면 '관리자 페이지'를 수신합니다. 로그인 양식에는 사용자가 버튼을 클릭하고 tryLogin 변수가 true를 반환 할 때 데이터베이스의 자격 증명에 대해 사용자 이름과 암호의 유효성을 검사하는 변수가 있습니다. 데이터베이스의 사용자 이름이 사용자 이름 텍스트와 일치하는 데이터베이스에서 액세스 수준을 가져옵니다 field두 개의 액세스 레벨을 가진 로그인 시스템
양식을로드하는 대신 잘못된 로그인 자격 증명이 표시됩니다. 필자는 이것에 대해 오랜 시간을 보냈으며 잃어 버렸습니다. 문제가 충분히 설명되기를 바랍니다.
public bool tryLogin(string uname, string pword)
{
MySqlConnection con = new MySqlConnection("host="";user="";password=""; database="";");
MySqlCommand cmd = new MySqlCommand("SELECT * FROM Staff WHERE username = '" + uname + "' AND password ='" + pword + "';");
cmd.Connection = con;
con.Open();
MySqlDataReader reader = cmd.ExecuteReader();
if (reader.Read() != false)
{
if (reader.IsDBNull(0) == true)
{
cmd.Connection.Close();
reader.Dispose();
cmd.Dispose();
return false;
}
else
{
cmd.Connection.Close();
reader.Dispose();
cmd.Dispose();
return true;
}
}
else
{
return false;
}
}
private void LoginBT_Click(object sender, EventArgs e)
{
if (tryLogin(uname.Text, pword.Text) == true)
{
MySqlConnection con = new MySqlConnection("host="";user="";password=""; database="";");
MySqlCommand cmd2 = new MySqlCommand("SELECT access_level FROM Staff WHERE username = '" + uname + "';");
cmd2.Connection = con;
con.Open();
MySqlDataReader reader = cmd2.ExecuteReader();
if (cmd2.Equals("1"))
{
this.Hide();
CarerHomePage CarerHomePage = new CarerHomePage();
CarerHomePage.Show();
}
if (cmd2.Equals("2"))
{
this.Hide();
AdministratorHome AdministratorHome = new AdministratorHome();
AdministratorHome.Show();
}
else
{
MessageBox.Show("Invalid Login Credentials");
}
}
}
}
}
! [SQL 주입] (http://en.wikipedia.org/wiki/SQL_injection) 취약점이 많이 있습니다. [작은 바비 테이블] (http://xkcd.com/327/)에 대해 들어 보지 못했습니까? – Cameron
@Cameron : lmao. – Paul
"오랫동안이 작업을 해왔습니다."는 말은 아마도 디버거를 사용하고 있지 않은 것입니다. Visual Studio의 도움없이이 글을 쓰고 있습니까? 그렇다면 C#으로 더 편하게 프로그래밍 할 때까지 [Visual Studio Express] (http://www.microsoft.com/express/)를 사용하는 것이 좋습니다. –