2011-10-06 50 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來檢查這些文本框中的值。如果用戶輸入一個值,執行一個命中數據庫的函數。