|

REALIZZARE UN SONDAGGIO (versione avanzata)

SONDAGGIO.MDB
Questo è il database su cui si basa il funzionamento
del nostro sondaggio. Dovrà essere memorizzato
nella cartella 'mdb-database' la quale dovrà
avere i permessi di scrittura ablitati.
Il database (nel nostro caso di tratta di Access 2000)
dovrà contenere dei campi così denominati:
-
id: ovvero il campo contatore;
- testo: campo testo nel quale viene memorizzata
la domanda del sondaggio;
- primo, secondo, terzo, quarto,
quinto: campi numerici che conterrano il numero
di voti per ogni opzione del sondaggio. Il valore iniziale
è pari a zero;
- uno, due, tre, quattro,
cinque: campi testo nei quali sono memorizzati
i testi delle possiibli opzioni di scelta del sondaggio
(per es. ottimo, buono...)
INDEX.ASP
E' l'homepage del sito. Dato che il testo del sondaggio
non è specificato nel codice html della pagine
ma è prelevato da un file di testo, questa pagina
dovrà necessariamente avere estensione .asp
Il codice è molto semplice: col normale codice
html creiamo una tabella, all'interno della quale visualizziamo
le informazioni contenute nel file di testo, ovvero
il testo del sondaggio nonché le varie opzioni
(da un minimo di due ad un massimo di cinque).
Il file di testo viene generato e modificato automaticamente,
come avremo modo di vedere più avanti.
Anche questo file, come il database, deve essere posizionato
in una cartella avente i permessi di scrittura abilitati
(nel nostro caso si tratta della cartella mdb-database).
|
<html>
<head>
<title>Sondaggio</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
<style TYPE="text/css">
<!--
A:link { text-decoration: none; }
A:visited { text-decoration: none; }
A:active {text-decoration: none; }
A:hover {text-decoration: underline; }
A:hover {color: orange }
.link:hover {color: #000000; }
-->
</style></head>
<body bgcolor="#FFFFFF" text="#333333"
link="#000099" vlink="#000099"
alink="#000099">
<table width="128" border="0"
cellspacing="0" cellpadding="0"
align="center">
<form method="post" action="vota.asp">
<tr bgcolor="#FFFFFF" valign="middle">
<td height="45" width="134">
<%
dim miofile
dim objOpenFile
dim objFso
dim objFile
miofile=server.mappath("mdb-database/index.txt")
set
objFso = Server.CreateObject("Scripting.FileSystemObject")
set objOpenFile = objFso.OpenTextFile(miofile,1,false,0)
response.write objOpenFile.ReadAll
set objFso=nothing
%></td>
</tr>
<tr bgcolor="#FFFFFF" valign="middle">
<td height="32">
<div align="center">
<input type=image src="vota.gif"
alt="Vota!" border="0" name="Vota!"
width="40" height="20">
</div>
</td>
</tr>
</form>
</table>
</body>
</html>
|
VOTA.ASP
Premendo il pulsante 'vota' viene richiamata la
pagina 'vota.asp' la quale dovrà memorizzare
il voto nel database.
Innanzitutto controlliamo che l'utente non abbia ancora
votato: in pratica controlliamo che non esista la session
chiamata votato. Infatti dopo la votazione viene
creato l'oggetto session in questione; quindi se esiste
questa session significa che l'utente ha già
votato, quindi lo reindirizziamo verso una pagina di
errore, alla quale passiamo il parametro tipo=votato
Pertanto avremo
|
<%
if session("votato") = "si"
then response.redirect "errore.asp?tipo=votato"
|
Come
prima cosa dobbiamo vedere qual è stato il voto
dell'utente, ovvero quale pulsante di opzione ha selezionato.
Per far questo è sufficiente scrivere:
|
vota=request.form("vota")
|
Nel
caso cui si prema il pulsante 'Vota' senza selezionare
alcuna opzione, la variabile in question sarebbe vuota,
quindi non bisogna aggiungere nulla al codice ma semplicemente
vengono mostrati a video i risultati del sondaggio.
Quindi solo se la variabile vota non è
vuota eseguiamo la connessione al database e le operazioni
connesse.
Normale
connessione al database
|
Set
conn = Server.CreateObject("ADODB.Connection")
conn.Open "DRIVER={Microsoft Access Driver
(*.mdb)};DBQ=" & server.MapPath("mdb-database/sondaggio.mdb")
|
Poiché
nel database sono memorizzati anche i sondaggi precedenti,
dobbiamo selezionarli ordinandoli in ordine decrescente
rispetto al campo contatore, ovvero dal più recente
al più vecchio.
In questo modo siamo sicuri che il primo sondaggio trovato
sarà quello attualmente in uso.
|
sql
= "SELECT * FROM sondaggio order by id desc"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 3, 3
|
A
questo punto dobbiamo verificare quale sia il valore
della variabile vota, ovvero quale opzione del
sondaggio l'utente ha selezionato.
In base alla sua scelta noi dovremo regolarci di conseguenza:
infatti se l'utente ha scelto la prima opzione, la variabile
vota sarà uguale a primo: quindi
selezioniamo il campo chiamato primo dal database,
preleviamo il valore contenuto e lo aumentiamo di un'unità.
E così per le altre opzioni di scelta.
Per
far questo utilizziamo la funzione Select case nome_variabile:
in pratica elechiamo i possibili valori che questa variabile
può assumere: per ogni valore specifichiamo il
codice ASP da eseguire.
La struttuara è la seguente:
select
case nome_variabile
case
"primo_valore"
codice da eseguire
case
"secondo valore"
codice da eseguire
...
end
select
Per
esempio: se
la variabile vota ha valore quarto (Case
"quarto") il codice da eseguire sarà
rs.Fields("quarto")=rs("quarto")+1
|
Select
case vota
Case "primo"
rs.Fields("primo")=rs("primo")+1
Case "secondo"
rs.Fields("secondo")=rs("secondo")+1
Case "terzo"
rs.Fields("terzo")=rs("terzo")+1
Case "quarto"
rs.Fields("quarto")=rs("quarto")+1
Case "quinto"
rs.Fields("quinto")=rs("quinto")+1
end select
|
Fatto
questo aggiorniamo il database e chiudiamo la connessione.
|
rs.update
Set RS = Nothing
Set conn=Nothing
|
Ora
creiamo una session che chiamiamo votato alla
quale assegniamo il valore si. In questo modo
sappiamo che l'utente ha già votato e non potrà
farlo se non dopo trenta minuti, ovvero alla scadenza
della session stessa (session.timeout=30)
|
session("votato")="si"
session.timeout=30
|
Ora
reindirizziamo l'utente verso la pagina 'report.asp'
la quale visualizza i voti del sondaggio attuale nonché
dei sondaggi precedenti.
|
response.redirect("report.asp")
end if
|
Nel
caso in cui la variabile vota sia vuota, significa
che l'utente ha premuto il pulsante di invio senza selezionare
alcuna opzione: in questo caso lo reindirizziamo subitoi
verso la pagina dei risultati.
|
if
vota="" then
response.redirect("report.asp")
end if
%>
|
|