02. juni 2007 - 16:22
Der er
42 kommentarer og 3 løsninger
Upload af filer + tilføjning i database
Hej. Jeg er ved at lave en hjemmside. Der skal det være muligt for medlemmer, at uploade filer, pfd, doc osv. Der udover skal filen tilføjes i min database (MS Acces), da de skal sorteres på en side. tabellen hedder: bestyrelse Og den har disse koloner dato: dato for dokumentet (Ikke bruge date da folk selv skal kunne skrive dato) hvad: beskrivelse af filen fil: filnavnet, inkl .pdf osv. størrelse: størrelsen på filen type: hvilken type fil det er Håber at der er nogen der kan hjælpe mig. __________________ Hilsen Carsten_MC
Annonceindlæg fra Computerworld it-jobbank
Prøv dette her: ---------------------------------- <%Set rs = Server.CreateObject("ADODB.RecordSet") Set Conn = Server.CreateObject("ADODB.Connection") strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/db/database.mdb") Conn.Open strDSN If Request.Querystring("method") = "save" Then strUploadPath = Server.MapPath("\upload\") Function removePath(sFile) Set reg = New RegExp reg.Pattern = ".*\\" reg.IgnoreCase = True removePath = reg.Replace(sFile, "") End Function Set Upload = Server.CreateObject("Persits.Upload.1") Upload.Save strUploadPath strSQL = "SELECT * FROM [bestyrelse]" rs.Open strSQL, strDSN, 2, 2 rs.AddNew For Each File in Upload.Files strUploadName = File.Path Next set fs=Server.CreateObject("Scripting.FileSystemObject") set fs=fs.GetFile(strUploadPath & strUploadName) strUploadSize = f.Size set fs=nothing rs("fil") = strUploadName rs("type") = removePath(strUploadName) rs("hvad") = Request.Form("description") rs("størrelse") = strUploadSize rs("dato") = Request.Form("date") rs.Update rs.Close set rs = Nothing End If%> <form method="POST" enctype="multipart/form-data" action="?method=save"> Fil: <input type="file" size="30" name="file1"><br> Beskrivelse: <input type="text" name="description" size="30"><br> Dato: <input type="text" name="date" size="30"><br> <input type="submit" value="Udfør upload"> </form> -------------------------- Jeg ved ikke helt om det virker. Jeg havde koden til at upload en fil liggende, men jeg har tilføjet alle de ting, du nævnte, men ikke afprøvet det endnu.
Hey.. Har afprøvet den, og får denne fejl: Fejltype: Serverobjekt, ASP 0177 (0x800401F3) Ugyldig klassestreng /varde/test.asp, line 17 Fejllinje: Set Upload = Server.CreateObject("Persits.Upload.1")
for at kunne oploade skal der på dit webhotel være komponent aspupload eller aspsmartupload. I det viste tilfælde er det aspupload der er brugt. Find ud af hvilket komponent der er til rådighed.
Wehotellet understøtter både aspupload og aspsmartupload, men jeg kan ikke teste det på webhotellet endnu, da betalingen først skal gå igennem, og domænet flyttet fra det gamle webhotel. Skriver lige så snart jeg finder ud af om det fungerer på webhotellet. __________________ Hilsen Carsten_MC
Hej w13 Når jeg, på mit webhotel, prøver at gå ind på filen, får jeg denne fejl: Microsoft VBScript compilation error '800a0411' Name redefined /datacon.asp, line 2 Const adOpenKeyset = 1 ------^
Det kan ikke være i min kode. Fejlen lyder som om der flere steder defineres en konstant kaldet adOpenKeyset. Da jeg ikke bruger den konstant overhovedet i min kode, må det være fordi den ligger flere steder i din kode. :)
Fik løst den anden fejl, men nu får jeg denne fejl, når jeg prøver at uploade en fil: ADODB.Recordset error '800a0bb9' Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another. /upload_fil.asp, line 83 Fejllinie: rs.Open strSQL, strDSN, 2, 2
Så kunne det tyde på, noget ikke er ligesom i databasen.. Har du rettet /db/database.mdb, medmindre det selvfølgelig hedder det? Har du kigget på de andre feltnavne?
Jeg har slettet den del, da jeg åbner databasen i toppen, med min fil datacon.asp: <% Const adOpenKeyset = 1 Const adLockOptimistic = 3 Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db\varde.mdb") & ";UID=admin;" %>
11. juni 2007 - 18:51
#10
Så prøv lige at sætte: Set rs = Server.CreateObject("ADODB.RecordSet") ind igen.
11. juni 2007 - 21:57
#11
Hvis linjen er der, får jeg denne fejl: ADODB.Recordset error '800a0bb9' Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another. /upload_fil.asp, line 83 Hvis den ikke er der, får jeg denne fejl: ADODB.Recordset error '800a0e79' Operation is not allowed when the object is open. /upload_fil.asp, line 83 Fejllinje, 83: rs.Open strSQL, strDSN, 2, 2
11. juni 2007 - 22:25
#12
Hvis din kode ikke er for lang, så post lige den hele her. :)
11. juni 2007 - 22:39
#13
<!--#include file="datacon.asp"-->
<% Response.Buffer = True %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html>
<head>
<title>Varde Håndbold Klub | Upload fil</title>
<!--#include file="top.asp"-->
</head>
<div>
<table cellspacing="0" cellpadding="0" class="table" align="center">
<tr>
<td class="top">
</td>
</tr>
</table>
</div>
<div>
<table width="780" class="table" align="center">
<tr>
<td valign="top">
<table border="0" cellpadding="0" cellspacing="0" width="125px">
<!--#include file="menu.asp"-->
<tr>
<td width="100%" align="center" height="1" background="gfx/streg.gif">
</td>
</tr>
<tr>
<td width="25%" height="80" align="center" valign="middle">
<a target="_blank" href="
http://www.chart.dk/ref.asp?id=30786"> <img alt="chart.dk" border="0" src="
http://cluster.chart.dk/chart.asp?id=30786&style=3"> </a>
</td>
</tr>
<tr>
<td width="100%" align="center" height="1" background="gfx/streg.gif">
</td>
</tr>
</table>
</td>
<td class="linje">
</td>
<td valign="top">
<table width="506px" valign="top">
<tr>
<td valign="top">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="topoverskrift">
Upload fil
</td>
</tr>
<tr>
<td>
Her kan du filer som ikke hører indunder interne dokumenter eller bestyrelsen.
</td>
</tr>
<tr>
<td>
<%
If Request.Querystring("method") = "save" Then
strUploadPath = Server.MapPath("\downloads\")
Function removePath(sFile)
Set reg = New RegExp
reg.Pattern = ".*\\"
reg.IgnoreCase = True
removePath = reg.Replace(sFile, "")
End Function
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.Save strUploadPath
strSQL = "SELECT * FROM [bestyrelse]"
rs.Open strSQL, strDSN, 2, 2
rs.AddNew
For Each File in Upload.Files
strUploadName = File.Path
Next
set fs=Server.CreateObject("Scripting.FileSystemObject")
set fs=fs.GetFile(strUploadPath & strUploadName)
strUploadSize = f.Size
set fs=nothing
rs("fil") = strUploadName
rs("type") = removePath(strUploadName)
rs("hvad") = Request.Form("description")
rs("størrelse") = strUploadSize
rs("dato") = Request.Form("date")
rs.Update
rs.Close
set rs = Nothing
End If%>
<form method="POST" enctype="multipart/form-data" action="?method=save">
Fil: <input type="file" size="30" name="file1"><br>
Beskrivelse: <input type="text" name="description" size="30"><br>
Dato: <input type="text" name="date" size="30"><br>
<input type="submit" value="Udfør upload">
</form>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
<td class="linje">
</td>
<!--#include file="sponsor.asp"-->
</tr>
<tr class="footer">
<td>
</td>
</tr>
</table>
</div>
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="756">
<tr>
<td width="100%" align="right" valign="bottom">
<a href="mailto:c_meldgaard@vardehk.dk" class="link1">© 2006: Varde HK</a></td>
</tr>
</table>
</center>
</div>
</body>
</html>
12. juni 2007 - 07:53
#14
du gør det lidt nemmere for dig selv hvis du skiller din form og din upload ad i to filer.
'filen hvor du uploader fra:
<!--#include file="datacon.asp"-->
<% Response.Buffer = True %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html>
<head>
<title>Varde Håndbold Klub | Upload fil</title>
<!--#include file="top.asp"-->
</head>
<div>
<table cellspacing="0" cellpadding="0" class="table" align="center">
<tr>
<td class="top">
</td>
</tr>
</table>
</div>
<div>
<table width="780" class="table" align="center">
<tr>
<td valign="top">
<table border="0" cellpadding="0" cellspacing="0" width="125px">
<!--#include file="menu.asp"-->
<tr>
<td width="100%" align="center" height="1" background="gfx/streg.gif">
</td>
</tr>
<tr>
<td width="25%" height="80" align="center" valign="middle">
<a target="_blank" href="
http://www.chart.dk/ref.asp?id=30786"> <img alt="chart.dk" border="0" src="
http://cluster.chart.dk/chart.asp?id=30786&style=3"> </a>
</td>
</tr>
<tr>
<td width="100%" align="center" height="1" background="gfx/streg.gif">
</td>
</tr>
</table>
</td>
<td class="linje">
</td>
<td valign="top">
<table width="506px" valign="top">
<tr>
<td valign="top">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="topoverskrift">
Upload fil
</td>
</tr>
<tr>
<td>
Her kan du filer som ikke hører indunder interne dokumenter eller bestyrelsen.
</td>
</tr>
<tr>
<td>
<form method="POST" enctype="multipart/form-data" action="upload.asp">
Fil: <input type="file" size="30" name="file1"><br>
Beskrivelse: <input type="text" name="description" size="30"><br>
Dato: <input type="text" name="date" size="30"><br>
<input type="submit" value="Udfør upload">
</form>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
<td class="linje">
</td>
<!--#include file="sponsor.asp"-->
</tr>
<tr class="footer">
<td>
</td>
</tr>
</table>
</div>
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="756">
<tr>
<td width="100%" align="right" valign="bottom">
<a href="mailto:c_meldgaard@vardehk.dk" class="link1">© 2006: Varde HK</a></td>
</tr>
</table>
</center>
</div>
</body>
</html>
' filen upload.asp som du uploader til
<!--#include file="datacon.asp"-->
<% Response.Buffer = True %>
<%
strUploadPath = Server.MapPath("\downloads\")
Function removePath(sFile)
Set reg = New RegExp
reg.Pattern = ".*\\"
reg.IgnoreCase = True
removePath = reg.Replace(sFile, "")
End Function
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.Save strUploadPath
strSQL = "SELECT * FROM [bestyrelse]"
rs.Open strSQL, strDSN, 2, 2
rs.AddNew
For Each File in Upload.Files
strUploadName = File.Path
Next
set fs=Server.CreateObject("Scripting.FileSystemObject")
set fs=fs.GetFile(strUploadPath & strUploadName)
strUploadSize = f.Size
set fs=nothing
rs("fil") = strUploadName
rs("type") = removePath(strUploadName)
rs("hvad") = Upload.Form("description")
rs("størrelse") = strUploadSize
rs("dato") = Upload.Form("date")
rs.Update
rs.Close
set rs = Nothing
response.redirect "filnavnet på den fil hvor du uploadede fra"
%>
og når du bruger enctype="multipart/form-data" må du ikke bruger request.form eller request.Querystring
12. juni 2007 - 15:05
#15
Nu kommer denne fejl: Microsoft VBScript runtime error '800a01a8' Object required: 'rs' /upload_fil_run.asp, line 20 Fejllinje: rs.Open strSQL, strDSN, 2, 2
12. juni 2007 - 19:25
#16
det er din connection der er noget galt med Set rs = Server.CreateObject("ADODB.RecordSet") Set Conn = Server.CreateObject("ADODB.Connection") strDSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/db/database.mdb") Conn.Open strDSN er det det du har i din connect fil
12. juni 2007 - 20:36
#17
Nej... Jeg har dette: <% Const adOpenKeyset = 1 Const adLockOptimistic = 3 Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db\varde.mdb") & ";UID=admin;" %>
13. juni 2007 - 09:27
#18
<% Const adOpenKeyset = 1 Const adLockOptimistic = 3 Set Conn = Server.CreateObject("ADODB.Connection") Set rs = Server.CreateObject("ADODB.RecordSet") Conn.Open "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db\varde.mdb") & ";UID=admin;" %> prøv at tilføje linien Set rs = Server.CreateObject("ADODB.RecordSet") som dette
13. juni 2007 - 12:12
#19
Nu får jeg en anden fejl, i den samme linje: ADODB.Recordset error '800a0bb9' Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another. /upload_fil_run.asp, line 20
13. juni 2007 - 13:18
#20
prøv dette ' filen upload.asp som du uploader til <% Response.Buffer = True %> <% Set Conn=Server.CreateObject("ADODB.Connection") Set rs=Server.CreateObject("ADODB.RecordSet") Set rsa=Server.CreateObject("ADODB.RecordSet") Conn.ConnectionString = "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db\varde.mdb") & ";UID=admin;" Conn.Open strUploadPath = Server.MapPath("\downloads\") Function removePath(sFile) Set reg = New RegExp reg.Pattern = ".*\\" reg.IgnoreCase = True removePath = reg.Replace(sFile, "") End Function Set Upload = Server.CreateObject("Persits.Upload.1") Upload.Save strUploadPath For Each File in Upload.Files strUploadName = File.Path Next set fs=Server.CreateObject("Scripting.FileSystemObject") set fs=fs.GetFile(strUploadPath & strUploadName) strUploadSize = f.Size set fs=nothing strSQL = "insert into bestyrelse (fil,type,hvad,størrelse,dato) values " strSQL = strSQL & "('"& strUploadName & "', '"&removePath(strUploadName) &"'," strSQL = strSQL & "'"&Upload.Form("description")&"','" &strUploadSize&"'," strSQL = strSQL & "'"&Upload.Form("date")&"')" Set rs = Conn.Execute(strSQL) set rs = Nothing response.redirect "filnavnet på den fil hvor du uploadede fra" %> ' hvis dit dato felt i db er sat til dato format så sættes '"&Upload.Form("date")&"' = #"&Upload.Form("date")&"# ' hvis andre felter ikke er sat til tekst så skal du fjere ' foran og bagved, således - '"&Upload.Form("et eller andet")&"' = "&Upload.Form("et eller andet")&"
13. juni 2007 - 13:41
#21
Microsoft VBScript runtime error '800a0035' File not found /upload_fil_run.asp, line 31 Fejllinje: set fs=fs.GetFile(strUploadPath & strUploadName)
13. juni 2007 - 13:42
#22
Og dato har jeg sat til at være dato i databasen, samt de andre felter til at være notat
13. juni 2007 - 14:21
#23
' prøv dette <% Set Conn=Server.CreateObject("ADODB.Connection") Set rs=Server.CreateObject("ADODB.RecordSet") Set rsa=Server.CreateObject("ADODB.RecordSet") Conn.ConnectionString = "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db\varde.mdb") & ";UID=admin;" Conn.Open Set Upload = Server.CreateObject("Persits.Upload") Upload.Save = Server.MapPath("../downloads") Set File = Upload.Files("file1") If Not File Is Nothing Then strSQL = "insert into bestyrelse (fil,type,hvad,størrelse,dato) values " strSQL = strSQL & "('"& File.Filename & "', '"&File.ImageType &"'," strSQL = strSQL & "'"&Upload.Form("description")&"','" &File.Size&"'," strSQL = strSQL & "#"&Upload.Form("date")&"#)" Set rs = Conn.Execute(strSQL) set rs = Nothing Response.Write "File saved." Else Response.Write "File not selected." End If %>
13. juni 2007 - 14:42
#24
Microsoft VBScript runtime error '800a01b6' Object doesn't support this property or method: 'Upload.Save' /upload_fil_run.asp, line 11 Fejlinje: Upload.Save = Server.MapPath("../downloads")
13. juni 2007 - 15:10
#25
prøv at sætte dette i stedet for stien = Server.MapPath("../downloads") Upload.Save (stien)
13. juni 2007 - 19:40
#26
Hey. Nu kan den uploade filen. Nu er der bare lige to andre fejl. 1. Den gemmen ikke hvilken type fil det er 2. Hele filnavnet, med filtype endelsen bliver ikke gemt. Istedet bliver beskrivelsen også gemt i cellen hvor filnavnet med endelsen skulle være. Og hvis det kan lade sig gøre, vil jeg gerne have at den gemmer i kb istedet for bites.
13. juni 2007 - 20:06
#27
Det med bytes til Kb løses ved at gange med 1000. :) *1000
13. juni 2007 - 22:06
#28
Hvad med de to andre problemer?
14. juni 2007 - 08:04
#29
skift dette Response.Write "File saved." Else Response.Write "File not selected." End If ud med dette Response.Write strSQL Else Response.Write "File not selected." End If og tage en kopi af det den skrive og lægge her - så jeg kan se hvad du mener
14. juni 2007 - 13:01
#30
insert into bestyrelse (fil,type,hvad,størrelse,dato) values ('Vejledning til vardehk.doc', 'UNKNOWN','Beskrivelse','382464',#14-06-2007#) Har løst problemet med at den ikke viste endelsen på filen, det eneste er lige nu ikke virker, er at den ikke kan finde ud af at gemme hvilken type fil det er.
14. juni 2007 - 13:23
#31
Hvad med: Replace(Right(File.Filename,4),".","") Her vælges de sidste 4 tegn, så der altså tages højde for både ".jpg" og "jpeg", og så fjernes evt. punktummer.
14. juni 2007 - 13:26
#32
hvor skal det sættes ind i henne.
14. juni 2007 - 13:28
#33
Der hvor du vil indsætte typen ;) insert into bestyrelse (fil,type,hvad,størrelse,dato) values ('Vejledning til vardehk.doc', '"&Replace(Right(File.Filename,4),".","")&"','Beskrivelse','382464',#14-06-2007#)
14. juni 2007 - 13:30
#34
File.ImageType er kun når det er billeder - det kan erstattes af File.Ext strSQL = "insert into bestyrelse (fil,type,hvad,størrelse,dato) values " strSQL = strSQL & "('"& File.Filename & "', '"&File.Ext&"'," strSQL = strSQL & "'"&Upload.Form("description")&"','" &File.Size&"'," strSQL = strSQL & "#"&Upload.Form("date")&"#)" Set rs = Conn.Execute(strSQL) eller strSQL = "insert into bestyrelse (fil,type,hvad,størrelse,dato) values " strSQL = strSQL & "('"& File.Filename & "', '"&Replace(Right(File.Filename,4),".","") &"'," strSQL = strSQL & "'"&Upload.Form("description")&"','" &File.Size&"'," strSQL = strSQL & "#"&Upload.Form("date")&"#)" Set rs = Conn.Execute(strSQL)
14. juni 2007 - 13:36
#35
Hov, jeg opdagede lige, at jeg havde lavet en fejl tidligere. Når du regner fra bytes til Kb skal der naturligvis ikke ganges med 1000, men divideres med 1000. Der divideres i asp med /
14. juni 2007 - 14:44
#36
Jeg skal skrive: &File.Size/1000& For at få den til at lave den om til kb, ikke sandt?
14. juni 2007 - 14:45
#37
Jep!
14. juni 2007 - 14:56
#38
Den skriver det stadig ud i b istedet for kb. Det er sådan det skal se ud ikke: strSQL = "insert into bestyrelse (fil,type,hvad,størrelse,dato) values " strSQL = strSQL & "('"& File.Filename & "', '"&File.Ext &"'," strSQL = strSQL & "'"&Upload.Form("description")&"','" &File.Size/1000&"'," strSQL = strSQL & "#"&Upload.Form("date")&"#)" Set rs = Conn.Execute(strSQL)
14. juni 2007 - 14:59
#39
Vil det sige, at den overhovedet ikke påvirkes af, at vi dividerer tallet med 1000? :S
14. juni 2007 - 15:15
#40
Fandt fejlen. Havde sat cellerne i databasen til at være tal, for at undgå at den laver komma tal, men den kan ikke afrunde, og den flytter derfor kommaet. Så jeg må blot finde mig i at den fx skriver 389,464 som størrelse.
14. juni 2007 - 15:22
#41
Hvordan ville du hellere have det skrevet? FormatNumber(File.Size/1000,0) Udskriver: 389 FormatNumber(File.Size/1000,1) Udskriver: 389,4 FormatNumber(File.Size/1000,2) Udskriver: 389,46 osv..
14. juni 2007 - 15:27
#42
Hvor skal det skrives...
14. juni 2007 - 15:30
#43
Måske her: strSQL = "insert into bestyrelse (fil,type,hvad,størrelse,dato) values " strSQL = strSQL & "('"& File.Filename & "', '"&File.Ext &"'," strSQL = strSQL & "'"&Upload.Form("description")&"','" &FormatNumber(File.Size/1000,1)&"'," strSQL = strSQL & "#"&Upload.Form("date")&"#)" Set rs = Conn.Execute(strSQL) Men jeg ved faktisk ikke, om databasen så ændrer på tallet alligevel. Ellers skal du bruge det, når du viser resultatet, dvs. henter det igen fra db.
14. juni 2007 - 15:50
#44
YES. Så virker det hele. Denne tråd er hermed lukket, og pointene er fordelt mellem w13 og mitbrugernavn. Mange tak for hjælpen.
14. juni 2007 - 16:03
#45
Det var så lidt! Og tak for point! :)
Kurser inden for grundlæggende programmering