|
|
|

|

|
Dicas
|

|
ASP - Active Server Page (Miscelâneas)
|
|
 |
Título da Dica: Request.Form ( ) aprofundado
|
 |
|
|
Postada em 27/10/2003 por ^HEAVY-METAL^
O sintax de Request.Form syntax é muito simples e curto:
Request.Form(elemento)[(index)|.Count]
Vamos lá a ver como isto trabalha para o seu melhor interesse. Vamos começar com uma simples página que responde a um input de um utilizador.
-- page8.asp –
<html> <head> <title>Request.Form</title> </head> <body> <% If Not Request.Form("Name")="" Then %> Thanks <%=Request.Form("Name")%> !<br> <% End If %> <form method="post" action="page8.asp"> Give me your name:<input type="text" value="" name="Name"> <br> <input type="submit"> </form> </body> </html>
-- fim da página –
Quando o Script é chamado pela primeira vez, por um link normal, não existem dados do form nele, então um pedido a Request.Form("Name") devolve uma string vazia. A página devolve então um formulário com 2 inputs. Um input de texto com o nome ‘Name’ e outro com o botão de submit sem nome e sem 'value'. quando o formulário é submetido a usar o botão de submit, a mesma página é chamada com POST (nota: o método do formulário). Agora o Request.Form("Name") tem um valor nele ( mesmo que seja uma string vazia), e ( se não for uma string vazia ) o if vai disparar uma mensagem de agradecimento. Agora muitas questões podem crescer aqui. O que acontece ao botão de Submit? Quais as outras hipóteses de disparo? É o ‘Name’ diferente de ‘name’? Vamos reescrever o código e achar algumas respostas.
-- page8a.asp –
<html> <head> <title>Request.Form</title> </head> <body> Request.Form Statistics:<br> Number of inputs:<%=Request.Form.Count%><br> <%For k=1 To Request.Form("Name").Count%> Request.Form("Name")(<%=k%>)=<%=Request.Form("name")(k)%><br> <%Next%> <% If Not Request.Form("Name")="" Then %> <br> Thanks <%=Request.Form("name")%> ! <% End If %> <hr> Form without name on submit input:<br> <form method="post" action="page8a.asp"> Give me your name:<input type="text" value="" name="Name"> <br> <input type="submit"> </form> <hr> Form with name on submit input:<br> <form method="post" action="page8a.asp"> Give me your name:<input type="text" value="" name="Name"> <br> <input type="submit" name="submit"> </form> <hr> </body> </html>
-- fim da página –
Isto devolve o numero de inputs que nós temos na colecção do request.Form. Na primeira chamada, esta página vai indicar que não hà inputs ( itens na colecção do Request.Form ). Vai também mostrar 2 forms separados por breasks.O primeiro não tem um nome para o botão de Submit. Se escrever algo na zona de input e submeter o formulário, vai ver que existe um input e o seu valor.Se fizer o mesmo com o segundo formulário, vão existir 2 inputs, name e submit, como estão chamados no HTML. No tipo de input Submit, se indicar o nome, o par name/value vai ser dado pelo browser para o servidor web. A pergunta é ‘name' diferente de ‘Name’ quando do uso de Request.Form.
Vamos então mudar de tópico. Como usamos uma Select Box com multiplas hipóteses? Uma vez mais, vamos reescrever o nosso código e ver o que vai acontecer.
-- page8b.asp –
<html> <head> <title>Request.Form</title> </head> <body> <% If Not Request.Form("Name")="" Then %> Thanks <%=Request.Form("Name")%> !<br> <%For k=1 To Request.Form("Name").Count%> Request.Form("Name")(<%=k%>)=<%=Request.Form("name")(k)%><br> <%Next%> <% End If %> <form method="post" action="page8b.asp"> Give me your name:<select name="name" size="5" multiple> <option>Sergio</option> <option>Pereira</option> <option>Stephen</option> <option>Wynkoop</option> <option>Oberonsis</option> </select> <br> <input type="submit"> </form> </body> </html>
-- fim da página –
Com o atributo multiplo, o Select pode devolver várias ou nenhuma opção.Seleccione vários e veja o reultado. Request.Form("Name").Count vai devolver o numero de opções escolhidas e o loop com o For, vai mostrar cada uma dessa opções escolhidas Request.Form.(k), onde k é o index da opção escolhida.De notar que se nenhuma opção for escolhida Request.Form("Name") vai ser uma string vazia, e então Request.Form("Name").Count vai devolver o numero 0. Se existem várias opções escolhidas o mesmo vai devolver os mesmos concatenados e separados por virgulas, Request.Form("Name")(k) vai devolver a opção k escolhida. De notar que o index k deverá estar entre 1 e Request.Form("Name").Count .
Vamos nos mover para sabermos como podemos usar Request.Form para julgar futuras acções do nosso script. Algo simples que vai dizer ‘Welcome ’ se carregar em ‘Enter’ e ‘Goodbye’ se clicar em ‘Leave’.
-- page8c.asp –
<html> <head> <title>Request.Form</title> </head> <body> <% If Not Request.Form("Name")="" Then Select Case Request.Form("action") Case "Enter" %> Welcome <%=Request.Form("Name")%> !<br> <% Case "Leave" %> Goodbye <%=Request.Form("Name")%> !<br> <% End Select End If %> <form method="post" action="page8c.asp"> Give me your name:<input type="text" name="Name" value="<%=Request.Form("name")%>"> <br> <input type="submit" name="action" value="Enter"> <input type="submit" name="action" value="Leave"> </form> </body> </html>
-- fim da página –-
Temos 2 submits com o mesmo nome, mas com values diferentes. Apenas o value do submit que carregamos vai ser dado ao servidor, assim podemos fazer um teste no value, e fazer a acção direccionada para o mesmo.
Como pode ver, com a colecção de Request.Form é muito simples. Existe ainda algo que deve ser dito, quando do uso de Check Boxes num formulário de HMTL, deve de o testar com
If Request.Form("checkbox")="" Then ‘Code to do when checkbox selected Else ‘Code to do when checkbox is not selected End If
porque devolve ‘on’ quando seleccionado e nada quando não.
T+,
|
|
|
|

|