如果条件为true,则代码不会返回

本文关键字:代码 返回 条件 true 如果 | 更新日期: 2023-09-27 18:29:52

我需要验证用户提供的信息是否在数据库中,我已经尝试输入正确的条件,但它不起作用-它返回一个在数据库中找不到的错误。你能检查一下我的代码并告诉我发生了什么吗,我试着调试它,但foreach循环继续循环,并且没有转到if(isexist)语句

protected void btnSubmit_Click(object sender, EventArgs e)
    {
        token = FormsAuthentication.HashPasswordForStoringInConfigFile(txtUsername.Text.ToString() + txtAcctNo.Text.ToString(), "MD5");
        try
        {
            bool isExist = false;
            DataSet ds = new DataSet();
            ds = startService.getAllUsersWithoutFilter();
            if (ds.Tables[0].Rows.Count > 0)
            {
                foreach (DataRow dRow in ds.Tables[0].Rows)
                {
                    string userName = dRow["UserName"].ToString();
                    string acctNo = dRow["AccountNumber"].ToString();
                    string question = dRow["SecretQuestion"].ToString();
                    string answer = dRow["SecretAnswer"].ToString();
                    if (userName == txtUsername.Text.ToString() && acctNo == txtAcctNo.Text.ToString() && question == cboQuestion.Text.ToString() &&  answer == txtAnswer.Text.ToString())
                    {
                        isExist = true;
                    }
                    else
                    {
                        isExist = false;
                    }
                }
                if (isExist)
                {
                    startService.sendTokenizer(txtUsername.Text.ToString(), token);
                    //update database to change password to standard password
                    startService.inserUserActivity(txtUsername.Text.ToString(), txtAcctNo.Text.ToString(), "Password Reset Request", HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]);
                    startService.requestReset(txtUsername.Text.ToString(), txtAcctNo.Text.ToString(), token);
                    lblMessage.ForeColor = System.Drawing.Color.Green;
                    lblMessage.Text = "<br>We have sent an email to you for the instructions to reset your password. Please check your email.";
                }
                else
                {
                    this.lblMessage.ForeColor = System.Drawing.Color.Red;
                    this.lblMessage.Text = "<br><br>Error - Information cannot be found. Please check and try again. Make sure all the fields are correct.";
                }
            }
        }
        catch
        {
            lblError.Text = "There was an error occured while processing your request. Please try again later.";
        }
    }

如果条件为true,则代码不会返回

我认为当您将isExist设置为true时,您所需要的就是打破foreach循环。

if (userName == txtUsername.Text.ToString() && acctNo == txtAcctNo.Text.ToString() && question == cboQuestion.Text.ToString() &&  answer == txtAnswer.Text.ToString())
{
    isExist = true;
    break; //Found it, so stop looking.
}

我认为Joel直接回答你的问题是对的。

我想补充一点,您应该重新考虑加载整个users表,并在web服务器上对其进行迭代。为什么不试着从数据库中选择一个匹配的行呢?如果匹配,则凭据有效。如果不是,则它们无效。

@Dhenn:您需要在代码中进行以下更改

protected void btnSubmit_Click(object sender, EventArgs e)
{
    token = FormsAuthentication.HashPasswordForStoringInConfigFile(txtUsername.Text.ToString() + txtAcctNo.Text.ToString(), "MD5");
    try
    {
        bool isExist = false;
        DataSet ds = new DataSet();
        ds = startService.getAllUsersWithoutFilter();
        if (ds.Tables[0].Rows.Count > 0)
        {
            foreach (DataRow dRow in ds.Tables[0].Rows)
            {
                string userName = dRow["UserName"].ToString();
                string acctNo = dRow["AccountNumber"].ToString();
                string question = dRow["SecretQuestion"].ToString();
                string answer = dRow["SecretAnswer"].ToString();
                if (userName == txtUsername.Text.ToString() && acctNo == txtAcctNo.Text.ToString() && question == cboQuestion.Text.ToString() &&  answer == txtAnswer.Text.ToString())
                {
                     // if exist execute following code
                    startService.sendTokenizer(txtUsername.Text.ToString(), token);
                //update database to change password to standard password
                startService.inserUserActivity(txtUsername.Text.ToString(), txtAcctNo.Text.ToString(), "Password Reset Request", HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]);
                startService.requestReset(txtUsername.Text.ToString(), txtAcctNo.Text.ToString(), token);
                lblMessage.ForeColor = System.Drawing.Color.Green;
                lblMessage.Text = "<br>We have sent an email to you for the instructions to reset your password. Please check your email.";
                }
                else
                {
                  // id not exist then execute following code
                   this.lblMessage.ForeColor = System.Drawing.Color.Red;
                this.lblMessage.Text = "<br><br>Error - Information cannot be found. Please check and try again. Make sure all the fields are correct.";
                }
            }              
        }
    }
    catch
    {
        lblError.Text = "There was an error occured while processing your request. Please try again later.";
    }
}