---
title: "Tecknet: ' funkar inte i mitt script..."
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/5800-tecknet-funkar-inte-i-mitt-script"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Bire"
published: "2000-06-05T23:58:00.000Z"
updated: "2000-06-07T12:28:00.000Z"
replies: 15
views: 403
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/5800-tecknet-funkar-inte-i-mitt-script"
---

# Tecknet: ' funkar inte i mitt script...

## #1 — Bire, 2000-06-05T23:58Z

Jag har ett sida där jag postar från ett formulär till detta script:

```
<%@ Language = "VBScript"%>
<%
'Declare all local variables
dim conn
dim rs
dim strconn
dim strsql

strsql = ""
'set connection string to local variable
strconn = "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" & Server.MapPath("\cgi-bin\gig.mdb")

'build the sql statement based on the input from the form
strSQL = "INSERT INTO Gig(Datum, Ort, Hak, Band, Url, Av, Inform)"
strSQL = strSQL & " SELECT "
strSQL = strSQL & "'" & request("Datum") & "' as Datum,"    
strSQL = strSQL & "'" & request("Ort") & "' as Ort,"
strSQL = strSQL & "'" & request("Hak") & "' as Hak,"
strSQL = strSQL & "'" & request("Band") & "' as Band,"
strSQL = strSQL & "'" & request("Url") & "' as Url,"
strSQL = strSQL & "'" & request("Av") & "' as Av,"
strSQL = strSQL & "'" & request("Inform") & "' as Inform"

'Set connection object 
set conn = server.createobject("adodb.connection")
conn.open strconn
'Use the execute method of the connection object the insert the record
conn.execute(strSQL)
conn.close
set conn = nothing
%>
```

Men om jag försöker att posta tecknet " ' " så får jag felmeddelandet:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 

\[Microsoft\]\[ODBC Microsoft Access 97 Driver\] Syntax error in string in query expression '' '' as Inform'. 

/gig/add2.asp, line 30 

Hur kommer jag runt detta problem och varför blir det så ? Jag har testat med en massa andra tecken såsom: !"#¤%& och alla funkar utom : " ' "

Permalänk: https://www.webforum.nu/p/5800

## #2 — sgtpepper, 2000-06-06T00:02Z

Tecknet ' är i SQL ett strängindelningstecken. Om du försöker posta det så avslutas strängen i INSERT satsen, därav felet. Byt ut ' mot '' (2 st efterföljande ') med Replace( hejhopp, "'","''").

När du sen plockar ut datat igen från databasen och vill visa det så byter du tillbaka med Replace( hejhopp, "''", "'").

Permalänk: https://www.webforum.nu/p/243476

## #3 — Bire, 2000-06-06T00:08Z

Jag hänger inte riktigt med i din förklaring sgtpepper ;) Kan du visa i kodexemplet så en mycket trött Bire fattar ? :e

Permalänk: https://www.webforum.nu/p/243477

## #4 — Brimba, 2000-06-06T06:25Z

Hej!
När jag läser hans förklaring så fattar jag det som att du skall göra så här:

Vi säger att det är Band som kan innehålla ' tecknet. Så gör du kanske så här:

```
' Fix the ' problem
bandtmp = Replace(request("Band"), "'","''").
'build the sql statement based on the input from the form
strSQL = "INSERT INTO Gig(Datum, Ort, Hak, Band, Url, Av, Inform)"
strSQL = strSQL & " SELECT "
strSQL = strSQL & "'" & request("Datum") & "' as Datum," 
strSQL = strSQL & "'" & request("Ort") & "' as Ort,"
strSQL = strSQL & "'" & request("Hak") & "' as Hak,"
strSQL = strSQL & "'" & bandtmp & "' as Band,"
strSQL = strSQL & "'" & request("Url") & "' as Url,"
strSQL = strSQL & "'" & request("Av") & "' as Av,"
strSQL = strSQL & "'" & request("Inform") & "' as Inform"

' Sätter tillbaka de riktiga fnuttarna i stängren igen

bandtmp = Replace(bandtmp, "''", "'")
```

Nu har du först alltså lagt till en fnutt i bandtmp varibeln för att databasen skall veta att stängen fortsätter, sedan när du inte använder strängen i databasen längre gör du om den så att du kan visa den på sidan på ett bra sätt, istället för

\<%=Request.Form("Band")%\> så skriver du ut bandet med \<%=bandtmp%\>, iofs skulle det föregående också fungera men men :e

Ha det bra!

Jag tror att det går att lösa på ett annat sätt också men jag hinner inte förklara.

///Patrik

Permalänk: https://www.webforum.nu/p/243478

## #5 — Cero, 2000-06-06T06:26Z

Testa något i stil med detta...

strInform = replace(request("Inform"), "'", "''")

Du kan läsa lite mer utförligt här... <http://www.4guysfromrolla.com/webtech/051899-1.shtml>

Permalänk: https://www.webforum.nu/p/243479

## #6 — sgtpepper, 2000-06-06T09:08Z

Hängde du med på förklaringarna Bire eller vill du ha ytterligare information?

Problemet är att strängar i en SQL-sats avdelas med '. T.ex kan en INSERT-sats se ut så här:

INSERT INTO users(name,password) VALUES('maximus', 'romavictoria');

Om du då dynamiskt bygger upp INSERT-satsen utifrån inmatad data från användaren m.h.a Request("name") etc. så kommer eventuella '-tecken som användaren matat in att avsluta strängen.

Om användaren skriver följande: 

name = gorby's
password = piroger

så kommer INSERT-satsen bli följande:
INSERT INTO users(name,password) VALUES('gorby's', 'piroger');

I ovanstående sats så ser du att strängen med namnet ser konstig ut.. Den har avslutats av det inmatade '.-tecknet.

För att komma runt detta så byter du ut alla '-tecken mot något annat innan texten läggs in i SQL-satsen. Oftast byter man ut ' mot ''.

Permalänk: https://www.webforum.nu/p/243480

## #7 — Bire, 2000-06-06T22:27Z

Nja... Det där går jag bet på tyvärr...

Finns det inget enklare sätt ? Typ att inkludera en "functions.inc" eller nått... Vad vet jag ? :e

Permalänk: https://www.webforum.nu/p/243481

## #8 — sgtpepper, 2000-06-06T22:40Z

Egentligen är det enkelt. Se bara till att du alltid byter ut ' mot '' i variabler som du ska använda i SQL-satser.

Det enda du behöver göra är att köra Replace på den variabel som du ska använda i SQL-anropet:

```
namn = Replace( Request("namn"), "'", "''" )
```

Voila! Nu slipper du fel om någon skulle skicka med ett '-tecken som inmatning.

Permalänk: https://www.webforum.nu/p/243482

## #9 — sgtpepper, 2000-06-06T22:43Z

Bire: Du kan kolla på den här adressen: <http://www.idg.se/mikrodatorn/webbmastern/md9807/> 

Där beskrivs det hur du fixar till användarnas inmatning så att ogiltiga tecken tas bort och det finns en zip-fil att ladda ned med en functions.inc som innehåller metoder för allt!

Permalänk: https://www.webforum.nu/p/243483

## #10 — Bire, 2000-06-06T23:06Z

Okay ! Jag kommer att ägna natten till att lära mig detta !! Jag lovar :e

Permalänk: https://www.webforum.nu/p/243484

## #11 — emission, 2000-06-06T23:09Z

För det första är det en hemsk lustig SQL-sats som sätts ihop, men en SELECT mitt i INSERT:en. Det funkar, eftersom SELECT:en returnerar ett "låtsasresultat", men det är osmidigt och inte SQL-standard.

Det borde i stället vara:

```
strSQL = "INSERT INTO Gig(Datum, Ort, Hak, Band, Url, Av, Inform)"
strSQL = strSQL & " VALUES("
strSQL = strSQL & "'" & request("Datum") & "','" 
strSQL = strSQL & "'" & request("Ort") & "','"
strSQL = strSQL & "'" & request("Hak") & "','"
strSQL = strSQL & "'" & request("Band") & "','"
strSQL = strSQL & "'" & request("Url") & "','"
strSQL = strSQL & "'" & request("Av") & "','"
strSQL = strSQL & "'" & request("Inform") & "')"
```

Vad gäller '.tecknen är det som bRimba säger. Eftersom strängar avgränsas av '-tecken, blir det syntax-fel om ett sådant tecken kommer mitt i strängen. SQL-parsern tror att strängen är slut, och då ska den följas av satsslut eller ett komma, men i stället kommer något annat...

Sedan kan mna ju inte byta ut ' mot vad som helst. Att byta ut ' mot '' (två enkelfnuttar) kallas double-quoting, och det är en generell tillämpning. SQL-parsern märker att det kommer en enkelfnutt efter den första, och inser då att man faktiskt villa ha med en fnutt i strängen. Vill man ha två fnuttar in strängen får man alltså skriva '''' (fyra stycken).

Jag kan tänka mig att det gåra att lösa mer generellt, men det kräver att man flyttar över indatasträngarna (från request) till variabler, eftersom man inte kan modifiera dessa.

Gör en liten funktion som t.ex. heter strfix, så blir det lättare.

```
function strfix(strIn)
   strfix=replace(strIn,"'","''")
end function
```

sedan är det bara att använda den...

```
strSQL = "INSERT INTO Gig(Datum, Ort, Hak, Band, Url, Av, Inform)"
strSQL = strSQL & " VALUES("
strSQL = strSQL & "'" & strfix(request("Datum")) & "','" 
strSQL = strSQL & "'" & strfix(request("Ort")) & "','"
strSQL = strSQL & "'" & strfix(request("Hak")) & "','"
strSQL = strSQL & "'" & strfix(request("Band")) & "','"
strSQL = strSQL & "'" & strfix(request("Url")) & "','"
strSQL = strSQL & "'" & strfix(request("Av")) & "','"
strSQL = strSQL & "'" & strfix(request("Inform")) & "')"
```

Permalänk: https://www.webforum.nu/p/243485

## #12 — Bire, 2000-06-07T00:09Z

Hmmm... Vad gör jag för fel ?

```
<%@ Language = "VBScript"%>
<%
function strfix(strIn)
strfix=replace(strIn,"'","''")
end function
%>
<%
dim conn
dim rs
dim strconn
dim strsql

strsql = ""
strconn = "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" & Server.MapPath("\cgi-bin\gig.mdb")

strSQL = "INSERT INTO Gig(Datum, Ort, Hak, Band, Url, Av, Inform)"
strSQL = strSQL & " VALUES("
strSQL = strSQL & "'" & strfix(request("Datum")) & "','" 
strSQL = strSQL & "'" & strfix(request("Ort")) & "','"
strSQL = strSQL & "'" & strfix(request("Hak")) & "','"
strSQL = strSQL & "'" & strfix(request("Band")) & "','"
strSQL = strSQL & "'" & strfix(request("Url")) & "','"
strSQL = strSQL & "'" & strfix(request("Av")) & "','"
strSQL = strSQL & "'" & strfix(request("Inform")) & "')"

set conn = server.createobject("adodb.connection")
conn.open strconn
conn.execute(strSQL)
conn.close
set conn = nothing
%>
```

Detta ger:

Microsoft OLE DB Provider for ODBC Drivers fel '80040e14' 

\[Microsoft\]\[Drivrutin för ODBC Microsoft Access\] Syntaxfel (operator saknas) i frågeuttrycket '''Borlänge',''Broadway''. 

/Envikenrecords/gig/add2.asp, rad 33 

Jag blir galen... ;)

Permalänk: https://www.webforum.nu/p/243486

## #13 — emission, 2000-06-07T08:14Z

Skriv ut SQL-satsen, så är det lättare att hitta felet.

response.write strSQL

Permalänk: https://www.webforum.nu/p/243487

## #14 — Bire, 2000-06-07T08:37Z

Hoppas du menar så här:
INSERT INTO Gig(Datum, Ort, Hak, Band, Url, Av, Inform) VALUES('2000-01-03',''Borlänge',''Broadway',''Metallica',''http://',''Bire',''dfst''srt rty ') 
Microsoft OLE DB Provider for ODBC Drivers fel '80040e14' 

\[Microsoft\]\[Drivrutin för ODBC Microsoft Access\] Syntaxfel (operator saknas) i frågeuttrycket '''Borlänge',''Broadway''. 

/Envikenrecords/gig/add2.asp, rad 31

Permalänk: https://www.webforum.nu/p/243488

## #15 — emission, 2000-06-07T11:02Z

Aah!! Missade en grej...

```
strSQL = "INSERT INTO Gig(Datum, Ort, Hak, Band, Url, Av, Inform)"
strSQL = strSQL & " VALUES('"
strSQL = strSQL & strfix(request("Datum")) & "','" 
strSQL = strSQL & strfix(request("Ort")) & "','"
strSQL = strSQL & strfix(request("Hak")) & "','"
strSQL = strSQL & strfix(request("Band")) & "','"
strSQL = strSQL & strfix(request("Url")) & "','"
strSQL = strSQL & strfix(request("Av")) & "','"
strSQL = strSQL & strfix(request("Inform")) & "')"
```

.det blev lite många fnuttar....

\[Redigerat av emission den 07 jun 2000\]

Permalänk: https://www.webforum.nu/p/243489

## #16 — Bire, 2000-06-07T12:28Z

Japp !!! Nu lirar det som det ska :e

TACK !!! Emission

Nu återstår bara att förstå vad scriptet gör... ;)

Permalänk: https://www.webforum.nu/p/243490

---

Tråden på webben: https://www.webforum.nu/amne/asp/5800-tecknet-funkar-inte-i-mitt-script
