Avatar billede Søren Lynggaard Nybegynder
23. september 2013 - 09:46 Der er 3 kommentarer

ASP Script - fejl ved SQL insert

Hej,

Jeg har et ASP scrpt som fejler efter at det er flyttet til et nyt webhotel med en ny ASP Upload komponent.

Får flg fejl ved oprettelse af nye poster i access databaseb:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '(,,,,,'',,'3.jpg');'.

/pages/new_car_save.asp, line 45

Linje 45 er:

SQL ="INSERT INTO biler (maerke, model, aargang, maaned, km, remarks, pris" & vPicName & ") values ("
    SQL = SQL & "(" & vMaerke & "," & vModel & "," & vAargang & "," & vMaaned & "," & vKm & ",'" & vRemarks & "'," & vPris & vPic & ");"
   

Hele scriptet:

<!--#include file="../inc/connect_db_pages.asp" -->
<%
      Dim vUpload, item, value, file
    Set vUpload = Server.CreateObject("Persits.Upload")
    vUpload.Save(server.MapPath("../images/uploads"))

    Dim vMaerke, vModel, vAargang, vMaaned, vKm, vRemarks, vBillede, vPris
   
    For each item In vUpload.form
        for each value in vUpload.form
            Select case ucase(item)
                Case "MAERKE"
                    vMaerke="'" & value & "'"
                Case "MODEL"
                    vmodel="'" & value & "'"
                Case "AARGANG"
                    vAargang=value
                Case "MAANED"
                    vMaaned=value
                Case "KM"
                    vKm=value
                Case "REMARKS"
                    vRemarks=value
                Case "PRIS"
                    vPris=value
                Case else
               
            End Select
        Next
    Next
    vBillede=vUpload.files(1).Filename
   
        dim vPic, vPicName
    if vBillede="" then
        vPic=""
        vPicName=""
    else
        vPic=",'" & vBillede & "'"
        vPicName=",billede"
    end if
   
    SQL ="INSERT INTO biler (maerke, model, aargang, maaned, km, remarks, pris" & vPicName & ") values ("
    SQL = SQL & "(" & vMaerke & "," & vModel & "," & vAargang & "," & vMaaned & "," & vKm & ",'" & vRemarks & "'," & vPris & vPic & ");"
   
    Conn.Execute(SQL)

    Conn.Close
    Set Conn = Nothing
    Set vUpload = Nothing
    Response.Redirect "caradmin.asp"
%>

Er der nogen der kan se hvad fejlen er? PÅ forhånd tak.,,
Avatar billede softspot Forsker
23. september 2013 - 11:31 #1
Umiddelbart virker det som om der mangler værdier i dine formularfelter. Det ser ud til at alt andet end filnavnet ikke indeholder nogen værdier.

Måden du hiver data ud af formularfelterne ser i øvrigt lidt omstændig ud. Hvorfor henter du ikke bare værdien direkte, f.eks. således:

vMaerke = vUpload.form("maerke") & ""


i stedet for at gør det i en løkke med en select case?

Mht. til måden du bygger din SQL-sætning op, bør du kraftigt overveje, at benytte parameteriserede database-queries (via ADO Command-objektet) i stedet for strengsammensætning. Din kode er pivåben for SQL-injections som den ser ud nu (se evt. min artikel her på sitet for en intro til dette www.eksperten.dk/guide/1250). Der findes også andre bud på dette, herunder keysersoze's artikel på webdev.dk (som jeg ikke lige har et direkte link til pt.).
Avatar billede softspot Forsker
23. september 2013 - 11:42 #2
Bare for en god ordens skyld, ligger Keysersoze's artikel på adressen www.web-dev.dk/post/2008/07/14/SQL-injections-mere-end-bare-et-pling.aspx
Avatar billede softspot Forsker
23. september 2013 - 12:02 #3
Jeg kommer lige til at se din løkke med select-case har en indlejret løkke, som kører omkring den samme liste (hvilket jeg ikke forstår formålet med?). Du skal nok fjerne den indlejrede løkke.

Så hvis det er tvingende nødvendigt for dig, at bibeholde din select-case, skal du desuden nok hente værdien af feltet i Value-egenskaben af form-elementet, item, dvs. item.Value (se evt. eksemplet fra manualen til ASPUpload: www.aspupload.com/codesample.html).

For each item In vUpload.form
  Select case ucase(item)
      Case "MAERKE"
        vMaerke = "'" & item.Value & "'"
      ' ligeledes med de øvrige felter...
  End Select
Next
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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