Avatar billede webbe Nybegynder
25. oktober 2006 - 10:18 Der 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.

Håber der er nogen der kan hjælpe mig.
Avatar billede tjaz Nybegynder
25. oktober 2006 - 17:21 #1
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
Avatar billede tjaz Nybegynder
25. oktober 2006 - 17:22 #2
hov, der skulle self have stået data og ikke date ;), men think u get the point, hehe...
Avatar billede webbe Nybegynder
26. oktober 2006 - 08:07 #3
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...
Avatar billede tjaz Nybegynder
26. oktober 2006 - 13:04 #4
Du må kunne nøjes med at ændre din nuværende kode med:

<input type="hidden" name="bid<%=i%>" value="<%=tab(i,1)%>" />
til:
<input type="hidden" name="bid" value="<%=tab(i,1)%>" />

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)

Next
%>
Avatar billede webbe Nybegynder
26. oktober 2006 - 13:51 #5
Har nu følgende i min update:

'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...
Avatar billede webbe Nybegynder
26. oktober 2006 - 13:52 #6
den udskriver godt HEJ i toppen, men hvis jeg ligger det ind i min for each-løkke, udskriver den det ikke...
Avatar billede tjaz Nybegynder
26. oktober 2006 - 14:07 #7
får du nogen fejl på løkken?
Avatar billede webbe Nybegynder
26. oktober 2006 - 14:27 #8
Nej - slet ikke....jeg kommer slet ikke ind i løkken
Avatar billede tjaz Nybegynder
26. oktober 2006 - 14:45 #9
prøv og skift navnet på din:
<input type="file" name="pict<%=i%>" id="pict_felt" />

til
<input type="file" name="file<%=i%>" />
Avatar billede webbe Nybegynder
26. oktober 2006 - 14:55 #10
Kommer stadig ikke ind i min for each løkke
Avatar billede tjaz Nybegynder
26. oktober 2006 - 17:19 #11
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)
Avatar billede webbe Nybegynder
26. oktober 2006 - 19:54 #12
Stadig uden held - her er min html (via view source):

       
            <table border="0" cellpadding="0" cellspacing="3" width="">
                <form method="post" enctype="multipart/form-data" action="pictup.asp">
               
                <tr>
                    <td>
                        <img src="../images/uploaded/FreshMorning.jpg" width="25" height="25" id="loadimg" />Billede 1: <input type="file" name="file1" />
                        <input type="hidden" name="bid" value="22" />
                    </td>
                </tr>

               
                <tr>
                    <td>
                        <img src="../images/uploaded/Ambition.jpg" width="25" height="25" id="loadimg" />Billede 2: <input type="file" name="file2" />
                        <input type="hidden" name="bid" value="21" />
                    </td>
                </tr>
               
                <tr>
                    <td>

                        <input type="submit" value="Opdater" />
                    </td>
                </tr>
                </form>
            </table>
Avatar billede tjaz Nybegynder
27. oktober 2006 - 00:11 #13
hmm, forstår jeg sq ik helt... kan du udskrive upload.form("bid") på samme måde som du udskriver "hej"?
Avatar billede webbe Nybegynder
15. februar 2007 - 08:31 #14
lukker spørgsmålet, da jeg fandt en anden løsning - men giver dig point som tak for indsatsen
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