Vilken rad pekar felmeddelandet på?
När du laddar upp filer kan du inte använda request.form, utan du måste använda uppladdningskomponentens egen metod för detta.
3 svar · 258 visningar · startad av zlakker
Jag håller på att få en upload att fungera. Komponenten jag använder är persits.upload.
Jag har inga problem att ladda upp filer första gången.
Problemet kommer när jag ska göra en uppdatering.
Får felmeddelandet "Index is out of range".
Jag har säkert inte gjort koden på bästa sätt och uppställningen är heller inte den bästa, det vet jag :)
Jag har tänkt på följande sätt:
Om rutan för bilden inte är tom så lägg in samtliga fält i databasen, annars lägg bara in textfälten och inte de med filuppladdningen. Eftersom jag får felet redan innan något är inlagt så borde det ha med själva uppladdningen att göra.
<% bildcheck = request.form("fileorg") %>
<% if bildcheck <> "" then %>
<%
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.OverwriteFiles = False
On Error Resume Next
Upload.SetMaxSize 20000000 ' Limit files to 20MB
Count=Upload.Save(Server.MapPath("/images/upload"))
Set File = Upload.Files(2)
%>
<% If Err <> 0 Then %>
<FONT SIZE=3 FACE="Arial" COLOR=#0020A0>
<H3>The following error occured while uploading:</h3>
</FONT>
<FONT SIZE=3 FACE="Arial" COLOR=#FF2020>
<h2>"<% = Err.Description %>"</h2>
</FONT>
<FONT SIZE=2 FACE="Arial" COLOR="#0020A0">
<A HREF="admin_nyheter.asp?alt=show">Försök igen</A>.
</FONT>
<% Else
strSQL = "UPDATE tblNews SET"
strSQL = strSQL & " topic='"& upload.Form("topic") &"',"
strSQL = strSQL & " content='"& upload.Form("content") &"',"
strSQL = strSQL & " linktext='"& upload.Form("linktext") &"',"
strSQL = strSQL & " linkurl='"& upload.Form("linkurl") &"',"
strSQL = strSQL & " fileorg='"& Upload.Files("fileorg").ExtractFileName &"',"
strSQL = strSQL & " filepre='"& filepre = Upload.Files("filepre").ExtractFileName &"'"
strSQL = strSQL & " WHERE id="& Request.QueryString("userid")
Connect.Execute(strSQL)
Set Connect = nothing
end if
%>
<%
else
strSQL = "UPDATE tblNews SET"
strSQL = strSQL & " topic='"& Request.Form("topic") &"',"
strSQL = strSQL & " content='"& Request.Form("content") &"',"
strSQL = strSQL & " linktext='"& Request.Form("linktext") &"',"
strSQL = strSQL & " linkurl='"& Request.Form("linkurl") &"'"
strSQL = strSQL & " WHERE id="& Request.QueryString("userid")
Connect.Execute(strSQL)
Set Connect = nothing
end if
%>
Vilken rad pekar felmeddelandet på?
När du laddar upp filer kan du inte använda request.form, utan du måste använda uppladdningskomponentens egen metod för detta.
Det verkar ha och göra med när jag skriver in raderna för att föra in värdet på filnamnet in i databasen.
Skriver jag såhär så fungerar det INTE, alltså inget uppdateras:
Själva koden för att hämta ut ett filnamn är rätt men kanske inte rätt i själv sql-koden. Kan man inte göra så att man först hämtar ut filnamnet och lägger in en variabel och sedan hämtar den i sql-satsen. Hur skriver man då?
<%
fileorg = Upload.Files("fileorg").ExtractFileName
filepre = Upload.Files("filepre").ExtractFileName
strSQL = "UPDATE tblNews SET"
strSQL = strSQL & " topic='"& upload.Form("topic") &"',"
strSQL = strSQL & " content='"& upload.Form("content") &"',"
strSQL = strSQL & " linktext='"& upload.Form("linktext") &"',"
strSQL = strSQL & " linkurl='"& upload.Form("linkurl") &"',"
strSQL = strSQL & " fileorg='"& Upload.Files("fileorg").ExtractFileName &"',"
strSQL = strSQL & " fileper='"& Upload.Files("filepre").ExtractFileName &"'"
strSQL = strSQL & " WHERE id="& Request.QueryString("userid")
Connect.Execute(strSQL)
Set Connect = nothing
end if
%>
Skriver jag såhär så fungerar all uppdatering men då får jag givetvis inte in något filnamn i databasen.
<%
strSQL = "UPDATE tblNews SET"
strSQL = strSQL & " topic='"& upload.Form("topic") &"',"
strSQL = strSQL & " content='"& upload.Form("content") &"',"
strSQL = strSQL & " linktext='"& upload.Form("linktext") &"',"
strSQL = strSQL & " linkurl='"& upload.Form("linkurl") &"'"
strSQL = strSQL & " WHERE id="& Request.QueryString("userid")
Connect.Execute(strSQL)
Set Connect = nothing
end if
%>
Letade lite mer bland gamla inlägg och hittade en lösning.
Såhär ser själva uppdateringen ut nu. Det verkade vara fel i min gamla if sats som kollade ifall fältet var tomt.
Nu gör jag istället så att om det inte är något i uppladdningsfältet så plockar hämtar jag det som står i databasen innan och sätter in det en gång till så att man får samma. Kanske inte det bästa men det fungerar :)
<%
Set Upload = Server.CreateObject("Persits.Upload.1")
Upload.OverwriteFiles = False
On Error Resume Next
Upload.SetMaxSize 20000000 ' Limit files to 20MB
Count=Upload.Save(Server.MapPath("/images/upload"))
Set file = Upload.Files("fileorg")
Set file = Upload.Files("filepre")
If not file is nothing then
fileorgin = Upload.Files("fileorg").ExtractFileName
fileprein = Upload.Files("filepre").ExtractFileName
Else
Visa = "SELECT * FROM tblNews WHERE id = " & Request.Querystring("userid")
RecSet.Open Visa, Connect, 3, 3
fileorgin = RecSet("fileorg")
fileprein = RecSet("filepre")
RecSet.Close
End if
strSQL = "UPDATE tblNews SET"
strSQL = strSQL & " topic='"& upload.Form("topic") &"',"
strSQL = strSQL & " content='"& upload.Form("content") &"',"
strSQL = strSQL & " linktext='"& upload.Form("linktext") &"',"
strSQL = strSQL & " linkurl='"& upload.Form("linkurl") &"',"
strSQL = strSQL & " fileorg='"& fileorgin &"',"
strSQL = strSQL & " filepre='"& fileprein &"'"
strSQL = strSQL & " WHERE id="& Request.QueryString("userid")
Connect.Execute(strSQL)
Set Connect = nothing
end if %>