29. september 2005 - 18:42Der 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???
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() %>
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>"
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... :)
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.
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.
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""> <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
If ((pos_file <> 0) AND (pos_file < InstrB(position_end, request_binaries, boundary))) Then upload_object.Add name, Server.CreateObject("Scripting.Dictionary")
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:
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
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...?
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.
<% 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
If ((pos_file <> 0) AND (pos_file < InstrB(position_end, request_binaries, boundary))) Then upload_object.Add name, Server.CreateObject("Scripting.Dictionary")
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...
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.