Hej, jag har flera checkboxar på rad. De checkboxar man fyller i ska den raden tas bort från db. Just nu kan man bara fylla i en checkbox i taget, vilket inte är så bra om man vill ta bort flera rader på en gång.
Här tar jag bort från db:
När jag ska ta bort flera rader i tabellen så skriver jag ju bara AND i sql-satsen men hur blir det med variabeln participantId? Om flera checkboxar är bockade så ta bort dessa, hur får jag inte det? If...lalala nånting...
Den där koden välkomnar SQL-injection.
Se till att ha någon slags validering av indatat så det bara är siffror, kommatecken och mellanslag som kommer in.
Ett bra pattern för att hitta förbjudna tecken är: [^\s\d,]
Request.Form("participant") returnerar ett objekt av type IStringList. Ifall listan innehåller flera värden och du vill ha ut värdet av den, så kommer den att returnera en sträng som är en kommaseparerad lista av värdena.
Ifall du har tre värden i listan, "4", "18" och "42", så kommer du att få en sträng som ser ut så här: "4, 18, 42".
När du använder strängen i din SQL-fråga så får du en fråga som ser ut så här:
"DELETE FROM Participant WHERE id in (4, 18, 42)"
128 är en flagga som talar om att anropet inte ska skapa något recordset. Eftersom du inte hämtar någon data så behöver du ju inget recordset, och då är det ju onödigt att det skapas något eftersom du ändå inte tar hand om det.
[^\s\d,] är ett regexp-pattern som letar efter otillåtna tecken.
Så här skulle man kunna skriva:
Function CheckInputData(ByVal sInputData)
Dim objRegExp
Set objRegExp = New RegExp
objRegExp.Pattern = "[^\s\d,]"
CheckInputData = Not objRegExp.Test(sInputData)
Set objRegExp = Nothing
End Function
If Not CheckInputData(participantId) Then
Response.Write "Incorrect input data."
Response.End
End If