SQL查询后的重定向页面
本文关键字:重定向 查询 SQL | 更新日期: 2023-09-27 18:02:49
假设我在http://localhost:7924/default上,并输入登录信息,以下是在每个场景中发生的情况:
如果密码错误(或正确)+ login_name不存在=> 刷新页面
如果密码错误+ login_name exist(正确)=> going to error_page
如果两者都正确=>重定向到CP.aspx
string text = username_login.Text;
string str2 = password_login.Text;
SqlConnection sqlcon = new SqlConnection(Functions.Auth());
SqlCommand sqlcmd = new SqlCommand();
sqlcmd.CommandText = "SELECT TOP 1 password FROM dbo.Accounts WHERE login_name = @login_name";
sqlcmd.Parameters.Add("@login_name", System.Data.SqlDbType.NVarChar).Value = text;
sqlcmd.CommandType = System.Data.CommandType.Text;
sqlcmd.Connection = sqlcon;
sqlcon.Open();
SqlDataReader sqlreader = sqlcmd.ExecuteReader();
string returnString = String.Empty;
while (sqlreader.Read())
{
if (sqlreader["password"].ToString() == Functions.CreateMD5Hash("5487" + str2.ToString()))
{
this.Session["logged_in"] = "true";
this.Session["username"] = text;
base.Response.Redirect("/CP.aspx");
}
else
{
base.Response.Redirect("/error_page?err=login-fail");
}
}
同时2。, 3。正在正常工作,然而,第一个不是。我不明白为什么它只是刷新页面,而不是去错误页面,因为细节是错误的。(因为它不能进行比较)
EDIT:我还检查了密码是否为NULL =>重定向到error_page,但这也刷新了页面。
您只需要检查它是否有任何值。
if(sqlreader.HasRows)
{
While...
}
else
{
//refresh page code here
}
你也可以考虑一个更好的架构师n-tie,表示层,业务层,数据访问层。
技术上:1。如果sqlreader
没有第2行。如果while loop
中的任何条件都没有得到true
,则将呈现相同的页面。但是要获得页面的刷新,您可以使用Response.Redirect(Request.RawUrl)
。我喜欢在你的代码中做一些改变——只是一点点:
// since you are selecting 1 top row, here you would 0 or 1 row at all.
// so you don't need to use `while` and `if` doing well
// also, you won't need to check if `sqlreader.HasRows`,
// because the `if (sqlreader.Read())` does the same.
if (sqlreader.Read())
{
if (sqlreader["password"].ToString() == Functions.CreateMD5Hash("5487" + str2.ToString()))
{
this.Session["logged_in"] = "true";
this.Session["username"] = text;
base.Response.Redirect("/CP.aspx");
}
else
{
base.Response.Redirect("/error_page?err=login-fail");
}
}
// there is no need to use an `else`. just do the redirect:
Response.Redirect(Request.RawUrl);
尝试在链接前使用~
:
base.Response.Redirect("~/CP.aspx");
我已经修改了你的代码并检查它是否会解决你的问题
public static string ReplaceAll(String Str)
{
Str = Str.Replace("'", " ");
Str = Str.Replace(";", " ");
Str = Str.TrimStart();
Str = Str.TrimEnd();
return Str;
}
public void MyFunction()
{
SqlConnection sqlcon = new SqlConnection(Functions.Auth());
SqlDataAdapter sda = new SqlDataAdapter("SELECT TOP 1 password FROM dbo.Accounts WHERE login_name = '" + ReplaceAll(username_login.Text) + "' and password='" + ReplaceAll(password_login.Text) + "'", sqlcon);
DataTable dt = new DataTable();
sda.Fill(dt);
if (dt.Rows.Count > 0)
{
this.Session["logged_in"] = "true";
this.Session["username"] = text;
base.Response.Redirect("/CP.aspx");
}
else
{
base.Response.Redirect("/error_page?err=login-fail");
}}