Avatar billede bogologo Nybegynder
18. oktober 2005 - 14:05 Der er 28 kommentarer og
1 løsning

HTTP Error 507 skrivning til db og upload af billede

Har lavet en formular til at redigere i noget tekst fra en mySQL database og samtidig med mulighed for at uploade et billede.

jeg kan sagtens få den til at opdatere teksten i database, men når jeg prøver at vedhæfte et jpg billede får jeg http error 507
der er ingen problemer når jeg prøver at bruge en gif fil i stedet for(gemmer stadig filen med .jpg på serveren)
koden der skal gøre det hele ses nedenfor, har kigget efter fejl i flere dage, men uden held, så nu håber jeg der er nogen der har en idé til hvad jeg gør forkert.

-------------------------

<!--#include file="database.asp"-->
<!--#include file="protect.asp"-->

<%
dim adoRS
dim adoID
dim adoTitle
dim adoDesc
dim adoImg

Set fbase = Server.CreateObject("Chili.Upload.1")

adoID = fbase.FormData("TextID")
adoTitle = Replace(fbase.FormData("Title"),"'","''")
adoDesc = Replace(fbase.FormData("Desc"),"'","''")
adoImg = fbase.FormData("Img")

if fbase.FormData("FILE") <> "" then


Set adoRS = Server.CreateObject ("ADODB.Recordset")
adoRS.Open "SELECT * FROM forside WHERE TextID = '" & adoID &"'", adoConn

strSQL = "UPDATE forside set "
strSQL = strSQL & "`Title` = '"&adoTitle &"', "
strSQL = strSQL & "`Desc` = '"&adoDesc &"', "
strSQL = strSQL & "`Img` = '"&adoImg &"' "
strSQL = strSQL & "WHERE TextID = "&adoID&""
adoConn.Execute(strSQL)

Response.Expires = 0
fbase.SizeLimit = 500000
fbase.AllowOverwrite = 1
fbase.SaveToFile(Server.mapPath("/") & "/images/" & "start.jpg")

else

Set adoRS = Server.CreateObject ("ADODB.Recordset")
adoRS.Open "SELECT * FROM forside WHERE TextID = '" & adoID &"'", adoConn

strSQL = "UPDATE forside set "
strSQL = strSQL & "`Title` = '"&adoTitle &"', "
strSQL = strSQL & "`Desc` = '"&adoDesc &"', "
strSQL = strSQL & "`Img` = '"&adoImg &"' "
strSQL = strSQL & "WHERE TextID = "&adoID&""


adoConn.Execute(strSQL)



end if


%>
Avatar billede softspot Forsker
18. oktober 2005 - 14:32 #1
<!--#include file="database.asp"-->
<!--#include file="protect.asp"-->

<%
dim adoRS
dim adoID
dim adoTitle
dim adoDesc
dim adoImg

Set fbase = Server.CreateObject("Chili.Upload.1")

adoID = fbase.FormData("TextID")
adoTitle = Replace(fbase.FormData("Title"),"'","''")
adoDesc = Replace(fbase.FormData("Desc"),"'","''")
adoImg = fbase.FormData("Img")

if fbase.FormData("FILE") <> "" then


Set adoRS = Server.CreateObject ("ADODB.Recordset")
adoRS.Open "SELECT * FROM forside WHERE TextID = '" & adoID &"'", adoConn

strSQL = "UPDATE forside set "
strSQL = strSQL & "Title = '"&adoTitle &"', "
strSQL = strSQL & "Desc = '"&adoDesc &"', "
strSQL = strSQL & "Img = '"&adoImg &"' "
strSQL = strSQL & "WHERE TextID = "&adoID&""
adoConn.Execute(strSQL)

Response.Expires = 0
fbase.SizeLimit = 500000
fbase.AllowOverwrite = 1
fbase.SaveToFile(Server.mapPath("/") & "/images/" & "start.jpg")

else

Set adoRS = Server.CreateObject ("ADODB.Recordset")
adoRS.Open "SELECT * FROM forside WHERE TextID = '" & adoID &"'", adoConn

strSQL = "UPDATE forside set "
strSQL = strSQL & "Title = '"&adoTitle &"', "
strSQL = strSQL & "Desc = '"&adoDesc &"', "
strSQL = strSQL & "Img = '"&adoImg &"' "
strSQL = strSQL & "WHERE TextID = "&adoID&""


adoConn.Execute(strSQL)



end if


%>
Avatar billede softspot Forsker
18. oktober 2005 - 15:54 #2
Jeg har fjernet de apostroffer du havde omkring feltnavnene (altså ikke værdierne, men feltnavnene)...
Avatar billede bogologo Nybegynder
19. oktober 2005 - 13:31 #3
ehm, det kan jeg ikke lige se pointen med, så vil jeg jo bare få fejl på SQL update..

det virker fint nok med at lave update på databasen jo, det er kun når jeg prøver at uploade et billede det laver fejl.
Avatar billede softspot Forsker
19. oktober 2005 - 13:46 #4
Point taken.

Bliver filnavnet lagt i databasen, men filen ikke uploaded?

Hvis ja, har du så prøvet at udkommentere den linie hvor du sætter SizeLimit? Hvis den fungerer som ASPUpload, så kastes der en fejl hvis filen er for stor, så jeg spekulerede på om det kunne være problemet...
Avatar billede bogologo Nybegynder
19. oktober 2005 - 14:03 #5
filnavnet bliver gemt i databasen ja. alle tingene bliver gemt fint nok i databasen så vidt jeg kan se.

tror ikke det er SizeLimit. da den godt kan finde ud af at uploade filen nogen gange.

det er ligesom om den der file upload bare ikke kan lide at blive lagt i min if/ else sætning.

hvis jeg kun har den første del på, altså hvor den både skriver til db og uploader filen, men ikke nogen if sætning, så virker det til syneladende fint, grunden til at jeg har lavet en if sætning er at det skal være muligt kun at rette på teksten.
hvis jeg kører det uden if sætning vil den komme med en fejl om at FILE ikke indeholder en fil, så det er egentlig for at undgå det.
Avatar billede softspot Forsker
19. oktober 2005 - 14:12 #6
Hmmm... jeg er lidt skeptisk overfor den teori at det skulle være placeringen i en if-sætning der er problemet. Jeg er mere tilbøjelig til at tro det har noget med datagrundlaget (enten det der kommer ind i din form, eller det der eksisterer (eller ikke eksisterer) i databasen og skal opdateres...

Herunder har jeg lige lavet lidt brainstorming:

Er det altid opdateringer eller kan der ikke forekomme indsættelser?

Har du prøvet at udskrive de variable du forsøger at opdatere?

Har du prøvet at udskrive det SQL-statement du prøver at fyre at mod databasen for at se om der kunne være nogle åbenlyse mangler i det, når den fejler?
Avatar billede bogologo Nybegynder
19. oktober 2005 - 14:20 #7
altså hvis jeg bruger:

<!--#include file="database.asp"-->
<!--#include file="protect.asp"-->

<%
dim adoRS
dim adoID
dim adoTitle
dim adoDesc
dim adoImg

Set fbase = Server.CreateObject("Chili.Upload.1")

adoID = fbase.FormData("TextID")
adoTitle = Replace(fbase.FormData("Title"),"'","''")
adoDesc = Replace(fbase.FormData("Desc"),"'","''")
adoImg = fbase.FormData("Img")

Set adoRS = Server.CreateObject ("ADODB.Recordset")
adoRS.Open "SELECT * FROM forside WHERE TextID = '" & adoID &"'", adoConn

strSQL = "UPDATE forside set "
strSQL = strSQL & "`Title` = '"&adoTitle &"', "
strSQL = strSQL & "`Desc` = '"&adoDesc &"', "
strSQL = strSQL & "`Img` = '"&adoImg &"' "
strSQL = strSQL & "WHERE TextID = "&adoID&""
adoConn.Execute(strSQL)

Response.Expires = 5
fbase.SizeLimit = 500000
fbase.AllowOverwrite = 1
fbase.SaveToFile(Server.mapPath("/") & "/images/" & "start.jpg")
%>


så virker det hele så længe man husker at vedhæfte en fil.

hvis man derimod ikke vedhæfter en fil kommer der en fejl:
ChiliUpload.FormData.1 (0x80020009)
File element contains no data.

det var den jeg prøvede at komme ud over.
Avatar billede softspot Forsker
19. oktober 2005 - 14:27 #8
Jeg kan ikke helt se formålet med disse linier

Set adoRS = Server.CreateObject ("ADODB.Recordset")
adoRS.Open "SELECT * FROM forside WHERE TextID = '" & adoID &"'", adoConn

Du bruger ikke adoRs nogen steder efterfølgende, så det er der vel ikke nogen grund til at fylde med data...?

Hvad med de brainstormingspørgsmål jeg satte op... har du nogle erfaringer med dem?

Desuden spekulerede jeg på om det kunne have noget med Server.ScriptTimeout at gøre, altså at scriptet ikke får lov til at blive færdigt inden det timer ud?
Avatar billede bogologo Nybegynder
19. oktober 2005 - 14:27 #9
hvis jeg skriver strSQL ud, så står der præcis det der skal
Avatar billede bogologo Nybegynder
19. oktober 2005 - 14:28 #10
adoRS har du ret i, de skal bare væk..
Avatar billede bogologo Nybegynder
19. oktober 2005 - 14:29 #11
Server.ScriptTimeout må jeg indrømme at jeg ikke lige ved noget om
Avatar billede softspot Forsker
19. oktober 2005 - 14:32 #12
Ang. 19/10-2005 14:27:41 >> også de gange hvor det fejler?

Hvor opretter du billederne i databasen? Det kode du har vist opdaterer kun eksisterende billeder (som du nok allerede ved).
Avatar billede bogologo Nybegynder
19. oktober 2005 - 14:41 #13
når det fejler når jeg slet ikke så langt så jeg kan få skrevet strSQL ud.

hvis jeg bruger den med if sætning i, så får jeg bare den der HTTP error.

hvis jeg ikke bruger if sætning, så får jeg
File element contains no data.
hvis ikke der er en fil med.

lige i det her tilfælde opretter jeg ikke desideret billedet, det har jeg på forhånd skrevet ind i min database til altid at henvise til start.jpg da man ikke skal kunne oprette nye poster, kun redigere i den eksisterende ene.
Avatar billede softspot Forsker
19. oktober 2005 - 14:41 #14
Har den anonyme bruger som surfer på dit site (det der på IIS hedder IUSR) skriverettigheder til folderen /images?
Avatar billede softspot Forsker
19. oktober 2005 - 14:42 #15
Glem mit sidste spørgsmål!
Avatar billede bogologo Nybegynder
19. oktober 2005 - 14:42 #16
det der er mærkeligt er at hvis jeg f.eks. prøver at uploade en fil med navnet 1.gif så virker det fint.
Avatar billede softspot Forsker
19. oktober 2005 - 14:43 #17
19/10-2005 14:41:27 >> når du udskriver din SQL, hvor gør du så det (placeringen af linien i din kode)? Og husker du at stoppe udførslen af siden, så du kan se SQL-sætningen?
Avatar billede bogologo Nybegynder
19. oktober 2005 - 14:48 #18
Set fbase = Server.CreateObject("Chili.Upload.1")

adoID = fbase.FormData("TextID")
adoTitle = Replace(fbase.FormData("Title"),"'","''")
adoDesc = Replace(fbase.FormData("Desc"),"'","''")
adoImg = fbase.FormData("Img")

if fbase.FormData("FILE") <> "" then

strSQL = "UPDATE forside set "
strSQL = strSQL & "`Title` = '"&adoTitle &"', "
strSQL = strSQL & "`Desc` = '"&adoDesc &"', "
strSQL = strSQL & "`Img` = '"&adoImg &"' "
strSQL = strSQL & "WHERE TextID = "&adoID&""

Response.Write strSQL

Response.Write fbase.FormData("FILE")

'adoConn.Execute(strSQL)

'Response.Expires = 5
'fbase.SizeLimit = 500000
'fbase.AllowOverwrite = 1
'fbase.SaveToFile(Server.mapPath("/") & "/images/" & "start.jpg")

else

strSQL = "UPDATE forside set "
strSQL = strSQL & "`Title` = '"&adoTitle &"', "
strSQL = strSQL & "`Desc` = '"&adoDesc &"', "
strSQL = strSQL & "`Img` = '"&adoImg &"' "
strSQL = strSQL & "WHERE TextID = "&adoID&""

adoConn.Execute(strSQL)

end if


%>

får stadig ikke SQL ud, får bare HTTP error
Avatar billede softspot Forsker
19. oktober 2005 - 14:51 #19
Prøv lige med denne kode:

<!--#include file="database.asp"-->
<!--#include file="protect.asp"-->

<%
dim adoRS
dim adoID
dim adoTitle
dim adoDesc
dim adoImg

Set fbase = Server.CreateObject("Chili.Upload.1")

adoID = fbase.FormData("TextID")
adoTitle = Replace(fbase.FormData("Title"),"'","''")
adoDesc = Replace(fbase.FormData("Desc"),"'","''")
adoImg = fbase.FormData("Img")

strSQL = "UPDATE forside set "
strSQL = strSQL & "`Title` = '"&adoTitle &"', "
strSQL = strSQL & "`Desc` = '"&adoDesc &"', "
strSQL = strSQL & "`Img` = '"&adoImg &"' "
strSQL = strSQL & "WHERE TextID = "&adoID&""

Response.Write strSQL
%>
Avatar billede bogologo Nybegynder
19. oktober 2005 - 14:55 #20
så får jeg det rigtige ud ja.

så må det være fbase.FormData("FILE") der gir problemet?
Avatar billede softspot Forsker
19. oktober 2005 - 14:58 #21
Ja, hedder det felt ikke Img?
Avatar billede bogologo Nybegynder
19. oktober 2005 - 15:01 #22
nej feltet Img er stien til filen, altså den værdi der ligger i min database: start

FILE er det felt med gennemse knappen hvor man "sætter filen ind"

Img vil aldrig være tom, så jeg kan ikke bruge det til at lave min if sætning ud fra.
Avatar billede bogologo Nybegynder
19. oktober 2005 - 15:02 #23
kan det være fordi man ikke bare kan lave en normal request på sådan er fil felt?.

og hvis det er, hvordan kan man så tjekke om det indeholder noget?
Avatar billede softspot Forsker
19. oktober 2005 - 15:10 #24
19/10-2005 15:01:07 >> fair nok :)

19/10-2005 15:02:20 >> Nej, du kan ikke kombinere Request.BinaryRead (som upload-komponenten gør for at få data ud af request-objektet) med Request.Form. Du skal have fundet ud af hvordan du kan checke om der er uploaded en fil.

Alternativt kan du prøve dette trick:

bHasFile = false
on error resume next
bHasFile = fbase.FormData("FILE")
err.clear
on error goto 0

Implementeret i din egen kode herunder:

<!--#include file="database.asp"-->
<!--#include file="protect.asp"-->

<%
dim adoRS
dim adoID
dim adoTitle
dim adoDesc
dim adoImg

Set fbase = Server.CreateObject("Chili.Upload.1")

adoID = fbase.FormData("TextID")
adoTitle = Replace(fbase.FormData("Title"),"'","''")
adoDesc = Replace(fbase.FormData("Desc"),"'","''")
adoImg = fbase.FormData("Img")

bHasFile = false
On Error Resume Next
bHasFile = fbase.FormData("FILE") <> ""
err.clear
On Rrror Goto 0


if bHasFile then
  strSQL = "UPDATE forside set "
  strSQL = strSQL & "`Title` = '"&adoTitle &"', "
  strSQL = strSQL & "`Desc` = '"&adoDesc &"', "
  strSQL = strSQL & "`Img` = '"&adoImg &"' "
  strSQL = strSQL & "WHERE TextID = "&adoID&""
  adoConn.Execute(strSQL)

  Response.Expires = 0
  fbase.SizeLimit = 500000
  fbase.AllowOverwrite = 1
  fbase.SaveToFile(Server.mapPath("/") & "/images/" & "start.jpg")

else
  strSQL = "UPDATE forside set "
  strSQL = strSQL & "`Title` = '"&adoTitle &"', "
  strSQL = strSQL & "`Desc` = '"&adoDesc &"', "
  strSQL = strSQL & "`Img` = '"&adoImg &"' "
  strSQL = strSQL & "WHERE TextID = "&adoID&""

  adoConn.Execute(strSQL)

end if
adoConn.close

%>
Avatar billede softspot Forsker
19. oktober 2005 - 15:13 #25
Hvordan ser din form i øvrigt ud? Du har vel ikke lavet noget med accept, som udelukker jpg-filer eller sådan noget?
Avatar billede bogologo Nybegynder
19. oktober 2005 - 15:25 #26
har slet ikke lavet noget ud over standard i min form, bare et par text 1 textarea og så den FILE

dit trick virker ikke, men til gengæld har jeg selv fået det til at virke nu, utroligt så simpelt det kunne løses.


<%
dim adoID
dim adoTitle
dim adoDesc
dim adoImg

Set fbase = Server.CreateObject("Chili.Upload.1")

adoID = fbase.FormData("TextID")
adoTitle = Replace(fbase.FormData("Title"),"'","''")
adoDesc = Replace(fbase.FormData("Desc"),"'","''")
adoImg = fbase.FormData("Img")
strSQL = "UPDATE forside set "
strSQL = strSQL & "`Title` = '"&adoTitle &"', "
strSQL = strSQL & "`Desc` = '"&adoDesc &"', "
strSQL = strSQL & "`Img` = '"&adoImg &"' "
strSQL = strSQL & "WHERE TextID = "&adoID&""


adoConn.Execute(strSQL)

Response.Expires = 5

if fbase.FileSize > 0 then
fbase.SizeLimit = 500000
fbase.AllowOverwrite = 1
fbase.SaveToFile(Server.mapPath("/") & "/images/" & "start.jpg")

end if


%>


if fbase.FileSize > 0 then
gjorde tricket, ikke lige nemt når man arbejder med det SUN ASP synes jeg.

men mange tak for hjælpen med at finde problemet, bare smid et svar hvis du vil have nogle point:)
Avatar billede softspot Forsker
19. oktober 2005 - 15:36 #27
Nej, det er en smule anderledes end MS, men dog alligevel pænt med, synes jeg.

Jeg var også lige forbi SUN's dokumentation af Chili.Upload, men jeg blev så arrig over dens mangelfuldhed, at jeg skyndte mig at lukke igen (dermed overså jeg så åbenbart muligheden for at spørge på FileSize)...

Men godt du fandt en løsning! :)
Avatar billede bogologo Nybegynder
19. oktober 2005 - 15:39 #28
ja det ikke særlig veldokumenteret derinde det kan jeg godt skrive under på.

til gengæld er google vores ven, søgte lige der efter sun asp og binary read, og så kom der lige et forum med svaret hehe...
Avatar billede softspot Forsker
19. oktober 2005 - 15:46 #29
Ja, det er godt google er her! :D

Tak for point :)
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