Är det någon som har ett bra exempel på hur man raderar poster i en databas som har blivit markerade med checkboxar Hej, Du kan minimera Delete delen till en enda rad. Syntaxfel (operator saknas) i frågeuttrycket 'ID IN ( )'. Kan du skriva ut sql-frågan och posta den här så kan jag se hur den ser ut. Aj, aj. Tänk om en hacker vill ta bort information? Den klagar på Dim Re AS RegExp Opps, sorry, skrev funktinen i Access. Skippa bara deklareringen av variabel: <code> Var vänlig att bifoga koden du anväder dig av. Så att vi kan se det misstag du gör i din implementering. :oP från skickasidan Skriv ut Request.Form på mottagarsidan så du ser allting som skickas till sidan. På http://www.cougarit.net/chkbox/ så ligger det ett litet exempel, där loopar jag ut ett gäng namn med tillhörande checkbox, markera och klicka på radera och du får reda på deras värde. Har du method="post" i formuläret?Radera från db med checkboxar
Sv: Radera från db med checkboxar
Börja med att döpa all dina checkboxar till samma namn. Ge sen id och value dynamiskt:
<code>
'Loopen
<input type="checkbox" value="<%=rs("ID")%>" name="chkbox" id="<%=rs("ID")%>">
</code>
Sen på "tabort-sidan":
<code>
tmpArr = Split(Request.Form("chkbox"), ",")
For a = 0 To Ubound(tmp)
sql = "delete from TABELL where ID = " & tmpArr(a)
connect.Execute(sql)
Next
</code>
Lycka till!
/JockeSv: Radera från db med checkboxar
delWhat = Request.Form("chkbox")
sql = "delete from TABELL where ID IN ( " & delWhat & ")"
Då tar den bort alla som har det id som du skickar in.
//Anna-KarinSv: Radera från db med checkboxar
/mail/delMail.asp, line 9
vad kan det vara?Sv: Radera från db med checkboxar
Alltså kommentera bort connect.execute och skriv istället Response.Write sql
/JockeSv: Radera från db med checkboxar
Du bör begränsa delete satsen att bara göra det möjligt att ta bort poster man "äger". Brokar vara så att det rör sig om fler användar system. En användare skall då bara ha rättigheter att endast ta bort sina egna poster och ingen annans.
Dessutom bör man kontrollera att IN-strängen bara innehåller ID'nummer och ingen elak SQL inject kod.
<code>
Public Function ValidateIN(Value)
Dim re As RegExp
Set re = New RegExp
re.Pattern = "^\d+(,\s*\d+)*$"
ValidateIN = re.Test(Value)
End Function
Dim strIN
strIN = Trim(Request.Form("chkbox"))
If Len(strIN) = 0 Then
Response.Write "Du har inte markerat några poster..."
ElseIf ValidateIN(strIN) Then
strSQL = "DELETE FROM tblMail WHERE ((tblMail.MailAuthor = " & Session("UserId") & ") AND (tblMail.MAilId IN (" & strIN & ")))"
con.Execute strSQL
Else
'Bör logga ogiltlig in sträng för att se om det är en bugg eller ett hacker försök
Response.Write "Din http request innehåller en ogiltligt värde. Detta kan bero på en bugg eller att du medvetet skicka ogiltligt värde till data basen. Din begäran har därför loggats tillsamans med tidpunkt och IP nummer."
End If
</code>
Detta anser jag var grundläggande funktionalitet som kan vara lätta att förbise om man nyss börjat programmera ASP.Sv: Radera från db med checkboxar
när jag kör med cougarinas exempel så får jag inte med ID
delete from tblUsers_imail where ID IN ( )
men när jag kollar i den exekverade koden så innehåller varje checkbox ett värdeSv: Radera från db med checkboxar
Public Function ValidateIN(Value)
Dim re
Set re = New RegExp
re.Pattern = "^\d+(,\s*\d+)*$"
ValidateIN = re.Test(Value)
End Function
</code>Sv: Radera från db med checkboxar
Sv: Radera från db med checkboxar
<input type="checkbox" value="<%=readmail("ID")%>" name="chkbox" id="<%=readmail("ID")%>"></td>
mottagarsidan
<%option explicit%>
<!-- #include virtual="databaskopplingen.asp" -->
<%
Dim objConn, SQL, ID, delPost
delPost = Request.Form("chkbox")
SQL = "delete from tblUsers_imail where ID IN ( " & delPost & ")"
SET objConn = connect()
response.write SQL
'objConn.Execute(SQL)
'response.redirect "/mail/read.asp"
%>Sv: Radera från db med checkboxar
Sv: Radera från db med checkboxar
OBS!! Ingen säkerhet alls eller SQL kod för att radera finns.
http://www.cougarit.net/chkbox/chkBox.zip filerna
//Anna-KarinSv: Radera från db med checkboxar
Visa gärna hela form-taggen.