2011-10-06 49 views
0

你好,请原谅我再次发帖。当我意识到自己有问题修复它时,我会这样做。如何确保只有输入的数据被插入到数据库中?

请看看下面的代码。个人告诉我,最初开发它的代码只添加用户输入的数据行。换句话说,有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

非常感谢詹姆斯。我真的很感激。顺便说一句:我表弟的名字是詹姆斯约翰逊,他是一名牧师。 :) – Kenny

回答

0

只需添加一些条件来验证数据被输入到每行的输入中。

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

在附注中,我会建议修改代码以使用参数。 SQL注入的代码已经成熟。

0
  1. 考虑使用参数化stored procedures,而不是构建SQL作为一个字符串。现在你的应用程序可以是SQL injected。如果你给了我一个链接到你的应用程序,我可以消除你的Contribs表中的所有数据(假设线程运行的标识具有权限;无论如何,你的查询可以通过基于用户输入的语法来终止)。

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