Avatar billede annettef Nybegynder
14. december 2004 - 11:03 Der 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?

Håber der er nogen der kan hjælpe mig :o)

/Annette
Avatar billede goose Nybegynder
14. december 2004 - 12:26 #1
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.

/Goose
Avatar billede annettef Nybegynder
14. december 2004 - 12:41 #2
okay, det kan jeg godt se det med session

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.

/Annette
Avatar billede goose Nybegynder
14. december 2004 - 12:52 #3
istedet for :

23    set cn = server.createobject("adodb.connection")
24    cn.connectionstring = session.contents("dbconnectstring")
25    cn.open

kan du f.eks. bruge:

Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=d:\web\domæne.dk\database\databasenavn.mdb"

Nu skal du så selv lige rette strengen med d: ... til så den passer med din udbyder.

/Goose
Avatar billede goose Nybegynder
14. december 2004 - 12:56 #4
- eller du kan bruge en hvor stien til databasen tager udgangspunkt i roden af din server.

Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("/database/databasenavn.mdb")

/Goose
Avatar billede annettef Nybegynder
14. december 2004 - 13:16 #5
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 ;
Avatar billede goose Nybegynder
14. december 2004 - 13:23 #6
Hvis du udskriver din sql, har du så vareid med ?
Er intVareId et tal ?

Du kan ud skrive din sgl ved følgende:

30    response.write sql
31    ' cn.execute sql

/Goose
Avatar billede annettef Nybegynder
14. december 2004 - 13:30 #7
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

    cn.close
    set cn = nothing
end if


response.redirect("adm_forside.htm")

%>

</BODY> 
</HTML>
Avatar billede goose Nybegynder
14. december 2004 - 13:31 #8
Hov, du har jo lagt vareID i en variabel, så prøv dette:

27    vareID = request.querystring("vareID")
28   
29    sql = "INSERT INTO vare (foto1) values( '"&navn&"') WHERE vareid=" & VareId                 
30    response.write "sql = " & sql
31    cn.execute sql

/Goose
Avatar billede annettef Nybegynder
14. december 2004 - 13:37 #9
Jeg får stadig den samme fejl med at der mangler et ; i linie 31
Avatar billede goose Nybegynder
14. december 2004 - 13:53 #10
Vent nu lige en halv

Hvis vil indsætte nye data skal du bruge insert som du her har brugt, men så har du jo ikke noget at bruge dit id til.

Jeg tror du vil opdaterer en eksisterende post i databasen og du skal så bruge update istedet for insert.

/Goose
Avatar billede goose Nybegynder
14. december 2004 - 13:57 #11
så vil din sql hedde:

sql = "update vare set foto1 ='"& navn &"' WHERE vareid=" & intVareId

/Goose
Avatar billede annettef Nybegynder
14. december 2004 - 13:59 #12
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?
Avatar billede annettef Nybegynder
14. december 2004 - 14:00 #13
okay du var lidt hurtigere end mig
Avatar billede annettef Nybegynder
14. december 2004 - 14:04 #14
så gik det jo straks meget bedre

Tusind tusind tak for hjælpen - hvis du vil have flere end de 30 point siger du bare lige til, for det synes jeg du fortjener efter så meget hjælp :o)

....så smid lige et svar
Avatar billede goose Nybegynder
14. december 2004 - 14:06 #15
Det var så lidt og 30 point er rigeligt :o)

Er du nu sikker på du ikke får problemer med at hente billederne igen når det nu er den fysiske sti til billedet du gemmer i databasen ?

/Goose
Avatar billede annettef Nybegynder
14. december 2004 - 14:07 #16
Jo, det kan godt være jeg får et probelm der - jeg er lige ved at prøve det nu

Men du har måske en anden ide til hvordan jeg kan gemme stien?
Avatar billede annettef Nybegynder
14. december 2004 - 14:15 #17
Du har helt ret det giver problemer - ved du om det er muligt kun at gemme mappenavnet og filnavnet altså f.eks foto/test2.jpg?
Avatar billede goose Nybegynder
14. december 2004 - 14:16 #18
Nu ved jeg ikke om du kan få det til at virke, men skal alle billeder ligge i samme mappe ?

/Goose
Avatar billede annettef Nybegynder
14. december 2004 - 14:19 #19
Ja, alle billederne skal ligge i den samme mappe der hedder foto
Avatar billede goose Nybegynder
14. december 2004 - 14:25 #20
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

    cn.close
    set cn = nothing
end if


response.redirect("adm_forside.htm")

%>

/Goose
Avatar billede goose Nybegynder
14. december 2004 - 14:28 #21
Du skal nok lige have en for next løkke ind:

<% 
dim sti
sti = server.mappath(/foto/)

dim upload,count

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

    cn.close
    set cn = nothing
end if

next

response.redirect("adm_forside.htm")

%>

/Goose
Avatar billede annettef Nybegynder
14. december 2004 - 14:38 #22
Det fungerer ikke rigtigt

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
Avatar billede goose Nybegynder
14. december 2004 - 14:39 #23
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

    cn.close
    set cn = nothing
end if

next

response.redirect("adm_forside.htm")

%>

/Goose
Avatar billede annettef Nybegynder
14. december 2004 - 14:39 #24
...og selvfølgelig skifter navn=Upload.files(1).path ud med navn=file.ExtractFileName som du skrev
Avatar billede goose Nybegynder
14. december 2004 - 14:41 #25
Ja det må du undskylde, det er mig der sidder og cut & paster lidt rigeligt, jeg prøver lige igen:

<% 
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.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

next

response.redirect("adm_forside.htm")

%>

/Goose
Avatar billede annettef Nybegynder
14. december 2004 - 14:45 #26
nu virker det som det skal...

Så lige et lille ekstra ekstra ekstra spørgsmål - hvad nu hvis jeg vil uploade flere fotos ad gangen, tror du jeg kan det med dette script?
Avatar billede goose Nybegynder
14. december 2004 - 15:05 #27
Ja det burde du kunne, da den jo har en for/next løkke.

Til info er jeg ikke på eksperten mere i dag.

/Goose
Avatar billede annettef Nybegynder
14. december 2004 - 15:11 #28
okay - men tusind tusind tak for hjælpen igen
Avatar billede goose Nybegynder
14. december 2004 - 20:43 #29
Det var så lidt, fik du det til at virke med flere uploads af gangen ?

/Goose
Avatar billede annettef Nybegynder
15. december 2004 - 08:41 #30
Hej

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
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