Avatar billede trillo Nybegynder
22. juni 2007 - 20:57 Der er 3 kommentarer og
1 løsning

Fejl i INSERT string

Hej eksperter,

jeg har grublet længe over denne kode, kan simplet hen ikke finde fejlen så jeg håber i kan finde den

her er koden:

Først er der et dokument med formen

<body>
<table width="400">
<tr>
<td><form method="post" action="Admin_AddNewsInsertDB.asp">
<table>
<tr>
<td width="20"><input type="radio" value="News" name="Type"></td><td width="50">News</td>
<td width="20"><input type="radio" value="Info" name="Type"></td><td width="50">Info</td>
<td width="20"><input type="radio" value="Announcement" name="Type"></td><td width="90">Announcement</td>
<td width="150"></td>
</tr>
<tr> 
<td colspan="7"><input size="65" type="text" name="Headline" value="Headline"></td>
</tr>
<tr>
<td colspan="7"><textarea cols="65" rows="10" type="text" name="Content"></textarea></td>
</tr>
<tr> 
<td colspan="7" width="400">
</td>
</tr>
<tr>
<td colspan="4"><input type="submit" value="Submit" name="Submit"><input type="reset" name="reset" value="Cancel"></td>
</tr>
<tr>
<td colspan="4">
<%
Response.Write(Request.QueryString("msg"))
%>
</td>
</tr>
</table>
</form>
</td>
</tr>
</table>
</body>




og dernæst den asp fil som indsætter i Databasen:


Fejl koden:

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

[Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement.

Admin_AddNewsInsertDB.asp, line 20

Linje 20 er linje med Conn.Execute

<body>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
conn.connectionstring = "DRIVER={Microsoft Access Driver (*.mdb)};" & _
            "DBQ=" & Server.MapPath("DB/database.mdb") & ""

Conn.Open connectionstring

set rs = Conn.Execute("SELECT Username FROM Users Where ID= " & Session("ID") & "")

Conn.Execute("Insert into News (Type,Headline,Content,Author,Time,Date) values('" & Request.Form("Type") & "','" & Request.Form("Headline") & "','" & Request.Form("Content") & "','" & rs("Username") & "','" & FormatDateTime(Now, vbShortDate) & "','" & FormatDateTime(Now, vbShortTime) & "')")

strLink = "Admin_AddNews.asp?msg=News%20Added"
               
Response.Redirect(strLink)

Conn.Close
Set Conn = Nothing
%>
</body>


ville været meget glad hvis i kan finde svaret.
Avatar billede ellebaek Nybegynder
22. juni 2007 - 21:18 #1
hmm...

umiddelbart er der vidst flere problemer i din INSERT...

Conn.Execute("Insert into News ([Type],[Headline],[Content],[Author],[Date],[Time]) values('" & Request.Form("Type") & "','" & Request.Form("Headline") & "','" & Request.Form("Content") & "','" & rs("Username") & "','" & FormatDateTime(Now, vbShortDate) & "','" & FormatDateTime(Now, vbShortTime) & "')")

Vil mene den skal se ud sådan nogenlunde som det her...
type, date og time er reserverede ord i access, altså de benyttes til fx. funktionsnavne. Derfor har jeg sat en [] omkring dem, på den måde undgåes denne fejl... så havde du byttet om på time og date felterne (du satte datoen ind i time, og klokken ind i date).
Hvis ovenstående ikke virker, så kan det være du skal sætte en # i stedet for ' omkring værdierne i din values...

Håber det virker for dig ;-)
Avatar billede erikjacobsen Ekspert
22. juni 2007 - 21:39 #2
Og så skal du ikke bruge en Request.Form("Type") (osv) ukritisk i en SQL-sætning. Læs på nettet om SQL-injektion, inden din side kan ses på nettet!
Avatar billede trillo Nybegynder
22. juni 2007 - 22:08 #3
1: tusinde tak, det virker nu :)
bare kom med et svar og så får du dine points :)

2: Jeg har læst lidt om det der SQL-injektion men så vidt jeg kan se burde min

<%
Private Function SQLPrep(tVar)
    tVar = Replace(tVar, "\", "\\")
    tVar = Replace(tVar, "'", "\'")
   
    tVar = Trim(tVar)
   
    SQLPrep = tVar
End Function
%>

Forhindre det?

eller er det bare mig der er helt galt på den?
Avatar billede trillo Nybegynder
25. marts 2008 - 22:42 #4
wee
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

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