Avatar billede hallum Nybegynder
29. januar 2002 - 22:05 Der er 9 kommentarer og
1 løsning

Specialtegn og brug af disse i database input '*-¨^~"@#!´|,:><\;(){$ --

Jeg får denne fejl:
Microsoft OLE DB Provider for ODBC Drivers fejl '80040e14'
[Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl i strengen i forespørgselsudtrykket "''"')".
------------
Jeg har en del snydekoder som jeg lægger ind i en access 2000 database ved at klippe og klistre fra browseren lokal via min PWS. Dette gøres i en form ny.asp, som så sendes til en gem.asp side.
En del af koderne har specialtegn '*-¨^~"@#!´|,:><\;(){$, -- og dem kan min asp løsning ikke lide, den fortolker det som noget kode. Komplet løsning (jeg er begynder) som giver mig mulighed for fortsat at klippe og klistre fra en browser, også selvom der anvendes specialtegn som '*-¨^~"@#!´|,:><\;(){$ --

Her er siden/formen som der indtastes i:
<html>
<body>
Ny kode
<table border="0"><tr>
<form action="gem.asp" method="post">
<td>Consol : </td><td><select name="consol">
<option value="pc">PC</option>
<option value="pc">PSX</option>
<option value="pc">Nintendo</option>
</select><br></td></tr><tr><td>
Spil : </td><td><input type="Text" name="spil"><br></td></tr><tr><td>
Snydekode: </td><td><textarea name="snydekode" cols="5" rows="5"></textarea><br><input type="submit" value="gem"></td></tr></table>
</form>
</body>
</html>

Her er siden som der gemmes i gem.asp:
<%
'forbindelse til databasen.
strconn = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("cheat.mdb") &";DefaultDir="& Server.MapPath("/") &";DriverId=25;FIL=MS Access;MaxBufferSize=512;PageTimeout=5"
    set conn = server.createobject("adodb.connection")
    conn.open(strconn)

Sql = "Insert into cheat (vocal, consol, spil, snydekode) values('" & Left(Request.form("spil"),1) & "','" & Request.form("Consol") & "','" &  Request.form("spil") & "','" &  Request.form("snydekode") & "')"
conn.execute(sql)
response.write " <center><b><font face='verdana' size='2'>Snydekode arkiveret</font></b></center><br>"

%>Left(Request.Form("text"),1) 
Avatar billede sorenmhansen Nybegynder
29. januar 2002 - 22:22 #1
Undskift alle ' med dobbelt ' med Replace(streng, "'", "''"). Din SQL-streng skal da opbygges således:

Sql = "INSERT INTO cheat (vocal, consol, spil, snydekode) values('" & Replace(Left(Request.form("spil"),1),"'","''") & "','" & Replace(Request.form("Consol"), "'", "''") & "','" &  Replace(Request.form("spil"),"'","''") & "','" &  Replace(Request.form("snydekode"),"'","''") & "')"

Jeg plejer at bruge en funktion til at rette streng til, så de kan indsættes i en SQL-sætning. Følgende er udemærket:

Function MakeSQLString(strSQL)
    strSQL=Trim(strSQL)
    strSQL=Replace(strSQL,"'","''")   
    MakeSQLString="'" & strSQL & "'"
End Function

-søren
Avatar billede hallum Nybegynder
30. januar 2002 - 09:26 #2
sorenmhansen -> Du må vist lige forklare mig lidt mere detaljeret (bøje det i neon), hvordan det skal se ud, jeg tænker her også på funktionen, hvor skal den være..
Hvad med de øvrige: ?'*-¨^~"@#!´|,:><\;(){$ --
Der er vist også noget med: String = Server.HTMLEncode(String); eller er det bare noget vrøvl? Eller hvordan virker/laves det?
Avatar billede sorenmhansen Nybegynder
30. januar 2002 - 11:25 #3
Det er generelt ikke en god ide at bruge Server.HTMLEncode før man lægger det med i databasen. Hvis der er brug for Server.HTMLEncode, så brug den først når du skal vise teksten.

Hvis du bruger min funktion skal din SQL opbygges således:

Sql = "INSERT INTO cheat (vocal, consol, spil, snydekode) values(" & MakeSQLString(Left(Request.form("spil"),1)) & "," & MakeSQLString(Request.form("Consol")) & "," & MakeSQLString(Request.form("spil")) & "," & MakeSQLString(Request.form("snydekode")) & ")"

Bemærk at '-erne er fjernet da funktion selv sætter dem. Du skal selvfølgelig kun bruge funktionen når det er en streng du indsætter i SQL-sætningen.
-søren
Avatar billede sorenmhansen Nybegynder
30. januar 2002 - 11:30 #4
Mht. de andre tegn så er det så vidt jeg husker ikke noget problem i SQL.
Men når du skrever ud med Response.Write vil det være en god ide at bruge Server.HTMLEncode. Dog ikke i forbindelse med <input>-felter.
Avatar billede hallum Nybegynder
30. januar 2002 - 16:58 #5
sorenmhansen -> Jeg tester det iaften.
Hvordan mht. output, skal jeg gøre noget der i visningen. Kan du vise mig hvordan jeg bruger Server.HTMLEncode som du jo anbefaler.
Jeg forhøjer gerne points hvis du også kan hjælpe med dette, ligeså detaljeret!
Avatar billede hallum Nybegynder
30. januar 2002 - 21:13 #6
sorenmhansen->
Her er siden som jeg har rettet den til gem.asp
<%
'forbindelse til databasen.
strconn = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("cheat.mdb") &";DefaultDir="& Server.MapPath("/") &";DriverId=25;FIL=MS Access;MaxBufferSize=512;PageTimeout=5"
    set conn = server.createobject("adodb.connection")
    conn.open(strconn)
Sql = "INSERT INTO cheat (vocal, consol, spil, snydekode) values(" & MakeSQLString(Left(Request.form("spil"),1)) & "," & MakeSQLString(Request.form("Consol")) & "," & MakeSQLString(Request.form("spil")) & "," & MakeSQLString(Request.form("snydekode")) & ")"
conn.execute(sql)
response.write " <center><b><font face='verdana' size='2'>Snydekode arkiveret</font></b></center><br>"
%>Left(Request.Form("text"),1)
Den giver følgende fejl ved indsætning af tekst i mit tekstfelt med '
Der opstod en Microsoft VBScript-kørselsfejl fejl '800a000d'
Typerne passer ikke sammen: 'MakeSQLString'
/snydedatabase/nytforslag/gem-cheat.asp, linje 11
Avatar billede sorenmhansen Nybegynder
30. januar 2002 - 23:03 #7
Jeg tror du har glemt at indsætte min funktion i din kode.

<%

' Funktion til formatering af streng til SQL
Function MakeSQLString(strSQL)
    strSQL=Trim(strSQL)
    strSQL=Replace(strSQL,"'","''")   
    MakeSQLString="'" & strSQL & "'"
End Function

' forbindelse til databasen.
strconn = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("cheat.mdb") &";DefaultDir="& Server.MapPath("/") &";DriverId=25;FIL=MS Access;MaxBufferSize=512;PageTimeout=5"
    set conn = server.createobject("adodb.connection")
    conn.open(strconn)
Sql = "INSERT INTO cheat (vocal, consol, spil, snydekode) values(" & MakeSQLString(Left(Request.form("spil"),1)) & "," & MakeSQLString(Request.form("Consol")) & "," & MakeSQLString(Request.form("spil")) & "," & MakeSQLString(Request.form("snydekode")) & ")"
conn.execute(sql)
response.write " <center><b><font face='verdana' size='2'>Snydekode arkiveret</font></b></center><br>"
%>Left(Request.Form("text"),1)

Ja, også er der lige det du har skrevet efter %>Left(Re....
Avatar billede sorenmhansen Nybegynder
30. januar 2002 - 23:19 #8
Mht. Server.HTMLEncode(strText) så viser følgende brugen af funktionen

<%
  Dim strText
  strText = "<b>Hej hej</b>"
  Response.Write(Server.HTMLEncode(strText))
  Response.Write("<br>")
  Response.Write(strText)
%>

Prøv at køre koden og se så HTML koden i din browser (Vis Kilde). Så ser du at < og > er blevet udskiftet med html-koderne for disse tegn. Du kan også se det her på eksperten.dk i dit indlæg herover. Selvom du skrev noget HTML kode i dit indlæg så bliver det vist som almindelig tekst.
Avatar billede hallum Nybegynder
31. januar 2002 - 20:03 #9
sorenmhansen-> Tak for kanon hjælp, jeg har upgraderet points da din hjælp var meget udførlig.
Server.HtmlEncode(strText) hvornår bruges den så? Din funktion virker da lettere ;-)
BTW måske kunne du have lyst til denne opgave http://www.eksperten.dk/spm/140111
Avatar billede sorenmhansen Nybegynder
31. januar 2002 - 22:52 #10
Min funktion MakeSQLString(strText) bruges kun i forbindelse med SQL, når der skal gemmes noget tekst i databasen.
Jeg har skrevet følgende kode så du kan se hvordan jeg klarer problemet med specielle karakterer. Kør koden og se resultatet. Hvis der er noget du ikke forstår i koden så spørg bare.

<%
' Variabler skal erklæres med Dim før de kan bruges
Option Explicit

Select Case Request.QueryString("mode")
    Case "edit"
        Call EditForm()
    Case Else
        Call NewForm()
End Select

' Funktion til formatering af streng til SQL.
' Udskifter enkelt apostrof ' med dobbelt apostrof ''
' og sætter herefter apostroffer rundt om teksten.
Function MakeSQLString(strSQL)
    strSQL=Trim(strSQL)
    strSQL=Replace(strSQL,"'","''")   
    MakeSQLString="'" & strSQL & "'"
End Function

' Funktion til formatering af tekst til brug i <input type=text>-tags.
' Udskifter " med &#34; og sætter " om teksten.
Function MakeTextInputString(strText)
    MakeTextInputString = """" & Replace(strText, """", "&#34;") & """"
End Function

Sub NewForm()
    Response.Write("<html><body>")
    Response.Write("<form action=eks.asp?mode=edit method=post>")
    Response.Write("<input size=50 type=text name=cheat value=" & MakeTextInputString("'*-¨^<b>~""@#!´|,:\;()</b>{$, -- ") & "><br>")
    ' Bemærk de to " inde i strengen. To " i en streng giver en ".
    Response.Write("<input type=submit value="" next >> "">")
    Response.Write("</form>")
    Response.Write("</body></html>")
End Sub

Sub EditForm()
    Dim strInput, strSQL, strHTML, strRaw
    strRaw  = Request.Form("cheat")
    strInput = MakeTextInputString(Request.Form("cheat"))
    strSQL  = "INSERT INTO cheat (snydekode) values(" & MakeSQLString(Request.form("cheat")) & ")"
    strHTML  = Server.HTMLEncode(Request.Form("cheat"))

    Response.Write("<html><body>")
    Response.Write("<form action=eks.asp?mode=edit method=post>")
    Response.Write("I input felt: <input size=50 type=text value=" & strInput & "><br>")
    Response.Write("SQL-sætning: " & Server.HTMLEncode(strSQL) & "<br>")
    Response.Write("Med Server.HTMLEncode: " & strHTML & "<br>")
    Response.Write("Direkte fra Request.Form(""cheat""): " & strRaw & "<br>")
    Response.Write("<input type=submit value="" next >> "">")
    Response.Write("</form>")
    Response.Write("</body></html>")
End Sub
%>

Mht. til opgaven, så må jeg sige nej, jeg har ikke tid, og jeg tror heller ikke du kan/vil betale mig som de gør på mit arbejde, desværre.
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