再次问好,请原谅我再次发帖。当我意识到自己在修复问题时,我会这样做。
请查看下面的代码。最初开发它的人告诉我,代码只添加用户输入的数据行。换句话说,有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
答案 0 :(得分:0)
查看使用参数化stored procedures而不是将SQL构建为字符串。现在您的申请可以是SQL injected。如果您给我一个指向您的应用程序的链接,我可能会清除Contribs
表中的所有数据(假设线程运行的标识有权限;无论如何,您的查询可以通过基于用户输入的语法终止)。
如果您只想根据用户填写的文本框插入记录,只需使用case语句或if块来检查这些文本框中的值。如果用户输入了值,则执行一个命中数据库的函数。
答案 1 :(得分:0)
只需添加一些条件即可验证数据是否输入到每行的输入中。
If Not String.IsNullOrEmpty(String.Concat(TextBox1.Text, TextBox2.Text, TextBox3.Text)) Then
'insert logic here
End If
另外,我建议修改代码以使用参数。 SQL注入的代码已经成熟。