asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 3512
ASPCode.it - Store

  > > Articoli

Request.Form avanzato

Data di pubblicazione: 25/06/2002        Voto della community: 4,35 (Votanti: 51)


La raccolta di informazioni in una pagina e il loro invio (e recupero) in un’altra è certamente una di quelle problematiche che un programmatore ASP si trova ad affrontare più di frequente.
Spesso però si rimane vincolati a quel modo di "procedere" che non è esattamente il massimo in termini di prestazioni e di praticità di utilizzo.
In questa sede perciò vaglieremo metodi alternativi – e avanzati - per il recupero dei dati "sottomessi" da un FORM.

Poniamo il caso del classico FORM di richiesta informazioni.
Tipicamente avremo una pagina HTML con vari campi d'input (nome, cognome, indirizzo, email, etc.).
All'inizio della pagina ASP che richiameremo (tramite POST) dalla pagina HTML, di solito usiamo questo codice:

<%
nome = Request.Form("nome")
cognome = Request.Form("cognome")
indirizzo = Request.Form("indirizzo")
...
%>

e così via per tutti gli altri.

Non è però questo il miglior modo di procedere.

Innanzitutto, per ogni campo di input nel file HTML, dovremo aggiungere il corrispondente Request nel file ASP.
Se poi nel FORM HTML c'è un campo che non ci interessa (es. il Fax), dovremo eliminare anche il corrispondente Request.
Quello che ci serve è un metodo per elaborare i Request nel file ASP che sia indipendente dal fatto che utilizziamo 2 piuttosto che 20 campi di input nel FORM.
Ebbene, questo metodo esiste (io stesso lo utilizzo con profitto nei miei file ASP che "raccolgono" le informazioni postate da un FORM).
Ma vediamo prima il codice e poi lo commenteremo:

<%
For Each Item In Request.Form
  strTemp = Item & "= Request.Form(""" & Item & """)"
  Execute(strTemp)
Next
%>

Che cosa fa questo piccolo ciclo? E' presto detto.
Poniamo il caso di un FORM con i seguenti campi di input:

1.  <input type=text name="nome" etc.
2.  <input type=text name="cognome" etc.
3.  <input type=text name="indirizzo" etc.
4.  <input type=text name="email" etc.

Dopo aver fatto il POST di questo FORM al nostro file ASP, ecco cosa produrrebbe il nostro codice (che metteremo all'inizio del file ASP in questione):

<%
nome = Request.Form("nome")
cognome = Request.Form("cognome")
indirizzo = Request.Form("indirizzo")
email = Request.Form("email")
%>

Sì, avete capito bene: quelle 4 righe di codice fanno il Request per ogni campo del FORM, in più assegnano il valore restituito dai Request a variabili – create a run-time – che hanno gli stessi nomi dei campi input d'origine!

Altro esempio (questo è un classico).
Dobbiamo "riempire" il body di una email – che poi spediremo – con i dati prelevati da un FORM.
Di solito, nel file ASP richiamato dal POST, faremmo una cosa del genere:

<%
strBody = ""
strBody = strBody & "nome: " & Request.Form("nome") & "<BR>"
strBody = strBody & "cognome: " & Request.Form("cognome") & "<BR>"
strBody = strBody & "indirizzo: " & Request.Form("indirizzo") & "<BR>"
strBody = strBody & "email: " & Request.Form("email") & "<BR>"
%>

E così via per gli altri campi.
Ma ecco come farlo in maniera del tutto automatica:

<%
strBody = ""
For Each Item In Request.Form
  strBody = strBody & Item & ": " & Request.Form( Item) & "<BR>"
Next
%>

Insomma, una pacchia! :-)

C'è però un problema.
Come ho avuto modo di verificare, spesso – quasi sempre – la "For Each" (per motivi che non stò qui a spiegare) restituisce l'elenco dei campi del FORM in un ordine ARBITRARIO!
E cioè, prendendo come esempio l'elenco precedente (nome, cognome, indirizzo, email etc.) , la "For Each" potrebbe ritornarci questa lista nell'ordine seguente: nome,indirizzo, cognome, email etc.

Se per noi l'ordine degli elementi è importante, ci viene in aiuto il Request.Form.Count:

<%
strBody = ""
For i = 1 To Request.Form.Count
  strBody = strBody & Request.Form.Key(i) & ": " & Request.Form.Item(i) & "<BR>"
Next
%>

In questo modo avremo la garanzia che le coppie "chiave – valore" (es. email = antonio.paterno@aspcode.it oppure nome = "Antonio") verranno processate nell'esatto ordine con cui appaiono nel FORM.

Arrivederci alla prossima!




Utenti connessi: 3512