Avatar billede jbjerre Nybegynder
06. april 2006 - 09:37 Der er 5 kommentarer og
1 løsning

Reserverede tegn i forbindelse med SQL-streng

Hej Alle.

Jeg har en side hvor folk kan lægge indlæg ind på.
indlæggene gemmes i en Access tabel.

Mit problem er at folk ikke kan benytte de reserverede tegn som " og '

Jeg indsætter indlæggene i tabellen ved hjælp af følgende kommando
set RSUG = CnnUG.Execute("INSERT INTO tblIndlaeg ( Kategori, Navn, Dato, Tekst) Values ('" & MCK & "','" & MCY & "','" & Now() & "','" & MCZ & " ')")


Er de nogen der har løsningen på dette.

Hilsen JBjerre
Avatar billede softspot Forsker
06. april 2006 - 09:45 #1
Den umiddelbare løsning er at udskifte apostroffer med dobbeltapostroffer:

set RSUG = CnnUG.Execute("INSERT INTO tblIndlaeg ( Kategori, Navn, Dato, Tekst) Values ('" & replace(MCK,"'","''") & "','" & replace(MCY,"'","''") & "',Now(),'" & replace(MCZ,"'","''") & " ')")

men en bedre løsning (efter min overbevisning er at bruge et command-objekt med parametre.
Avatar billede softspot Forsker
06. april 2006 - 09:49 #2
Command-objektet kan bruges således:

set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = CnnUG
cmd.CommandType = adCmdText
cmd.CommandText = "INSERT INTO tblIndlaeg (Kategori, Navn, Dato, Tekst) Values (?,?,Now(),?)"
cmd(0) = MCK
cmd(1) = MCY
cmd(2) = MCZ
cmd.Execute

Som du kan se bliver hele koden mere overskuelig og du slipper for at tænke på hvad brugeren har indtastet (selvom det stadig er en god idé at undersøge om der er noget ulovligt scriptkode i teksterne, hvis det skal vises i en browser igen).
Avatar billede softspot Forsker
06. april 2006 - 09:53 #3
Hvis du vil undgå fejl i koden pga. brugen af ADO-konstanter kan du paste denne linie ind i toppen af den side du lægger denne kode i (eller i global.asa - så skal du ikke tænke mere på det på resten af sitet):

<!-- METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4"  -->
Avatar billede jbjerre Nybegynder
06. april 2006 - 10:34 #4
Hej Softspot

Jeg har indsat
<!-- METADATA TYPE="typelib" uuid="00000205-0000-0010-8000-00AA006D2EA4"  -->
i global.asa

og indsat Execute sætningen som nedestående

set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = CnnUG
cmd.CommandType = adCmdText
cmd.CommandText = "INSERT INTO tblIndlaeg (Kategori, Navn, Dato, Tekst) Values (?,?,Now(),?)"
cmd(0) = MCK
cmd(1) = MCY
cmd(2) = MCZ
cmd.Execute

Og har testet med alverdens tegn og kan ikke fremkalde fejl, så alt er OK.
indsæt et svar hvis du vil have points.

Tak for hjælpen
JBjerre
Avatar billede softspot Forsker
06. april 2006 - 10:42 #5
Velbekomme :)
Avatar billede softspot Forsker
06. april 2006 - 18:13 #6
Tak for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester