SQL查询后的重定向页面

本文关键字:重定向 查询 SQL | 更新日期: 2023-09-27 18:02:49

假设我在http://localhost:7924/default上,并输入登录信息,以下是在每个场景中发生的情况:

  1. 如果密码错误(或正确)+ login_name不存在=> 刷新页面

  2. 如果密码错误+ login_name exist(正确)=> going to error_page

  3. 如果两者都正确=>重定向到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,但这也刷新了页面。

SQL查询后的重定向页面

您只需要检查它是否有任何值。

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");
            }}