29. januar 2002 - 22:05Der 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)
Der bliver investeret massivt i AI. Teknologien er mere tilgængelig end nogensinde, og ambitionerne er høje. Alligevel oplever mange virksomheder, at resultaterne udebliver.
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?
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:
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
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.
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!
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
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
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.
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
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 " og sætter " om teksten. Function MakeTextInputString(strText) MakeTextInputString = """" & Replace(strText, """", """) & """" 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"))
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.
Synes godt om
Ny brugerNybegynder
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.