如何确保只输入数据插入数据库?

时间:2011-10-06 16:06:28

标签: asp.net vb.net

再次问好,请原谅我再次发帖。当我意识到自己在修复问题时,我会这样做。

请查看下面的代码。最初开发它的人告诉我,代码只添加用户输入的数据行。换句话说,有5行文本框。用户可以将数据输入一行或全部5行。如果用户将数据输入到一行文本框中,那就是插入到数据库中的内容。

我对代码做了一些小改动,以便用户可以通过支票或现金支付来判断付款的时间。

由于我进行了更改,无论用户是将数据输入一行还是全部5行,所有5行都会插入到数据库中。

如何修改此代码以确保只插入输入的行?

我真的非常抱歉再次打扰你们,非常感谢你们的帮助。

    For x = 1 To 5 Step 1
        dedval = obr.FindControl("ded" & CStr(x))
        chckvalflag = obr.FindControl("chck" & CStr(x))
        checkboxval = obr.FindControl("chckBox" & CStr(x))
        onetimeval = obr.FindControl("onetime" & CStr(x))
        chcknumval = obr.FindControl("chcknum" & CStr(x))
        multival = obr.FindControl("multi" & CStr(x))
        *If (chckvalflag.Text <> "" Or chckvalflag.Text <> "0") And Not checkboxval.Checked Then
            cashval = DirectCast(obr.FindControl("chck" & CStr(x)), TextBox).Text
            chckval = ""
            chcknumval.Text = "Cash Payment"
        Else
            chckval = DirectCast(obr.FindControl("chck" & CStr(x)), TextBox).Text
            chcknumval = obr.FindControl("chcknum" & CStr(x))
        End If*
        If dedval.Text <> "-1" And donatechoice.SelectedItem.Value <> "No" Then
            sql += "INSERT INTO Contribs (employee_id, charity_code, check_amt, chcknum, one_time, bi_weekly, cash, donate_choice, date_stamp) "
            sql += "VALUES ('" & Replace(employee_idLabel.Text, "'", "''") & "','" & Replace(dedval.SelectedValue, "'", "''") & "','" & Replace(chckval, "'", "''") & "','" & Replace(chcknumval.Text, "'", "''") & "','" & Replace(onetimeval.Text, "'", "''") & "','" & multival.Text & "','" & Replace(cashval, "'", "''") & "','" & Replace(donatechoice.SelectedItem.Value, "'", "''") & "','" & Replace(datestamp, "'", "''") & "');"
        End If
        If donatechoice.SelectedItem.Value = "No" Then
            x = 6
            sql += "INSERT INTO Contribs (employee_id, charity_code, check_amt, chcknum, one_time, bi_weekly, cash, donate_choice, date_stamp) "
            sql += "VALUES ('" & Replace(employee_idLabel.Text, "'", "''") & "','" & Replace(dedval.SelectedValue, "'", "''") & "','" & Replace(chckval, "'", "''") & "','" & Replace(chcknumval.Text, "'", "''") & "','" & Replace(onetimeval.Text, "'", "''") & "','" & Replace(multival.Text, "'", "''") & "','" & Replace(cashval, "'", "''") & "','" & Replace(donatechoice.SelectedItem.Value, "'", "''") & "','" & Replace(datestamp, "'", "''") & "');"
        End If
    Next

2 个答案:

答案 0 :(得分:0)

  1. 查看使用参数化stored procedures而不是将SQL构建为字符串。现在您的申请可以是SQL injected。如果您给我一个指向您的应用程序的链接,我可能会清除Contribs表中的所有数据(假设线程运行的标识有权限;无论如何,您的查询可以通过基于用户输入的语法终止)。

  2. 如果您只想根据用户填写的文本框插入记录,只需使用case语句或if块来检查这些文本框中的值。如果用户输入了值,则执行一个命中数据库的函数。

答案 1 :(得分:0)

只需添加一些条件即可验证数据是否输入到每行的输入中。

If Not String.IsNullOrEmpty(String.Concat(TextBox1.Text, TextBox2.Text, TextBox3.Text)) Then
    'insert logic here
End If

另外,我建议修改代码以使用参数。 SQL注入的代码已经成熟。

相关问题