webForumDet fria alternativet

Kan inte skriva ett -> ' <- tecken till min databas

ASP

13 svar · 365 visningar · startad av hEWRa

Medlem sedan juli 200212 inlägg
Frågan#1

När jag försöker uppdatera eller skriva till min databas och använder mig utav ett ' sådant tecken får jag följande error msg:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel (operator saknas) i frågeuttrycket ''don't test', av=' Kaspar Prinz ', epost=' kasparular@hotmail.com ' WHERE ID=1'.
/prinzdesign/dbac.asp, line 80

Så här ser koden ut:

SQL = "UPDATE nyheter SET rubrik='"&Request.Form("rubrik")&"', meddelande='"&Request.Form("meddelande")&"', av='"&Request.Form("av")&"', epost='"&Request.Form("epost")&"' WHERE ID="&Request.Form("pID")&""

Conn.Execute(SQL)

Vad kan det vara för fel?

MVH Kaspar

Medlem sedan juni 20019 519 inlägg
#2

ASP är inte så särket.. du måste använda en replace:

function secure(mess)
mess = Replace(mess, "'", "''")
end function
SQL = "UPDATE nyheter SET rubrik='"&secure(Request.Form("rubrik"))&"', meddelande='"&secureRequest.Form("meddelande"))&"', av='"&secure(Request.Form("av"))&"', epost='"&secure(Request.Form("epost"))&"' WHERE ID="&Request.Form("pID")&""

Conn.Execute(SQL)

kan ha glömt något..

Medlem sedan juli 200212 inlägg
#3

Ska testa det där, tack för det snabba svaret! :)

Medlem sedan juli 200212 inlägg
#4

Hum det där fungerade inte alls, den funktionen tog bort all info jag postade till databasen när ja använde mig av ett ' tecken

Medlem sedan juni 20019 519 inlägg
#5

prova denna:

        Function secure(mess)

          Set objRegExp = New regexp
          objRegExp.Global = true
          objRegExp.IgnoreCase = true

          mess = Replace(mess, "'", "''")

          secure = mess
        End Function
Medlem sedan juli 200212 inlägg
#6

Yepp, den funkar. Tackar! Vad är det den gör engeltigen? :)

Medlem sedan juni 20019 519 inlägg
#7

ASP/SQL eller Access... tolkar ' som slut.. så du måste ha '' för att göra en ny.. typ.. finns många inlägg som svara bättre på din fråga.. prova att söka...

Jag tror du kan ändra om koden lite:

Function secure(mess)
          mess = Replace(mess, "'", "''")
          secure = mess
        End Function

Om du inte vill ha regulara uttryck senare
Välkommen till wF om ingen har sagt detta

Medlem sedan juni 200032 967 inlägg
#8

voigtann1, varför lade du in Regexp-kod i funktionen? Den används ju inte?

Det här räcker: (voigtann1 hade bara glömt att returnera strängen från funktionen)

        Function secure(mess)
          secure = Replace(mess, "'", "''")
        End Function

Funktionen ersätter en apostrof med två, så att SQL-frågan inte förstörs. Det läggs alltså in en apostrof, och strängen ser ut precis som den ska. Den extra apostrofen i det här fallet kallas för escape-tecken.

Mvh

Medlem sedan mars 20025 907 inlägg
#9

voigtann1 skrev:

prova denna:

        Function secure(mess)

          [b]Set objRegExp = New regexp
          objRegExp.Global = true
          objRegExp.IgnoreCase = true[/b]

          mess = Replace(mess, "'", "''")

          secure = mess
        End Function

Varför har du med de markerade raderna? Fyller ju ingen som helst funktion.

Medlem sedan juni 20019 519 inlägg
#10

Varm.. stressad... bal! :e

Medlem sedan sep. 20026 425 inlägg
#11

En liten funktion till:

Function Fix(str)
str = Replace(str,"'","''")
Fix = str
End Function

Använd funktionen på allt du sätter in i databasen. Det här kallas för SQL-injections har jag för mig.. ;)

Medlem sedan mars 20025 907 inlägg
#12

m_soderlund: Varför posta en till likadan funktion som redan finns i tråden?

Medlem sedan juli 200212 inlägg
#13

Strunt samma, nu vet jag i alla fall hur och varför man använder; som det nu troligtvis heter, SQL-injections. Tack :)

Medlem sedan sep. 20026 425 inlägg
#14

Peeer skrev:

m_soderlund: Varför posta en till likadan funktion som redan finns i tråden?

Whoops, såg bara voigtann1s RegExp-funktion och inte den andra. Och sen lyckades jag missa @nders kod också.. ;) (Jag trycke på svara men surfade vidare nån annanstans och glömde bort mitt svar)

272 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)