Uppdatera = "SELECT * FROM Recension WHERE ID = " & Request.Form("AD") & " "
Eftersom att AD är ett heltal så bör du anropa CInt med AD som parameter:
Uppdatera = "SELECT * FROM Recension WHERE ID = " & CInt(Request.Form("AD"))
Detta konverterar AD till ett heltal, och om det innehåller text ( = trolig SQL Injection) visas ett felmeddelande som säger att AD inte kunde omvandlas till ett heltal.
tack för tipsen!
Behöver man inte också säkra så att alla värden större än 6 och mindre än noll plockas bort?
I dag finns filmer med betyg 0,87 - det ska ju inte vara möjligt när minsta betyget är 1.
Vet knappt vart jag sak börja, för det första skrota ditt recordset, när du ska göra en uppdatering så behövs det inte överhuvudtaget.
Gör det direkt i SQL istället.
Connect.Execute("UPDATE Recension SET Addvote = Addvote + zeroval, Votes = Votes + 1 WHERE ID = " & Request.Form("AD") & "")
Sådär nu sparade vi 7 rader kod på en gång.
zeroval används istället för Request.Form("R1") iom att du har tilldelat zeroval värdet i Request.Form("R1") tidigare, att anropa Request igen tar bara onödig kraft.
Att du får 0,87 som betyg är inte alls konstigt då man kan skicka in en 0 röst.
If zeroval = 0 Then
zeroval kommer aldrig vara = 0, du jämför nämligen 0 med "0" iom att du inte typomvandlar zeroval till ett tal.
En enkel kod för att utföra det du vill ser ut såhär, då är den även skyddad mot SQL injections.
<%
AdID = CLng(Request.Form("AD"))
zeroval = CLng(Request.Form("R1"))
If zeroval = 0 Then
Response.Write "Ogiltig röst."
Else
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Execute("UPDATE Recension SET Addvote = Addvote + zeroval, Votes = Votes + 1 WHERE ID = "& AdID &"")
Connect.Close : Set Connect = Nothing
Response.Cookies("Moviebetyg") = Request.Form("AD")
Response.Cookies("Moviebetyg").Expires = Date+1
Response.Cookies("Moviebetyg").Domain = ".www.moviemix.nu"
Response.Write "<b>Tack!</b><br>"
Response.Write "<scr" & "ipt>self.close();</scr" & "ipt>"
End If
%>
Skydd mot SQL injections är beroende på databas, MySQL och Access har olika.
Ska du ha ett 100% skydd så är det parametrar som gäller.
Kort kan man säga att se alltid till att typomvandla tal och se till att din databasspecifika tecken escapas korrekt