25. oktober 2006 - 10:18Der er
13 kommentarer og 1 løsning
For Each løkke ved update af billeder
Hejsa eksperter
Jeg er ved at lave et opdateringsmodul til et billedgalleri.
Jeg kender på forhånd ikke antallet af billeder, men udskriver antallet af felter ved hjælp af at tælle antallet op ved en Count funktion og derefter ved hjælp af en for-løkke. Dette har jeg helt styr på og den del virker også.
Nu kommer jeg så til det der er tricky for mig - nemlig at få opdateret det antal felter som der er tale om i en eller anden form for for-løkke.
Jeg synes at kunne huske noget med "for each request", men kan ikke komme i tanke om hvordan det er jeg skal bruge det.
tror det ville gøre det lidt nemmere at hjælpe dig hvis i havde lidt kode, men i stedet for at gøre brug af en count, hvorfor laver du dem så ikke til et array som indeholder f.eks. id på billedet som ligger i databasen, så kan du opdatere billederne ved hjælp af din for, f.eks.:
'Et array som du self skal lave dynamisk billeder = "1,4,5,6,8,9," arrBilleder = Split(billeder, ",")
For t = LBound(arrBilleder) to UBound(arrBilleder) - 1 strUpdate = "UPDATE billeder SET date = 'noget data' WHERE id = "& arrBilleder(t) &"" Conn.Execute(strUpdate) Next
Her udskriver jeg de poster der er fundet i min database:
<%sqlB = "SELECT * FROM Billeder WHERE BRID="&bid&" ORDER BY BID DESC" set rsB = Conn.Execute(sqlB) dim tab(200,200) do while rsB.eof = False i = i + 1 tab(i,1) = rsB("BID") tab(i,2) = rsB("BNavn") rsB.movenext loop
sqlCountB = "SELECT COUNT(*) AS Antal FROM Billeder WHERE BRID="&bid set rsCountB = Conn.Execute(sqlCountB) %> <table border="0" cellpadding="0" cellspacing="3" width=""> <form method="post" action="default.asp?side=Rediger&action=Billeder" name="editbilleder" enctype="multipart/form-data"> <%for i = 1 to rsCountB("Antal")%> <tr> <td> <img src="../images/uploaded/<%=tab(i,2)%>" width="25" height="25" id="loadimg" />Billede <%=i%>: <input type="file" name="pict<%=i%>" id="pict_felt" /> <input type="hidden" name="bid<%=i%>" value="<%=tab(i,1)%>" /> </td> </tr> <%next%> <tr> <td> <input type="submit" name="ok" value="Opdater" id="knap" /> </td> </tr> </form> </table>
Og det er faktisk så langt jeg er kommet - kan godt være det er lettere at ligge det i et array, men hvordan gøres det? Er ikke så velbevandret ud i arrays...
Hvor du så i din update af billeder laver et loop (som du gør når du uploader dem første gang), med noget i den stil her:
<% 'Den komplete sti for hvor billederne gemmes på serveren f.eks.: path = "d:\minhjemmeside.dk\billeder\"
'Først laver splitter vi lige vores array med billede id'erne arrPicture = Split(upload.form("bid"), ",")
'Så laver vi et gennemløb af billederne som skal opdateres For Each File in Upload.Files i = i + 1 'Du kan evt lave en funktion her som finder navnet på det gamle billede og sletter det fra serveren før du uploader det nye strBilledenavn = "SELECT * FROM billeder WHERE id = "& arrPicture(i) &"" set billedenavn = Conn.Execute(strBilledenavn)
'Her indsætter du koden som sletter det gamle billede 'Kan ikke huske den, men det er vidst noget i stil med: Upload.Delete path & billedenavn("bnavn") på
'Her er så koden der uploader det nye billede Upload.Save path
'Her kommer så koden til at updatere databasen med det nye filnavn strUpdate = "UPDATE billeder SET bnavn = '"& File.Filename &"' WHERE id = "& arrPicture(i) &" Conn.Execute(strUpdate)
'uploader nye billeder, danner thumbnails og sletter eventuelle gamle billeder Set Upload = Server.CreateObject("Persits.Upload") Upload.OverWriteFiles = False path = Server.MapPath("../images/uploaded") & "\"
arrPicture = Split(upload.form("bid"), ",")
response.write("HEJ")
For Each File in Upload.Files i = i + 1 sqlT = "SELECT * FROM billeder WHERE id = "& arrPicture(i) &"" set rsT = Conn.Execute(sqlT)
'starter slettefunktion af billedet på serveren set fso = Server.CreateObject("Scripting.FileSystemObject") sti = Request.ServerVariables("APPL_PHYSICAL_PATH")&"images\uploaded\"
'sletter gammelt billede if rsT("BNavn") <> "" and File.Filename <> "" then Upload.Delete path & rsT("BNavn") end if
Upload.Save path
strUpdate = "UPDATE billeder SET bnavn = '"& File.Filename &"' WHERE id = "& arrPicture(i) Conn.Execute(strUpdate) next
men der sker bare ikke noget og den melder heller ikke fejl...
prøv og skift: <form method="post" action="default.asp?side=Rediger&action=Billeder" name="editbilleder" enctype="multipart/form-data">
til <form method="post" enctype="multipart/form-data" action="default.asp?side=Rediger&action=Billeder">
og <input type="submit" name="ok" value="Opdater" id="knap" />
til: <input type="submit" value="Opdater" />
Burde godt nok ikke have noget at sige, men så er der samme opsætning som standard upload script... når du har gjort det kan du så ikke c/p din html herind på siden hvis det ikke virker (det er skal være efter siden er loadet så jeg evt kan tjekke output på siden med billederne som du retter)
lukker spørgsmålet, da jeg fandt en anden løsning - men giver dig point som tak for indsatsen
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.