14. december 2004 - 11:03Der er
29 kommentarer og 1 løsning
Hjælp til upload script af foto - mit script fungerer ikke.
Hej
Jeg har fået et script som skulle kunne bruges til at uploade et foto til en mappe og en database (stien til fotoet), men jeg kan ikke få det til at fungere - æv æv!
Scriptet er her: ::::KODE:::: <HTML> <BODY> HEJ
<% 'linie til at tjekke om vareid kommer med over fra siden hvor varen blev oprettet 'response.write request.querystring("vareID") %> <% dim vsti,sti,mappe vsti=request.servervariables("PATH_INFO") sti =server.mappath(vsti) mappe = left(sti, len(sti)-len("uploadscript1.asp") ) mappe= mappe & "foto"
dim upload,count
Set Upload = Server.CreateObject("Persits.Upload.1") Count = Upload.Save(mappe)
if count = 1 then navn = Upload.Files(1).Path set cn = server.createobject("adodb.connection") cn.connectionstring = session.contents("dbconnectstring") cn.open
vareID = request.querystring("vareID")
sql = "INSERT INTO vare (foto1) values( '"&navn&"') WHERE vareid=" & intVareId response.write "sql = " & sql cn.execute sql
cn.close set cn = nothing end if
response.redirect("adm_forside.htm")
%>
</BODY> </HTML>
::::KODE SLUT::::
På en eller anden måde bilver fotoet godt nok gemt i den rigtige mappe, men der bliver aldrig skrevet en sti i databasen - jeg kan heller ikke lige finde ud af hvor i scriptet navnet på databasen skal angives.
Nå jeg uploader et foto får jeg følgende fejl på skærmen: HEJ Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
/datronic/shop_admin_test/UploadScript1.asp, line 25
Linie 25 er denne linie 21 if count = 1 then 22 navn = Upload.Files(1).Path 23 set cn = server.createobject("adodb.connection") 24 cn.connectionstring = session.contents("dbconnectstring") 25 cn.open
Hvad er der galt med mit script? Hvor skal stien til databasen angives? Hvorfor bliver fotoet gemt i mappen men stien til fotoet bliver ikke gemt i databasen?
Det er fordi at stien til din database ikke er korrekt. Stien ligger tilsyneladende i en session som du kan se i linie 24 i.h.t. din linielisting ovenfor.
Et eller andet sted bliver denne session sat eller også gør den ikke.
Har du et godt råd/ide til hvordan jeg kan lave det om så stien til databasen ikke ligger i en session, men inde i selve koden på siden - jeg bruger nemli' ikke en session mere.
Jeg har brugt dit sidste eksempel, men nu får jeg lige pludseligt denne fejl:
HEJ sql = INSERT INTO vare (foto1) values( 'C:\WWW\ferslev.com\www\datronic\shop_admin_test\foto\ladle_mortal.gif') WHERE vareid= Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Missing semicolon (;) at end of SQL statement.
/datronic/shop_admin_test/UploadScript1.asp, line 31
Linie 31 er 27 vareID = request.querystring("vareID") 28 29 sql = "INSERT INTO vare (foto1) values( '"&navn&"') WHERE vareid=" & intVareId 30 response.write "sql = " & sql 31 cn.execute sql
...jeg kan ikke helt gennemskue hvor det er der mangler et ;
Ja, intVareId er et tal. Jeg havde lavet en lille fejl i koden så der det ene sted bare stod vareId og et andet sted intVareId - men det er rette nu
Hvis jeg sætter de to linier ind, så får jeg stadig den samme fejl. I fejlen kan man se at tallet er kommet med (det er tallet 143), men jeg kan ikke udskrive min sql uden af få fejl.
HEJ INSERT INTO vare (foto1) values( 'C:\WWW\ferslev.com\www\datronic\shop_admin_test\foto\artbrush.gif') WHERE vareid=143 Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Missing semicolon (;) at end of SQL statement.
/datronic/shop_admin_test/UploadScript1.asp, line 31
Min kode som den ser ud nu: <HTML> <BODY> HEJ
<% 'linie til at tjekke om vareid kommer med over fra siden hvor varen blev oprettet 'response.write request.querystring("vareID") %> <% dim vsti,sti,mappe vsti=request.servervariables("PATH_INFO") sti =server.mappath(vsti) mappe = left(sti, len(sti)-len("uploadscript1.asp") ) mappe= mappe & "foto"
dim upload,count
Set Upload = Server.CreateObject("Persits.Upload.1") Count = Upload.Save(mappe)
if count = 1 then navn = Upload.Files(1).Path Set cn = Server.CreateObject("ADODB.Connection") cn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("shop1.mdb")
intvareID = request.querystring("vareID")
sql = "INSERT INTO vare (foto1) values( '"&navn&"') WHERE vareid=" & intVareId response.write sql cn.execute sql
okay selvfølgelig, så må jeg vist lige komme med en forklaring på hvad det er jeg skal:
Jeg har en siden hvor der oprettes en ny post i tabellen vare, det er så meningen at der til den post skal tilføjes nogle flere oplysninger (stien til fotoet) på den side jeg har problemer med nu - så ja du har helt ret jeg forsøger at opdatere en eksisterende post
Skal jeg så bare skrive update i stedet for eller hvad skal koden helt bestemt være?
Prøv nedenstående, det er utestet Det bør ligge billederne i mappen "foto" som skal befinde sig i roden af serveren- og lægge filnavnet i databasen
<% dim sti sti = server.mappath(/foto/)
dim upload,count
Set Upload = Server.CreateObject("Persits.Upload.1") Count = Upload.SaveVirtual(sti)
if count = 1 then navn = File.ExtractFileName set cn = server.createobject("adodb.connection") cn.connectionstring = session.contents("dbconnectstring") cn.open
vareID = request.querystring("vareID")
sql = "update vare set foto1 ='"& navn &"' WHERE vareid=" & intVareId cn.execute sql
Set Upload = Server.CreateObject("Persits.Upload.1") Count = Upload.SaveVirtual(sti)
for each file in upload.files
if count = 1 then navn = File.ExtractFileName set cn = server.createobject("adodb.connection") cn.connectionstring = session.contents("dbconnectstring") cn.open
vareID = request.querystring("vareID")
sql = "update vare set foto1 ='"& navn &"' WHERE vareid=" & intVareId cn.execute sql
Min if sætning så sådan her ud før: if count = 1 then navn = Upload.Files(1).Path Set cn = Server.CreateObject("ADODB.Connection") cn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("shop1.mdb")
intvareID = request.querystring("vareID")
sql = "INSERT INTO vare (foto1) values( '"&navn&"') WHERE vareid=" & intVareId response.write sql cn.execute sql
cn.close set cn = nothing end if
...men selvom jeg sætter den ind i stedet for, så er der stadig fejl på siden
Okay, der var da vist lige en fejl mere, denne burde virke. Jeg har endvidere lige sat et check på at den ikke overskriver en eksisterende fil hvis den findes i forvejen.
<% dim sti sti = "/foto/"
dim upload
Set Upload = Server.CreateObject("Persits.Upload.1") Upload.OverwriteFiles = False Upload.SaveVirtual(sti)
for each file in upload.files
navn = sti & File.ExtractFileName
set cn = server.createobject("adodb.connection") cn.connectionstring = session.contents("dbconnectstring") cn.open
vareID = request.querystring("vareID")
sql = "update vare set foto1 ='"& navn &"' WHERE vareid=" & intVareId cn.execute sql
Jeg har ikke fået det til at virke med flere uploads af gangen. Jeg kan ikke helt få det til at blive gemt i db, fordi felterne hedder foto1, foto2, foto3 osv, og jeg ikke ved hvordan jeg skal få skrevet i koden at de skal gemmes i disse felter.
/Annette
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.