Avatar billede hundevennen Nybegynder
29. september 2005 - 18:42 Der er 26 kommentarer og
1 løsning

lave selectbox ud fra filnavne i mappe?

jeg vil gerne lave en dropdown eller selectbox på en opret side
hvor bl.a en af felterne skal indeholde en mulighed for at vælge
mellem de fotos der ligger i en fotomappe, - altså noget med
at gå ind i mappen fotos se hvad filnavne der er der og liste dem i en selectbox???
Avatar billede hundevennen Nybegynder
29. september 2005 - 18:55 #1
jeg har fundet dette og det kan måske flettes ind i en selectbox
<%
Function ShowFolderList()
folderspec = server.mappath(".")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folderspec)
Set foldercollection = folder.Files
For Each file in foldercollection
tmp = tmp & "<a href='" & file.name & "'>" & file.name & "</A><BR>"
Next
ShowFolderList = tmp
End Function
response.write showfolderlist()
%>
Avatar billede softspot Forsker
30. september 2005 - 00:17 #2
<%
Function ShowFolderList(selectName)
  folderspec = server.mappath(".")
  Set fso = Server.CreateObject("Scripting.FileSystemObject")
  Set folder = fso.GetFolder(folderspec)
  Set foldercollection = folder.Files
  tmp = "<select name=""" & selectName & """>" & vbCrLf
  For Each file in foldercollection
    tmp = tmp & "  <option value=""" & file.name & """>" & file.name & "</option>" & vbCrLf
  Next
  tmp = tmp & "</select>"
  ShowFolderList = tmp
End Function
response.write showfolderlist("filnavne")
%>
Avatar billede hundevennen Nybegynder
01. oktober 2005 - 13:29 #3
softspot - sådan :-))
ka man ikke lave det hele om til en funktion igen, så jeg f.eks i den
redigerside jeg skal lave bare kalder en sub  der f.eks hedder
billede.
response.write "<tr><td><strong>billede:</strong></td><td>"
    billede()
    response.write"</td></tr>"
Avatar billede hundevennen Nybegynder
01. oktober 2005 - 13:29 #4
jeg mener lave det til en sub
Avatar billede softspot Forsker
01. oktober 2005 - 14:38 #5
Jo, du kan da bare flytte response.write ind i funktionen i stedet for:

<%
Sub ShowFolderList(selectName)
  folderspec = server.mappath(".")
  Set fso = Server.CreateObject("Scripting.FileSystemObject")
  Set folder = fso.GetFolder(folderspec)
  Set foldercollection = folder.Files
  response.write  "<select name=""" & selectName & """>" & vbCrLf
  For Each file in foldercollection
    response.write "  <option value=""" & file.name & """>" & file.name & "</option>" & vbCrLf
  Next
  response.write "</select>"
End Sub
%>

Jeg har ladet selectName-parameteren blive, da den er god at have hvis du skal poste din form til serveren og hente værdien ud af feltet (det er lidt lettere at identificere den valgte værdi, hvis kontrollen har et navn :)).

Du kan naturligvis også bare hardcode navnet inde i din sub, men det gør den jo bare mindre genbrugelig...

Faktisk ville jeg måske endda lægge endnu en parameter på, så du kunne specificere en folder hvorfra filer skulle læses... :)
Avatar billede hundevennen Nybegynder
01. oktober 2005 - 15:15 #6
softspot tak for hjælpen - mangler et svar :-))
Avatar billede softspot Forsker
01. oktober 2005 - 15:22 #7
Velbekomme :)
Avatar billede hundevennen Nybegynder
02. oktober 2005 - 09:43 #8
jeg kn jo nu se at det er en lidt dum måde at lave sådan en retteside på denne måde, da selectboksene jo altid står med den samme fil og ikke den der står i databasen, så man bliver nødt til hver gang man skal rette i siden, at vælge billede igen,- så kan man ikke hente fillisten og importere den til en tabel istedet.
Avatar billede hundevennen Nybegynder
02. oktober 2005 - 09:57 #9
Det var måske smartere, når man uploader billederne, at der så blev skrevet et filnavn i en tabel i databasen?
Avatar billede softspot Forsker
02. oktober 2005 - 12:34 #10
At lægge informationerne i en database giver i det mindste muligheden for at knytte metadata til den enkelte fil og det giver måske mere mening at have f.eks. en beskrivelse knyttet til billedet, hvis altså det er billedet den beskriver... :)

Hvornår du importerer afhænger af hvad du synes bedst om. Jeg ville dog anbefale at importere til databasen i det øjeblik der uploades, så skal du ikke tage stilling til om der skal importeres eller ej, når data skal bruges. Desuden sker det nok oftere at filerne skal læses end at de skal importeres, så derfor giver det også mening at man ikke skal lave alt for meget arbejde omkring læsningen.
Avatar billede hundevennen Nybegynder
02. oktober 2005 - 12:59 #11
har du et uploadscripts der dels sender filerne man vælger up i et bibliotek, samt skriver filnavnet i en tabel??
Avatar billede hundevennen Nybegynder
02. oktober 2005 - 13:00 #12
jeg skal gerne lave et nyt spm med point til det
Avatar billede hundevennen Nybegynder
02. oktober 2005 - 13:00 #13
jeg bruger dette til filupload:
<%    Option Explicit %>
<%    Response.Expires    = 0 %>
<body background="lysbaggrund.jpg">
<%
    Dim UPLOAD_PATH


        UPLOAD_PATH    = Server.MapPath("fotos")

    Dim g_oFso, g_oFolder, g_oFile
        Set g_oFso    = Server.CreateObject("Scripting.FileSystemObject")
        Set g_oFolder    = g_oFso.getFolder(UPLOAD_PATH)

    If (Request.ServerVariables("REQUEST_METHOD") = "POST") Then
        Dim g_oUpload
            Set g_oUpload    = get_upload_files()

        Dim fpos, fcontent
            fcontent    = g_oUpload("upload").Item("content")
        Set g_oFile    = g_oFso.CreateTextFile(UPLOAD_PATH & "\" & extract_filename(g_oUpload("upload").Item("filename")))
        For fpos = 1 to LenB(fcontent)
            g_oFile.Write chr(AscB(MidB(fcontent, fpos, 1)))
        Next
        g_oFile.Close: Set g_oFile    = Nothing

        Response.Redirect Request.ServerVariables("SCRIPT_NAME")
    End If

    Response.Write "<html><body><table>"
    response.write "<tr><td>Billedupload til fotomappen</td></tr>"
    Response.Write "<tr><td><hr></td></tr>"
    For Each g_oFile In g_oFolder.Files
        Response.Write "<tr><td><a href=""fotos/" & g_oFile.Name & """>" & g_oFile.name & "</a></td></tr>"
    Next
    Response.Write "<tr><td><hr></td></tr>"
    Response.Write "<tr><td align=""right""><form name=""frmUpload"" method=""post"" enctype=""multipart/form-data"" action=""" & Request.ServerVariables("SCRIPT_NAME") & """>"
    Response.Write "<input type=""file"" name=""upload""> &nbsp; <input type=""submit"" value=""upload""></td></tr>"
    Response.Write "</table></body></html>"

%>
<%
    Function get_upload_files()
        Dim    upload_object, request_binaries
        Dim position_start, position_end
        Dim boundary, boundary_pos

        Set upload_object    = Server.CreateObject("Scripting.Dictionary")
        request_binaries    = Request.BinaryRead(Request.TotalBytes)
        position_start        = 1
        position_end        = InstrB(position_start, request_binaries, get_byte_string(chr(13)))
        boundary            = MidB(request_binaries, position_start, (position_end - position_start))
        boundary_pos        = InstrB(1, request_binaries, boundary)

        Do Until (boundary_pos = InstrB(request_binaries, boundary & get_byte_string("--")))
            If Not(Response.IsClientConnected) Then Response.End

            Dim name, pos_file

            position_start    = (InstrB(InstrB(boundary_pos, request_binaries, get_byte_string("Content-Disposition")), request_binaries, get_byte_string("name=")) + 6)
            position_end    = InstrB(position_start, request_binaries, get_byte_string(chr(34)))

            name            = get_string(MidB(request_binaries, position_start, (position_end - position_start)))
            pos_file        = InstrB(boundary_pos, request_binaries, get_byte_string("filename="))

            If  ((pos_file <> 0) AND (pos_file < InstrB(position_end, request_binaries, boundary))) Then
                upload_object.Add name, Server.CreateObject("Scripting.Dictionary")

                position_start    = (pos_file + 10)
                position_end    = InstrB(position_start, request_binaries, get_byte_string(chr(34)))
                upload_object.item(name).Add "filename", get_string(MidB(request_binaries, position_start, (position_end - position_start)))

                position_start    = (InstrB(position_end, request_binaries, get_byte_string("Content-Type:")) + 14)
                position_end    = InstrB(position_start, request_binaries, get_byte_string(chr(13)))
                upload_object.item(name).Add "content-type", get_string(MidB(request_binaries, position_start, (position_end - position_start)))

                position_start    = (position_end + 4)
                position_end    = InstrB(position_start, request_binaries, boundary) - 2
                upload_object.item(name).Add "size", ((position_end - position_start))
                upload_object.item(name).Add "content", MidB(request_binaries, position_start, (position_end - position_start))
            End If
            boundary_pos    = InstrB(boundary_pos + LenB(boundary), request_binaries, boundary)
        Loop

        Set get_upload_files = upload_object
    End Function

    Function get_byte_string(str)
        Dim cnt
        For cnt = 1 to Len(str)
            get_byte_string    = get_byte_string & chrB(AscB(Mid(str, cnt, 1)))
        Next
    End Function

    Function get_string(str)
        Dim cnt
        For cnt = 1 to LenB(str)
            get_string    = get_string & chr(AscB(MidB(str, cnt, 1)))
        Next
    End Function

    Function extract_filename(filename)
        extract_filename    = Right(filename, Len(filename) - InStrRev(filename, "\", -1, 1))
    End Function
%>
Avatar billede softspot Forsker
02. oktober 2005 - 13:23 #14
Umiddelbart skal du bare lave en tabel i databasen hvor du kan gemme informationer om den fil du lige har uploadet. Det kunne f.eks. være et felt der hed virtualPathAndFilename, sammen med et id og evt. en beskrivelse.

Denne tabel skulle så opdateres i forbindelse med at filen blev uploadet (lige efter denne linie: g_oFile.Close: Set g_oFile    = Nothing).

Du kunne benytte en SQL der så nogenlunde således ud:

SQL = "INSERT INTO filtabel(virtualPathAndFilename,Description) " & _
  "VALUES('fotos/" & extract_filename(g_oUpload("upload").Item("filename")) & "'," & _
  "'" & strDescription & "')"

Denne kunne så udføres således (din connection til database er defineret og åbnet i den variabel der hedder objConn):

objConn.Execute SQL

Du vil derefter kunne hente filerne fra databasen med denne SQL:

SQL = "SELECT * FROM filtabel"

set rsFiles = objConn.Execute(SQL)
ShowFolderList rsFiles,"filer"


Sub-rutinen ShowFolderList er så ændret til dette:


Sub ShowFolderList(rs, selectName)
  response.write  "<select name=""" & selectName & """>" & vbCrLf
  do while not rs.eof
    response.write "  <option value=""" & rs("id") & """>" & rs("virtualPathAndFilename") & "</option>" & vbCrLf
    rs.movenext
  loop
  response.write "</select>"
End Sub
Avatar billede hundevennen Nybegynder
02. oktober 2005 - 13:59 #15
har lagt denne
openconnection
        strtext = "INSERT INTO foto(virtualPathAndFilename,Description) " & _
  "VALUES('fotos/" & extract_filename(g_oUpload("upload").Item("filename")) & "'," & _
  "'" & strDescription & "')"
getdata strtext
       
        closeconnection
ind hvor du siger men får en fejl typerne stemmer ikke overens - har en tabel der hedder foto og et felt der hedder foto - jeg har ikke brug for beskrivelse - kun filnavn
Avatar billede softspot Forsker
02. oktober 2005 - 14:17 #16
Så skal først og fremmest fjerne strDescription fra SQL-sætningen :)

strtext = "INSERT INTO foto(virtualPathAndFilename) " & _
  "VALUES('fotos/" & extract_filename(g_oUpload("upload").Item("filename")) & "')"
Avatar billede softspot Forsker
02. oktober 2005 - 14:18 #17
...og dernæst skal du ændre navnet på feltet i SQL-sætningen...

strtext = "INSERT INTO foto(foto) " & _
  "VALUES('fotos/" & extract_filename(g_oUpload("upload").Item("filename")) & "')"
Avatar billede hundevennen Nybegynder
02. oktober 2005 - 14:29 #18
får stadig fejl typerne stemmer ikke overens 'openconnection'
Avatar billede softspot Forsker
02. oktober 2005 - 14:32 #19
hvordan ser din openconnection ud?
Avatar billede softspot Forsker
02. oktober 2005 - 14:34 #20
Det er sikkert noget med placeringen af din database, eller nogle af parametrene i connectionstring. Er det en connectionstring du har brugt til andre ting i systemet, hvor den fungerer...?
Avatar billede hundevennen Nybegynder
02. oktober 2005 - 14:52 #21
SUB OpenConnection
    DIM uid, pass
    Set ADOConn = Server.CreateObject("ADODB.Connection")
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;" &_
                "Data Source="  & server.mappath("dragor.mdb") &_
                "; Persist Security Info=False"
      ADOConn.Open strCon

  END SUB
Avatar billede hundevennen Nybegynder
02. oktober 2005 - 14:53 #22
og den virker til de andre tabeller jeg bruger
Avatar billede softspot Forsker
02. oktober 2005 - 17:14 #23
Prøv evt. at ændre dit felt til at hedde noget andet end tabellen (altså så de ikke begge hedder foto). Jeg kunne forestille mig at databasen bliver forvirret over at de hedder det samme.
Avatar billede hundevennen Nybegynder
02. oktober 2005 - 20:17 #24
har ændre til pict - men stadig samme fejl
Avatar billede softspot Forsker
02. oktober 2005 - 20:40 #25
Kan du vise mig lidt mere kode? Jeg synes det er svært at få overblik af det jeg har set indtil nu...
Avatar billede hundevennen Nybegynder
05. oktober 2005 - 17:41 #26
<%    Response.Expires    = 0 %>
<!--# include file="utils.asp"-->
<body background="lysbaggrund.jpg">
<%
    Dim UPLOAD_PATH


        UPLOAD_PATH    = Server.MapPath("fotos")

    Dim g_oFso, g_oFolder, g_oFile
        Set g_oFso    = Server.CreateObject("Scripting.FileSystemObject")
        Set g_oFolder    = g_oFso.getFolder(UPLOAD_PATH)

    If (Request.ServerVariables("REQUEST_METHOD") = "POST") Then
        Dim g_oUpload
            Set g_oUpload    = get_upload_files()

        Dim fpos, fcontent
            fcontent    = g_oUpload("upload").Item("content")
        Set g_oFile    = g_oFso.CreateTextFile(UPLOAD_PATH & "\" & extract_filename(g_oUpload("upload").Item("filename")))
        For fpos = 1 to LenB(fcontent)
            g_oFile.Write chr(AscB(MidB(fcontent, fpos, 1)))
        Next
        g_oFile.Close: Set g_oFile    = Nothing
       
        openconnection
       
        strtext = "INSERT INTO foto(pict) " & _
  "VALUES('fotos/" & extract_filename(g_oUpload("upload").Item("filename")) & "')"
writedata strtext
       
        closeconnection

        Response.Redirect Request.ServerVariables("SCRIPT_NAME")
    End If

    Response.Write "<html><body><table>"
    response.write "<tr><td>Billedupload til fotomappen - Husk at billederne skal ned i ca. 20-30kb</td></tr>"
    Response.Write "<tr><td><hr></td></tr>"
    For Each g_oFile In g_oFolder.Files
        Response.Write "<tr><td><a href=""fotos/" & g_oFile.Name & """>" & g_oFile.name & "</a></td></tr>"
    Next
    Response.Write "<tr><td><hr></td></tr>"
    Response.Write "<tr><td align=""right""><form name=""frmUpload"" method=""post"" enctype=""multipart/form-data"" action=""" & Request.ServerVariables("SCRIPT_NAME") & """>"
    Response.Write "<input type=""file"" name=""upload""> &nbsp; <input type=""submit"" value=""upload""></td></tr>"
    Response.Write "</table></body></html>"

%>
<%
    Function get_upload_files()
        Dim    upload_object, request_binaries
        Dim position_start, position_end
        Dim boundary, boundary_pos

        Set upload_object    = Server.CreateObject("Scripting.Dictionary")
        request_binaries    = Request.BinaryRead(Request.TotalBytes)
        position_start        = 1
        position_end        = InstrB(position_start, request_binaries, get_byte_string(chr(13)))
        boundary            = MidB(request_binaries, position_start, (position_end - position_start))
        boundary_pos        = InstrB(1, request_binaries, boundary)

        Do Until (boundary_pos = InstrB(request_binaries, boundary & get_byte_string("--")))
            If Not(Response.IsClientConnected) Then Response.End

            Dim name, pos_file

            position_start    = (InstrB(InstrB(boundary_pos, request_binaries, get_byte_string("Content-Disposition")), request_binaries, get_byte_string("name=")) + 6)
            position_end    = InstrB(position_start, request_binaries, get_byte_string(chr(34)))

            name            = get_string(MidB(request_binaries, position_start, (position_end - position_start)))
            pos_file        = InstrB(boundary_pos, request_binaries, get_byte_string("filename="))

            If  ((pos_file <> 0) AND (pos_file < InstrB(position_end, request_binaries, boundary))) Then
                upload_object.Add name, Server.CreateObject("Scripting.Dictionary")

                position_start    = (pos_file + 10)
                position_end    = InstrB(position_start, request_binaries, get_byte_string(chr(34)))
                upload_object.item(name).Add "filename", get_string(MidB(request_binaries, position_start, (position_end - position_start)))

                position_start    = (InstrB(position_end, request_binaries, get_byte_string("Content-Type:")) + 14)
                position_end    = InstrB(position_start, request_binaries, get_byte_string(chr(13)))
                upload_object.item(name).Add "content-type", get_string(MidB(request_binaries, position_start, (position_end - position_start)))

                position_start    = (position_end + 4)
                position_end    = InstrB(position_start, request_binaries, boundary) - 2
                upload_object.item(name).Add "size", ((position_end - position_start))
                upload_object.item(name).Add "content", MidB(request_binaries, position_start, (position_end - position_start))
            End If
            boundary_pos    = InstrB(boundary_pos + LenB(boundary), request_binaries, boundary)
        Loop

        Set get_upload_files = upload_object
    End Function

    Function get_byte_string(str)
        Dim cnt
        For cnt = 1 to Len(str)
            get_byte_string    = get_byte_string & chrB(AscB(Mid(str, cnt, 1)))
        Next
    End Function

    Function get_string(str)
        Dim cnt
        For cnt = 1 to LenB(str)
            get_string    = get_string & chr(AscB(MidB(str, cnt, 1)))
        Next
    End Function

    Function extract_filename(filename)
        extract_filename    = Right(filename, Len(filename) - InStrRev(filename, "\", -1, 1))
    End Function
%>
Avatar billede softspot Forsker
05. oktober 2005 - 18:46 #27
Det lyder som om du på den pågældende side mangler af definere den variabel der hedder ADOConn som bliver initieret i funktionen openconnection. Umiddelbart synes jeg jo fejlen sker inden den SQL-sætning bliver udført, så jeg tror det har noget med opsætningen af variable på siden at gøre, mere end det har noget med det felt i databasen... men nu kan du jo prøve at udkommentere de linier hvor strtext bliver initieret og hvor writedata bliver kaldt og fortælle mig om det ændrer noget på den fejl du får...
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