...Personalizza la tua HomePage...

Questa Sezione è Dedicata a Tutti i Webmaster Nofiti e Non

Versione Stampabile Versione PDF Versione .DOC Versione .ZIP Scrivimi i tuoi Commenti

Array e Form
Autore :   Linguaggio :  ASP - Active Server Pages
Data :  06/11/2003 17:46:08 Accessi :  23
Possiamo considerare un array come una "megavariabile", capace di contenere al suo interno un nemero definito di valori, al contrario delle variabili scalari le quali sono associate in modo univoco ad un solo valore.
Gli array sono quindi dei contenitori multidimensionali capaci di contenere un gran volume di informazioni, pronte e disponibili in ogni momento.
Essendo indicizzati gli array necessitano di cicli for..next per l'estrazione delle informazioni in essi stipati.
Chi produce siti web a livello professionale si è sicuramente scontrato con form con un elevato numero di controlli, pensiamo ad esempi a form di contatto o registrazione che possono avere anche oltre 20-25 controlli al loro interno.

Gestire 20-25 controlli (text, radio, checkbox, select, ecc..) ed i valori ad essi associati non è del tutto semplice soprattuto quando diventa necessario applicare routine di validazione server/side più o meno complesse sui singoli campi del form e magari in seguito spedire il contenuto del form ad un database o ad un component come CDONTS per spedire un email.

Poniamo il caso che il nostro cliente compili un form di questa complessità, fatto questo invii il form ad una pagina ASP che processa i campi del form, li valida e in caso di errore ri-posta i valori al form iniziale per la correzione degli stessi.
Tornando al form iniziale il cliente troverebbe il messaggio di errore, ma, purtroppo, anche i campi vuoti là dove le risposte erano corrette.
Al poveretto non rimane che ricompilare il form daccapo e con pazienza rinviare il tutto.
Per evitare cose di questo genere provate a dare una occhiata allo scripts ASP qui sotto.

Per comodità ho disegnato due pagine ASP, la prima contiene una utile Funzione in VBS che si occupa di recuperare i valori contenuti nell'array che abbiamo definito nella testata della stessa pagina, ed inoltre il codice HTML del form vero e proprio che dobbiamo compilare.
Analizzando nel dettaglio il codice vediamo che se l'array non è pieno, cioè nel caso in cui accediamo per la prima volta alla pagina del form, i campi del form si presenteranno vuoti e quindi dovranno essere compilati dall'utente.
Una volta compilato, l'utente invia il contenuto del form alla seconda pagina ASP, la quale contiene il codice ASP per riempire l'arrayform con i valori dei controlli.
Qui viene ridimensionato e riempito (attraverso un ciclo for..next) un array bidimensionale contenente le coppie "nome del controllo / valore del controllo della form", i suddetti valori si ottengono svuotando il Request.Form del suo contenuto attraverso un ciclo for..next.
Una volta fatto questo ridimensiono l'array alle giuste dimensioni, e ne metto il contenuto in una session variable per poterlo passare da una pagina ASP all'altra.
Nell'ultima parte di codice della seconda pagina possiamo vedere a video il contenuto dell'array appena creato e ridimensionato.
La cosa si fa nteressante se premiamo il tasto back del nostro browser, difatti ci apparirà il nostro form ma con i campi riempiti dai valori precedentemente immessi.
Proviamo a cambiare alcuni valori e rinviamo il form, ripetiamo l'operazione di prima (tasto back) e vedremo il form con i nuovi valori.
Quale utilità ?
A prima vista forse non si capisce bene la comodità nell'utilizzo dell'array per la gestione dei form, ma vediamo qualche dettaglio:
L'utente non deve più riscrivere tutti i campi in caso di errore, molto comodo per form con 10-20 o più controlli Se utilizziamo una routine di validazione server/side sui valori dell'array possiamo creare dei sistemi molto sofisticati per posizionare l'utente sui campi errati.
Si scrive codice più ordinato e leggibile, con un elevato grado di riutilizzo, grazie alle function in VBS.

L'utilizzo di variabili session permette di rendere disponibile i valori dell'array lungo tutta la sessione de browser, ma questo è argomento di questo articolo.


Prima Pagina ASP


<HTML>
<%

'recupero il nome della pagina corrente
NomePagina = Request.ServerVariables("SCRIPT_NAME")
NomePagina = Mid(NomePagina, InstrRev(NomePagina, "/") + 1)
'recupero l'array dalla variabile session, se esiste ovviamente...
arrayForm = Session(NomePagina) [TOP]
Function RecuperaValArray(NomeControlloForm, ValoreAssociato)
On Error Resume Next
'cerco il numero di valori contenuti nell'array
intValoreArry = UBound(arrayForm, 2)
'se la funzione Ubound() non mi genera errori
If Err.Number <> 0 Then Exit Function
'comincio a leggere l'array per
'recuperare i valori dei controlli della precedente sessione
For intLoop = 0 To intValoreArry
'guardo se il nome del controllo è presente nell'array
If LCase(arrayForm(0, intLoop)) = LCase(NomeControlloForm) Then
'se c'è valuto la possibilità che il valore ad esso
'associato sia quello di una checkbox o un bottone di opzione, ad esempio
If ValoreAssociato <> "" Then
'se è così setto il valore appropriato
If LCase(ValoreAssociato) = LCase(arrayForm(1, intLoop)) Then
RecuperaValArray = "CHECKED"
Else
RecuperaValArray = ""
End If
Else
'se invece il valore è una stringa
RecuperaValArray = arrayForm(1, intLoop)
End If
Exit Function
End If
Next
End Function
%>
<HEAD>
<TITLE>Form per per la dimostrazione dell'uso degli array</TITLE>
</HEAD>
<BODY>
<FONT FACE="Tahoma,Arial,sans-serif" SIZE="2">

<FORM ACTION="array1.asp" METHOD="POST">[TOP]

TuoNome: <INPUT TYPE="TEXT" NAME="TuoNome" VALUE="<% = RecuperaValArray("TuoNome", "") %>"> <BR> TuoCognome: <INPUT TYPE="TEXT" NAME="TuoCognome" VALUE="<% = RecuperaValArray("TuoCognome", "") %>"> <P>
Cosa ti piace mangiare ?
<INPUT TYPE="CHECKBOX" NAME="Pastasciutta" <% = RecuperaValArray("Pastasciutta", "on") %>> Pastasciutta
<INPUT TYPE="CHECKBOX" NAME="Lasagne" <% = RecuperaValArray("Lasagne", "on") %>> Lasagne
<INPUT TYPE="CHECKBOX" NAME="Brodino" <% = RecuperaValArray("Brodino", "on") %>> Brodino
<P>

CantantiPreferiti: <INPUT TYPE="TEXT" NAME="CantantiPreferiti" VALUE="<% = RecuperaValArray("CantantiPreferiti(1)", "") %>"> <BR>
CantantiPreferiti: <INPUT TYPE="TEXT" NAME="CantantiPreferiti" VALUE="<% = RecuperaValArray("CantantiPreferiti(2)", "") %>"> <BR>
CantantiPreferiti: <INPUT TYPE="TEXT" NAME="CantantiPreferiti" VALUE="<% = RecuperaValArray("CantantiPreferiti(3)", "") %>"> <P>

Vivo in:

<INPUT TYPE="RADIO" NAME="Paese" VALUE="Italia" <% = RecuperaValArray("Paese", "Italia") %>> Italia
<INPUT TYPE="RADIO" NAME="Paese" VALUE="Europa" <% = RecuperaValArray("Paese", "Europa") %>> Europa
<INPUT TYPE="RADIO" NAME="Paese" VALUE="Altrove" <% = RecuperaValArray("Paese", "Altrove") %>> Altrove <P>
<INPUT TYPE="SUBMIT" VALUE="Submit">
<INPUT TYPE="RESET" VALUE="Reset">

</FORM></FONT>
</BODY>
</HTML>


Seconda Pagina ASP

<HTML>
<HEAD>
<TITLE>Immagazzinare i valori di un Form in un Array</TITLE>
</HEAD>
<BODY>

<%
'creiamo un array bidimensionale, un po abbondante visto
' che non conosco il numero di controlli del form
ReDim arrayForm(1, 255)
intIndice = 0
'andiamo a "loppare" Request.Form per ricevere tutte le informazioni contenute

For Each varItem in Request.Form
If Request.Form(varItem).count > 1 Then
'se il numero di controlli del form e maggiore di uno
For intLoop = 1 to Request.Form(varItem).count
'immagazzino nell'array le coppie nome-controllo/valore-controllo
arrayForm(0, intIndice) = varItem & "(" & intLoop & ")"
arrayForm(1, intIndice) = Request.Form(varItem)(intLoop)
intIndice = intIndice + 1
Next
Else
'nel caso sia presente un singolo valore nell'oggetto Request.Form invece:
arrayForm(0, intIndice) = varItem
arrayForm(1, intIndice) = Request.Form(varItem)
intIndice = intIndice + 1
End If
Next

'ridimensiono l'array alle giuste dimensioni, dato che ora
' conosco il numero di controlli del form
ReDim Preserve arrayForm(1, intIndice - 1)

'Ricevo il nome dalla variabile session
'attraverso questo script
NomePaginaPrec = Request.ServerVariables("HTTP_REFERER")
NomePaginaPrec = Mid(NomePaginaPrec, InstrRev(NomePaginaPrec, "/") + 1)

'salvo l'array nella Sessione
Session(NomePaginaPrec) = arrayForm

Response.Write "<BR><h2>---- Valori Ricevuti dal Form ed immagazzinati dall'Array----</h2><BR>"
'MOSTRO A VIDEO IL CONTENUTO DELL'ARRAY
For intIndice = 0 To UBound(arrayForm, 2)
Response.Write arrayForm(0, intIndice) & " = " _
& arrayForm(1, intIndice) & "<BR>"
Next

%>
</BODY>
</HTML>


Questi sono solo alcuni dei vantaggi ottenibili dall'uso degli array, in seguito scrivero altri articoli per mostrare la validazione applicata alle form con array, la gestione dei valori del form all'interno di un database e la creazione via CDONTS di un report email personalizzato che sfrutti i valori contenuti nell'array.
Ed anche per questa volta è tutto.
Buona programmazione!

Ritorna


 NEWS 
12/09/2007 13:08:14
PAURA
Marco Travaglio con Gomez e Crozza ed Elio

11/09/2007 14:44:48
IL V-DAY: un evento NUOVO !!!!!
Aria fresca in Parlamento articolo del Sole24ore: http://www.ilsole24ore.com/art/SoleOnLine4/At...


28/06/2007 14:20:55
LEOPARDI SALUTI i 500
Certo ragazzi, anche noi nel nostro piccolo cresciamo, e Leopardi è il cinquecentesimo saggio nella ...


12/04/2007 11:31:15
ATTENZIONE A CheckMessenger.NET! , è una TRUFFA
Ennesito sito truffaldino: si chiama CheckMessenger e vi promette di mostrarvi se i vostri contatti ...


26/01/2007 11:58:34
AGGIORNATE TUTTE LE SEZIONI
AGGIORNATE TUTTE LE SEZIONI Sì, cari amici. Ho provveduto ad aggiornare le principali sazioni de...


:: ELENCO NEWS ::

  
Valid XHTML 1.0! Valid CSS!