【发布时间】:2021-08-24 08:49:42
【问题描述】:
我正在为来自数据库的表单数据创建验证,然后将其与在文本框中输入的数据进行比较。无论我在文本框中输入正确还是不正确的数据,它总是执行 else 部分,请帮助解决这个问题。
c.Uname = Text1.Value.ToString();
c.Cnic = Text2.Value.ToString();
c.pass = Text3.Value.ToString();
SqlConnection sqlConn = new SqlConnection(@"Data Source=DESKTOP-Q4AAHCG;Initial Catalog=practise;User ID=;Password=;Trusted_Connection=True");
SqlCommand sqlComm = new SqlCommand("select Uname , Cnic, password from carregister", sqlConn);
sqlConn.Open();
SqlDataReader dr = sqlComm.ExecuteReader();
while (dr.Read())
{
name = dr["Uname"].ToString();
cnic = dr["Cnic"].ToString();
passs = dr["password"].ToString();
if (name.Equals(c.Uname) && cnic.Equals(c.Cnic) && passs.Equals(c.pass))
{
Session["Uname"] = Text1.Value.ToString();
Session["cnic"] = Text2.Value.ToString();
Response.Redirect("Carloby.aspx");
}
else
{
Response.Redirect("wrongidpass.aspx");
}
}
【问题讨论】:
-
使用调试器检查 Uname、Cnic 和 pass 的运行时值。如果数据库中有多个用户,则此逻辑将不起作用。您只想从数据库中获取与用户名匹配的一条记录,或者将 else 块的内容移到循环之外(当没有匹配时,错误的idpass)。
-
从不将密码存储为纯文本!哈希他们!另外:我建议您想象一下,如果您的数据库中有 两行,并且您尝试使用 第二行 行的凭据登录会发生什么。运行你头脑中的代码,和/或调试器。
-
您应该在查询中有
WHERE子句,以根据用户输入的用户名获取用户的详细信息。如果找到用户,那么只有您应该比较密码。如果未找到用户或密码不匹配,则应重定向到 workingpass.aspx。
标签: c# asp.net-mvc validation