Percorrer campos de formulário complexos em ASP

Não deveria significar um problema percorrer os campos de formulário correntes, como campos de texto, botões de radio, textareas, etc, onde só se envia um dado vinculado a tal campo. Faz-se com o método form do objeto request, indicando entre parênteses o nome do campo que queremos percorrer.

minha_variavel = request.from(“nome_campo”)

Nós neste artigo vamos tratar de explicar um método para percorrer dados um pouco mais complexos, onde podem nos enviar vários valores dentro de um mesmo campo de formulário. Teoricamente, vamos tratar de extrair os dados de um campo de formulário “Select multiple” que se consegue com as seguintes etiquetas HTML:

<select name=”time” multiple>
<option value=”Madrid”>Madrid
<option value=”Barcelona”>Barcelona
<option value=”Valencia”>Valencia
<option value=”Bilbao”>Bilbao
<option value=”Sevilla”>Sevilla
<option value=”ATMadrid”>At. Madrid
<option value=”Cadiz”>Cadiz
<option value=”Dep. Coruña”>Dep. Coruña
<option value=”Santander”>Santander
</select>

Colocamos um select normal que tem o atributo múltiplo, que vemos que não se iguala a nada, simplesmente se coloca se quisermos que o usuário possa selecionar várias opções. Para isso, deveria selecionar uma das opções e com a tecla de Control (Ctrl) ou maiúsculas (A setinha para cima) selecionar outra opção. Se se utiliza a tecla de Control se selecionam as duas opções, a que havia e a nova. I se utiliza maiúsculas se selecionariam todas as opções entre a primeira e a última. Podemos praticar a selecionar várias opções, para quem o deseje, com o campo de abaixo.

Como chegam os dados

Quando recebemos este campo de formulário nos chegam todos os valores que um usuário tiver selecionado, separados por vírgulas. Assim, um valor possível que se pode receber pelo formulário seria o seguinte:

Madrid, Barcelona, Valencia, ATMadrid, Dep. Coruña

Este valor o obteremos utilizando o objeto request de ASP, tal como comentávamos antes.

request.form(“time”)

O método request.form nesse caso devolve, como indicávamos, todos os times selecionados separados por vírgulas. De maneira adicional, podemos tratar o valor devolvido como uma coleção, que é uma estrutura de dados especial, parecida aos arrays, que se percorrem facilmente com um loop FOR EACH.

Dim times(), I Em algum caso pode nos interessar inverter a informação dessa coleção a um array para tratar logo dos times em outros processos. Como prática também pode ser útil ver como se faria e de passo, conhecemos um pouco melhor o loop FOR EACH.
Construir o array

Nosso exercício requer um array que tenha um número indeterminado de campos, que depende do número de valores que recebamos desde o campo <select> do formulário. Se quisermos fazer isto bem vamos necessitar um array dinâmico, ao que iremos atribuindo posições segundo o necessitemos.

dim times()
redim times(0)

Assim criamos o array e lhe indicamos que vamos utilizar como índice máximo o zero, que corresponde com um campo, times(0).

Script para colocar os dados em um array

Vamos fazer um script que se encarregue de preencher o array com todos os valores do campo. Tal script percorre a lista de valores que chegam do formulário e os introduz no array, ao mesmo tempo em que vai aumentando em um campo o espaço do array antes de adicionar um novo elemento.

I = 0
For Each Valor In Request.Form(“time”)
Redim Preserve times(I)
times(I) = Valor
I = I + 1
Next

Começamos o script declarando o array (sem definir seus campos, para poder redimensiona-lo dinamicamente) e uma variável para levar a conta dos valores introduzidos, que iniciamos a zero na seguinte linha.

O loop FOR EACH percorre cada uma das posições da coleção Request.Form(“time”) e em cada iteração introduz em uma variável, neste caso chamada Valor, o conteúdo da posição atual. Uma vez dentro do loop se redimensiona o array preservando seu conteúdo prévio (redim preserve) para que contenha as posições necessárias para armazenar os valores que vamos extraindo da coleção. Dito de outra forma, em cada iteração criamos uma nova posição (salvando todas as posições anteriores) e introduzimos na posição criada o conteúdo da variável. Valor, que salvava a posição atual da coleção. Por último, incrementamos em um o número de posições que deve conter o array, para utilizá-lo se voltamos a passar pelo loop.

Nota: Podíamos ter criado um array utilizando a função split, incorporada em VBScript. Tal função recebe uma cadeia e um separador e devolve um array onde em cada campo se introduziu uma sub-cadeia criada ao romper por cada separador.

De modo que, a partir do request.form(“time”) (que é também uma cadeia onde cada valor aparece separado por uma vírgula), aplicando a função Split e indicando que o separador é o caractere vírgula (,), obteremos o array desejado.

times = Split(request.form(“time”),”,”)

Este método é muito rápido e simples, mas poderia falhar se um dos valres do select contiver uma vírgula.

Espero que com tudo isso, tenhamos podido encontrar sentido ao exercício e seja válido como prática de VBScript e da tecnologia ASP.

Fonte: http://www.criarweb.com/artigos/percorrer-campos-formularios-complexos.html

Deixe um comentário