webForumDet fria alternativet

Index out of range

ASP

3 svar · 258 visningar · startad av zlakker

Medlem sedan apr. 2001227 inlägg
Frågan#1

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
			%>
Medlem sedan juni 200032 967 inlägg
#2

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.

Medlem sedan apr. 2001227 inlägg
#3

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
			%>
Medlem sedan apr. 2001227 inlägg
#4

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 %>
257 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)