webForumDet fria alternativet

Återskicka ett formulärresultat?

ASP

13 svar · 423 visningar · startad av Gardell

Medlem sedan juli 2002688 inlägg
Frågan#1

Hejsan.

Om något är tomt i ett formulär vill jag återskicka det med ett felmeddelande och allt annat i formuläret, så inget ska behövas skrivas om.

Hur löser jag detta smidigast? Jag tänkte mig en querystring, eller kanske en session, men hur skulle den då se ut?

Min kod då, som inte funkar (hjälp :bire )

If Request.Form("name") = "" Then

Response.Redirect ("do.asp?do=write&wrong=name&name=" & Request.Form("name"))&message=" & Request.Form("message"))&homesite=" & Request.Form("homesite"))&email=" & Request.Form("email")))

Och vid utskriften (vet ej om den funkar):

If Request.Querystring("name")= "" Then Response.Write(Request.QueryString("name"))

Problemet är alltså att koden inte fungerar. Vore även tacksam om någon kommer på en annan briljant lösning :bire

Medlem sedan mars 20033 686 inlägg
#2

Skapa en If sats för att kolla om fältet är tomt och om du ska kolla felra fält kan du ju skapa flera If satser som du sedan skapar sessioner i, om man nu kan säga så

typ:

If Request.Form("name") = "" Then
Session("name") = "no"
Response.Redirect "do.asp"
End If

på sidan do.asp kan du ju sedan ha typ:

<%
If Session("name") = "no" Then
Response.Write "Du fyllde inte i något namn!"
End If
%>

För att sedan behålla det som skrivits i boxarna så kan du ju göra typ så här:

<input type="text" name="namn" value="<%=Request.Form("namn")%>">

Jag är skit trött, så kanske jag har missuppfattat men ändå.
Sen är säkert koden skit också, men jag bara tipsar :P ;) :D

Medlem sedan sep. 2000667 inlägg
#3

Annars kan du ha allt på en sida. Enkelt förklarat:

if request.querystring("do") = "" Then %>
' Kod för formulär
<form action=dennasida.asp?do=something> osv
<input type="text" name="namn" value="<%=Request.Form("namn")%>">
</form>
else
' Skicka in datan i databasen, men kolla först om nåt är tomt
if request.form("Namn") = "" Then
response.write "Du glömde fylla i ditt namn"
else
INSERT INTO bla bla bla 

response.redirect "tack.asp"
End if

End if
Medlem sedan sep. 2000667 inlägg
#4

Jag tror att ifsatser på nåt sätt är bättre än sessions.

Medlem sedan mars 20033 686 inlägg
#5

Men han kanske vill ha felmeddelandet på samma sida som han har forumlärfälten. :)

Medlem sedan sep. 2000667 inlägg
#6

Det är ju det han får.

Det går ju tex att göra så här:

Namn: <input type="text" name="namn" value="<%=Request.Form("namn")%>">
<%
if request.form("Namn") = "" Then
response.write "<b>Du måste fylla i denna ruta!</b>"
End if
%>
<br>
Medlem sedan juli 2002688 inlägg
#7

Alltså, jag har en slags "hjärna" i min applikation, vilket allting skickas till, och retuneras om något är fel.

Men som det är nu så retuneras det, och alla fälten är tomma.

Ungefär så. Därför tror jag mest på magnusfernstroms teori.

magnusfernstrom skrev:

För att sedan behålla det som skrivits i boxarna så kan du ju göra typ så här:

<input type="text" name="namn" value="<%=Request.Form("namn")%>">

Frågan är bara, går det? För där kommer inte ligga på den sida det skickas till allra först, om du förstår.

Medlem sedan okt. 20005 273 inlägg
#8

Hej.
Min åsikt är att du ska tänka om. Det blir mycket smidigare att ha valideringen på samma sida som formuläret. För tänk om din applikation växer och det kanske blir ett hundratal sidor som ska valideras i din hjärna. Då kan det lätt bli svårt att göra en felsökning.

Det var ett tag sen jag höll på med ASP/VBScript men jag skramlade ihop ett exempel på hur jag gjorde mina sidor förut.

[red]
<%@ Language=VBScript%>
<%
'~~~~~~~~~~~~~~~~~~~~~~~
'Here i use Option Explicit, so that i must declare all my variables
	Option Explicit
'~~~~~~~~~~~~~~~~~~~~~~~
'Here i set the Response.Buffer to TRUE, so that the hole page renders before it´s beeing send to the client
	Response.Buffer = True
'~~~~~~~~~~~~~~~~~~~~~~~
'Here i declare all my variables
	Dim strName 'as string = The name 
	Dim strPassword 'as string = The password
	Dim strMessage 'as string = The ErrorMessage to show
'~~~~~~~~~~~~~~~~~~~~~~~
'Here i check if the page is a postback
	If Request.Form > "" Then
		'Here i populate my variables
			strName = Trim(Request.Form("strName"))
			strPassword = Trim(Request.Form("strPassword"))
			'Here i check if the values are correct
				If Not Len(strName) > 0 OR Not Len(strPassword) > 0 Then
					strMessage = "Du måste fylla i alla obligatoriska fält"
					Call Page
				Else
					'Here i make an Sql-statement
					
					'Here i send a ok to the page
					strMessage = "fasiken va bra det gick"
					Call Page
				End If
	Else
		Call Page
	End If	
Sub Page
%>
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"
	   "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html>
	<head>
		<title>Icaaq</title>
		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5" />
		<meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0" />
	</head>
	<body>
		<div class="shrek">
			<form action="<%=Request.ServerVariables("SCRIPT_NAME")%>" method="post">
				<%
				if strMessage > "" then Response.Write strMessage & "<br/>"
				%>
				<span class='inputdescriptionreq'>Namn:</span> <input type='text' name='strName' value='<%=strName%>'><br />
				<span class='inputdescriptionreq'>Lösenord:</span> <input type='password' name='strPassword'><br />
				<input type='submit' name='submit' value='anmäl'/>
			</form>
		</div>
	</body>
</html>
<%
End Sub
%>
[/red]

Nu säger inte jag att detta är det korrekta sättet att arbeta men för mig var det väldigt smidigt och lätt att göra eventuella felsökningar.

mv icaaq

Medlem sedan mars 20033 686 inlägg
#9

Jadu. du skulle ju kunna lägga det som skrivits i textboxen i session också!
Eller så kan du ju köra på input type="hidden".

Medlem sedan juni 200032 967 inlägg
#10

Normalt när jag ska posta vidare formulär låter jag min asp-kod producera ett nytt formulär, och posta det med javascript på lämpligt ställe.

Response.write "<form action=""fjoo.asp"" method=""post"">"
for each strFormVar in Request.Form
       Response.write "<input type=""hidden"" name=""" & strFormVar & """ value=""" & Request.Form(strFormVar) & """>"
Next
Response.write "</form>"

...

Response.write "<script>document.forms[0].submit();</script>"

Det går vällan att använda XMLHTTP för det också, men det har jag inte provat.

Mvh

Medlem sedan apr. 20031 660 inlägg
#11

HEJ!

Gardell skrev:

Om något är tomt i ett formulär vill jag återskicka det med ett felmeddelande och allt annat i formuläret

Varför inte använda javascriptvalidering, då får man reda på att det är fel, och sätter focus till fältet som ska fixas?

Som bonus slipper du hålla servern sysselsatt med saker som besökarens dator kan reda ut själv.

Eftersom ingen har förslagit det självklara, borde jag kanske bifoga en brasklapp med en bild på mig och en cykel? :e

Medlem sedan sep. 2000667 inlägg
#12

Kanske en kombination är bättre? Javascript som hindrar onödig belastning från servern. Asp för att stoppa fel när java är avstängt.

Medlem sedan mars 20033 686 inlägg
#13

Alla tjatar om huyr mycket prestanda det snor av servern!
Men ärligt talat, hur mycket sölar det egentligen ner om man validerar med hjälp av ASP i stället för Javascript?

Medlem sedan juni 200032 967 inlägg
#14

Men ärligt talat, hur mycket sölar det egentligen ner om man validerar med hjälp av ASP i stället för Javascript?

Det är ganska överkomligt, men det beror såklart på en massa saker. Jag tycker att man skall validera med ASP (gärna i kombination med javascript, som Inferis skriver), eftersom alla klienter inte har javascript aktiverat.

256 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)