Avatar billede annettef Nybegynder
15. december 2004 - 10:20 Der er 10 kommentarer og
2 løsninger

Upload af flere foto på en gang - hvordan?

Hej

Jeg har en side som uploader en fil (foto) til en mappe og gemmer stien til filen i min databse. Nu er mit problem at jeg gerne vil have det lavet sådan at jeg kan uploade op til 4 filer af gangen, men jeg kan simpelthen ikke gennemskue hvordan jeg skal gøre det.

Koden til min side hvor man vælger filer
::::Nyt_Billede.asp::::
<% Option Explicit %>

<HTML>
<HEAD>
<TITLE>Tilf&oslash;j foto</TITLE>
<Link Rel="stylesheet" href="datronic.css" Type="text/css" >
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><style type="text/css">
<!--
body {
    margin-left: 4px;
    margin-top: 0px;
}
.style1 {color: #FFFFFF}
-->
</style></HEAD>
<BODY>
<br>
<table width="490" border="0" align="left"><!--Hovedtabel start-->
  <tr>
    <td height="18" valign="middle" bgcolor="#545DB9"><span class="style1">Tilføj foto til nyoprettet vare</span></td>
  </tr>
  <tr><td>&nbsp;</td></tr>
    <tr><td>
<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="UploadScript1.asp?vareID=<%= request.querystring("vareID") %>">
<table border=0 cellspacing=0 cellpadding=0 width="475" align=left><!--Indholdstabelstart-->
<tr>
<td valign="top">Foto 1 (oversigt):</td>
<td><INPUT TYPE=FILE SIZE=40 NAME="navn1"><BR><br><br></td>
</tr>
<tr>
<td valign="top">Foto 2 (vare specifikation):</td>
<td><INPUT TYPE=FILE SIZE=40 NAME="navn2"><BR><br><br></td>
</tr>
<tr>
<td valign="top">Foto 3 (vare specifikation):</td>
<td><INPUT TYPE=FILE SIZE=40 NAME="FILE3"><BR><br><br></td>
</tr>
<tr>
<td valign="top">Foto 4 (tilbud/reklame):</td>
<td><INPUT TYPE=FILE SIZE=40 NAME="FILE4"><BR><br><br></td>
</tr>
<tr><td colspan="2"><INPUT TYPE=SUBMIT VALUE="Tilføj Billede"></td></tr>
</table></FORM>
</td></tr></table>

</BODY>
</HTML>
::::SLUT::::

Min kode til siden som uploader filen
::::uploadscript1.asp::::
<HTML> 
<BODY> 
HEJ

<%
'linie til at tjekke om vareid kommer med over fra siden hvor varen blev oprettet
'response.write request.querystring("vareID")
%>
<% 
dim sti
sti = "/foto/"

dim upload

Set Upload = Server.CreateObject("Persits.Upload.1") 
Upload.OverwriteFiles = False
Upload.SaveVirtual(sti)

for each file in upload.files

navn = sti & File.ExtractFileName

    set cn = server.createobject("adodb.connection")
    cn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("shop1.mdb")

    intVareID = request.querystring("vareID")
   
    sql = "update vare set foto1 ='"& navn &"' WHERE vareid=" & intVareId   
    cn.execute(sql)

    cn.close
    set cn = nothing


next

response.redirect("adm_forside.htm")

%>

</BODY> 
</HTML>

::::SLUT::::

Hvordan får jeg gemt fire forskellige foto (stien til fotoet) i felterne foto1, foto2, foto3 og fotoTilbud i min database på en gang?

Håber der er nogen der kan hjælpe :o)

/Annette
Avatar billede kinderaeg Nybegynder
15. december 2004 - 14:38 #1
set cn = server.createobject("adodb.connection")
  cn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("shop1.mdb")

  intVareID = request.querystring("vareID")

  sql = "update vare set "
  where = "WHERE vareid=" & intVareId
  i = 1
for each file in upload.files
  navn = sti & File.ExtractFileName
  sql = sql & "Foto" & i & "='" & navn & "' "
next

  cn.execute(sql & where)
  cn.close
  set cn = nothing
Avatar billede annettef Nybegynder
15. december 2004 - 15:04 #2
tak for koden - jeg har desværre først tid til at se på det senere

/Annette
Avatar billede annettef Nybegynder
16. december 2004 - 13:57 #3
Kinderaeg

Nu har jeg fået kigget på den kode du skrev til mig (og bøvlet med den i lang tid), men jeg kan simpelthen ikke få det til at fungere.

Jeg vil jo gerne gemme fire forskellige foto i fire felter i min database. De fire felter hedder foto1, foto2, foto3 og fotoTilbud, men filnavnene er forskellige.

Så hvis du har en anden god ide modtages denne gerne :O)

/Annette
Avatar billede kinderaeg Nybegynder
17. december 2004 - 09:29 #4
Nej, det kan jeg godt se, havde ikke lige spottet, at det sidste felt hed tilbud, i stedet for Foto4, det er formegentlig der kæden springer af. Skal nok lige se om jeg ikke kan bikse noget sammen til dig :)
Avatar billede kinderaeg Nybegynder
17. december 2004 - 09:42 #5
Det skal nok nærmere se således ud. Hvis du stadig har problemer, vil jeg foreslå, at du sætter en 'response.write(sql)' ind, lige før 'cn.execute(sql)', så du kan se, om sql-strengen ser forkert ud, og om den overhovedet kan køres i din database.

set cn = server.createobject("adodb.connection")
cn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("shop1.mdb")

intVareID = request.querystring("vareID")

sql = "update vare set "

i = 1

for each file in upload.files

    navn = sti & File.ExtractFileName
   
    select case i
        case 4
            sql = sql & " FotoTilbud="' & navn & "'"
        case else
            sql = sql & " foto" & i ='" & navn & "'"
    end select
next

sql = sql & " WHERE vareid=" & intVareId   

cn.execute(sql)
cn.close
set cn = nothing
Avatar billede annettef Nybegynder
17. december 2004 - 10:09 #6
Nu har jeg prøvet med din nye kode, men får denne fejl:

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

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'foto/icecream_strawberry(3).gif foto1=foto/ladybug(3).gif'.

/datronic/shop_admin_test/test/UploadScript1.asp, line 55

--------

Linie 55 er denne:
53    sql = sql & " WHERE vareid=" & intVareId   
54
55    cn.execute(sql)
56    cn.close
57    set cn = nothing

--------
Min kode ser ud på denne måde
<HTML> 
<BODY> 
HEJ

<%
'linie til at tjekke om vareid kommer med over fra siden hvor varen blev oprettet
'response.write request.querystring("vareID")
%>

<%
dim vsti,sti2,mappe
vsti=request.servervariables("PATH_INFO")
sti2 =server.mappath(vsti)
mappe = left(sti2, len(sti2)-len("uploadscript1.asp") )
mappe= mappe & "/datronic/shop_admin_test/test/foto"
%>

<% 
dim sti
sti = "/datronic/shop_admin_test/test/foto"

dim upload

Set Upload = Server.CreateObject("Persits.Upload.1") 
Upload.OverwriteFiles = False
Upload.SaveVirtual(sti)

'for each file in upload.files

'navn = ("foto/") & File.ExtractFileName

  set cn = server.createobject("adodb.connection")
cn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("shop1.mdb")

intVareID = request.querystring("vareID")

sql = "update vare set "

i = 1

for each file in upload.files

    navn = ("foto/") & File.ExtractFileName
   
    select case i
        case 4
            sql = sql & " FotoTilbud=" & navn
        case else
            sql = sql & " foto" & i &  "="& navn
    end select
next

sql = sql & " WHERE vareid=" & intVareId   

cn.execute(sql)
cn.close
set cn = nothing


'next

response.redirect("opdateret_ok.htm")

%>

</BODY> 
</HTML>

Kan ikke helt gennemskue hvad der går galt!

/Annette
Avatar billede annettef Nybegynder
17. december 2004 - 10:15 #7
Nu har jeg prøvet at skrive min sql ud - det giver følgende:

update vare set foto1=foto/icecream_strawberry(4).gif foto1=foto/ladybug(4).gif WHERE vareid=138

Det er altså fordi de foto der er valgt bliver sat til at blive gemt i det samme felt (foto1) at der kommer en fejl.

/Annette
Avatar billede kinderaeg Nybegynder
17. december 2004 - 11:23 #8
Hovsa, my bad, har glemt et komma mellem udtrykkene, og en optælling af i :(

set cn = server.createobject("adodb.connection")
cn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("shop1.mdb")

intVareID = request.querystring("vareID")

sql = "update vare set "

i = 1

for each file in upload.files

  navn = sti & File.ExtractFileName
   
  select case i
    case 4
      sql = sql & " FotoTilbud="' & navn & "',"
    case else
      sql = sql & " foto" & i ='" & navn & "',"
  end select
  i = i + 1
next

sql = left(sql, len(sql)-1) & " WHERE vareid=" & intVareId

cn.execute(sql)
cn.close
set cn = nothing
Avatar billede annettef Nybegynder
17. december 2004 - 11:35 #9
Igen en fejl

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

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2.

/datronic/shop_admin_test/test/UploadScript1.asp, line 57

Denne fejl fik jeg da jeg kun valgt en fil, men hvis jeg nu vælger 4 filer så står der bare Expected 7 i stedet for Expected 2.

Linie 57 er
54    sql = left(sql, len(sql)-1) & " WHERE vareid=" & intVareId
55   
56    'response.write(sql)
57    cn.execute(sql)
58    cn.close
59    set cn = nothing

Er det muligt at lave det sådan at man kun skal uploade de tre foto (foto1, foto2, foto3) og det sidste (fotoTilbud) er valgfrit?
Avatar billede kinderaeg Nybegynder
17. december 2004 - 11:56 #10
Det nærmer sig jo det pinlige det her. Kode kan jeg i hvert fald ikke skrive for tiden. Vi prøver igen. Det er valgfrit hvor mange billeder man vil indsætte. Det eneste du skal være opmærksom på er, at lige meget om du har valgt ét billede (og kun et) som nr. 4 (tilbud), vil det altid blive lagt ind som nr. 1. Den tæller altså op, så det altid bliver billede 1, derefter 2 osv. der bliver lagt på, selv om du måske måtte have valgt nogle andre i formen på foregående side.

Hermed endnu et forsøg på koden:

for each file in upload.files

  navn = sti & File.ExtractFileName

  select case i
    case 4
      sql = sql & " FotoTilbud='" & navn & "',"
    case else
      sql = sql & " foto" & i & "='" & navn & "',"
  end select
  i = i + 1
next
Avatar billede kinderaeg Nybegynder
17. december 2004 - 12:24 #11
Nå, den fejl havde du vist selv fået rettet op på. Det lader til at være selve sql'en den er gal med. Hvordan ser den ud på nuværende tidspunkt?
Avatar billede annettef Nybegynder
17. december 2004 - 12:37 #12
Super nu fungerer det som det skal - tusind tusind tak for hjælpen :o) Du har lige reddet min dag!

Poster lige koden, hvis andre evt. kan bruge den

Upload af op til 4 foto
::::KODE START::::
<HTML> 
<BODY> 
HEJ

<%
'linie til at tjekke om vareid kommer med over fra siden hvor varen blev oprettet
'response.write request.querystring("vareID")
%>

<%
dim vsti,sti2,mappe
vsti=request.servervariables("PATH_INFO")
sti2 =server.mappath(vsti)
mappe = left(sti2, len(sti2)-len("uploadscript1.asp") )
mappe= mappe & "/datronic/shop_admin_test/test/foto"
%>

<% 
dim sti
sti = "/datronic/shop_admin_test/test/foto"

dim upload

Set Upload = Server.CreateObject("Persits.Upload.1") 
Upload.OverwriteFiles = False
Upload.SaveVirtual(sti)

'for each file in upload.files

'navn = ("foto/") & File.ExtractFileName

set cn = server.createobject("adodb.connection")
cn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("shop1.mdb")

intVareID = request.querystring("vareID")

sql = "update vare set "

i = 1

for each file in upload.files

  navn = ("foto/") & File.ExtractFileName

  select case i
    case 4
      sql = sql & " FotoTilbud='" & navn & "',"
    case else
      sql = sql & " foto" & i & "='" & navn & "',"
  end select
  i = i + 1
next

sql = left(sql, len(sql)-1) & " WHERE vareid=" & intVareId

'response.write(sql)
cn.execute(sql)
cn.close
set cn = nothing


'next

response.redirect("opdateret_ok.htm")

%>

</BODY> 
</HTML>
::::KODE SLUT::::

/Annette
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