|

NUOVA VERSIONE DEL SONDAGGIO (versione intermedia)

In
queste pagine vedremo come migliorare il sondaggio realizzato
nel corso delle precedenti lezioni.
Per quanto riguarda il sondaggio sono
disponibili tre versioni: la versione 'base'
è la più semplice soprattutto per quanto
riguarda la comprensione del codice ed è quella
che abbiamo già visto negli esempi precedenti.
In questa versione 'intermedia' il codice è leggermente
più complesso ma decisamente più performante
nell'esecuzione.
L'ultima versione ('avanzata')
invece consente una completa gestione del sondaggio
direttamente online: sarà così possibile
modificare il sondaggio, farne partire uno nuovo, modificare
le opzioni disponibili...
In questa versione utilizzeremo una nuova funzionalità
chiamata group by mediante la quale è
possibile raggruppare dei record in base ai valori presenti
in un campo.
A questo proposito desidero ringraziare Paolo
De Nictolis, PhD Eng. Junior Programmer in R&D
Department, Sysdata Sud Srl, che con grande competenza
e disponibilità ha riscritto il codice di queste
pagine.
In questa nuova versione del sondaggio è stato
inoltre aggiunto un controllo che consente di evitare
che un utente possa votare più di una volta,
rendendo così più attendibile il sondaggio
stesso.
Inoltre è stata aggiunta una pagina che consente
di azzerare tutti i voti precedentemente espressi.
INDEX.HTM
La pagina index.htm è la stessa che abbiamo
realizzato nella prima versione
del sondaggio, quindi non richiede ulteriori approfondimenti.
VOTA.ASP
Una volta selezionata un'opzione del nostro sondaggio
viene richiamata la pagina 'vota.asp', la quale deve
verificare che l'utente non abbia già votato
ed aggiungere il voto al nostro database.
Per
sapere se un utente ha già votato o no, utilizziamo
l'oggetto session (di cui abbiamo
già parlato): quando un utente ha votato,
viene creata una session, qundi se questa session esiste
significa che l'utente ha già dato il suo voto
e quindi non potrà più votare. Pertanto
lo reindirizziamo verso una pagina di errore.
|
<%
if session("votato") = "si" then response.redirect
"errore.htm"
|
Se
questa session non esiste significa che l'utente non
ha ancora votato, quindi il suo voto è valido.
Pertanto prendiamo dal modulo compilato il suo voto
(request.form...) e verifichiamo che non si vuoto: infatti
se non viene selezionata alcuna opzione del sondaggio
e il modulo viene inviato la nostra variabile sarà
vuota. Per evitare di aggiungere record vuoti al nostro
database,effettuiamo questo controllo:
|
vota=request.form("vota")
if vota <>"" then
|
Se
la variabile non è vuota (vota <> "")
possiamo connetterci al database sondaggio.mdb, creare
un nuovo record (AddNew) e aggiungere il voto
dell'utente (rs.fields...).
|
Set
conn = Server.CreateObject("ADODB.Connection")
conn.Open "DRIVER={Microsoft Access Driver
(*.mdb)};DBQ=" & server.MapPath("database/sondaggio.mdb")
sql = "SELECT * FROM sondaggio"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 3, 3
RS.AddNew
rs.Fields("vota")=vota
|
A
questo punto aggiorniamo il database e chiudiamo la
connesione svuotando il recordset.
|
rs.update
rs.close
set RS = Nothing
conn.close
set conn=Nothing
|
Ora
creiamo la session mediante la quale sappiamo che l'utente
ha già votato e le assegniamo una scedenza pari
a trenta minuti (session.timeout...). Occorre
però ricordare che se l'utente chiude il browser
tale session viene eliminata, consentendogli così
di votare anche prima dello scadere dei trenta minuti.
Se però l'utente naviga su un altro sito e cerca
di votare quando non sono ancora trascorsi trenta minuti,
ottiene un messaggio di errore.
|
session("votato")="si"
session.timeout=30
|
Ora
reindirizziamo l'utente verso la pagina che visualizza
i risultati, ricordandoci di chiudere l'if.. then...
aperto all'inizio.
|
response.redirect("report.asp")
end if
|
Nel
caso però in cui un utente abbia premuto il pulsante
'vota' senza selezionare alcuna casella, la variabile
vota sarebe vuota. In questo caso quindi non
occorre aggiungere nulla al database, e nemmeno creare
la session votato=si.
In questo caso facciamo in modo che vengano visualizzati
direttamente i risultati del sondaggio senza fare altro.
|
if
vota="" then
response.redirect("report.asp")
end if
%>
|
|