Script asp: Prelevare campi di un form senza conoscerne il nome

   difficoltà:  script script script script script

Download
Script simili
28/5/2007


Questo scipt può risultare utile se dobbiamo prelevare una certa quantità di valori da un form, magari senza conoscere con precisione il nome dei campi. Creeremo quindi in automatico una serie di variabili con lo stesso nome dei campi del form prelevandone il valore dai campi stessi.
Vediamo un esempio base di form di invio dati

<form action="ricevi.asp" method="POST">
<input type="text" name="nome" value="Fabio">
<input type="text" name="cognome" value="Xxxxx">
<input type="text" name="telefono" value="012345678">
<input type="Submit" value="Invia">
</form>
Se nella pagina ricevi.asp avessimo:
<%
ElencoPost = Request.Form
%>
La variabile ElencoPost risulterebbe una stringa con tutti i dati inviati dal form in stile querystring:
nome=Fabio&cognome=Xxxxx&telefono=012345678
avremo quindi l'elenco di tutte le variabili e dei rispettivi valori.
Con la funzione split potremo dividere la stringa usando come separatore & creando un array ArrayDati contenete i valori:
ArrayDati = Split(Request.Form, "&")
che restituirà:
ArrayDati(0) = "nome=Fabio"
ArrayDati(1) = "cognome=Xxxxx"
ArrayDati(2) = "telefono=012345678"
Ottenuto questo array potremmo suddividere ancora ciascun array con la funzione split usando come separatore =. Avremo quindi per ogni voce:
ArrayValori = Split(ArrayDati(0), "=")
che in questo caso restituirà un array:
ArrayValori(0)= "nome"
ArrayValori(1)= "Fabio"
Il primo valore conterrà la chiave, il secondo il valore relativo.

Come usare questi dati?
La funzione Execute ci da la possibilità di trasformare una stringa in un operazione, per cui scrivere:
Execute("nome = ""Fabio""")
valuta l'espressione nome = "Fabio" e assegna alla variabile nome il valore Fabio, per cui facendo lo stesso per ogni valore dell'array otterremo
Execute(ArrayValori(0) & "=""" & ArrayValori(1) & """")
Così per tutti i valori associando al nome variabile il rispettivo valore, con l'accortezza di trasformare i caratteri di tipo url in caratteri standard con la funzione URLDecode

Vediamo lo script completo:
<%
function URLDecode(stringa)
for ch = 1 to 255
stringa = Replace(stringa, Server.URLEncode(chr(ch)),chr(ch))
next
URLDecode = stringa
end function

Dim FormVoice
Set FormVoice = CreateObject("Scripting.Dictionary")
ArrayDati = Split(Request.Form, "&")
for a=0 to ubound(ArrayDati)
ArrayValori = Split(ArrayDati(a), "=")
Execute(URLDecode(ArrayValori(0)) & " = """ & URLDecode(ArrayValori(1)) & """")
next
%>
Avremo creato quindi una serie di assegnazioni valutate dalla funzione Execute del tipo:
nome = "Fabio"
cognome = "Xxxxx"
telefono = "012345678"
Questo script può risultare particolarmente utile nel caso non conoscessimo con esattezza il numero dei campi del form e il loro nome
Se dovessimo inserire i dati in un database bisognerà anche stare attenti a possibili SQL injection per cui potremmo avere:
Execute(URLDecode(ArrayValori(0)) & " = """ & replace(URLDecode(ArrayValori(1)),"'","''") & """")






Commenti


  francesco

13/11/2008 9:45:33

ciao,
ho verificato che questo script non funziona con i checkbox nel caso quest'ultimo non viene selezionato. Puoi aiutarmi?



Lascia un commento


Codice di controllo*:
Nome*:
Email/Link:
Testo*:
 
I campi contrassegnati con * sono obbligatori.