>> Torna all'Homepage <<
Contattaci Entra nei forum Cerca nel sito
News della settimana ASP: esempi di pagine dinamiche Trucchi e suggerimenti per il PC Manuali e guide I dossier e gli approfondimenti di AmicoPc Il sito della settimana I racconti di Armando Staffa Chi siamo
     
 

 

Scarica i file
Scarica i file
citati in questa pagina

 


RAGGRUPPARE I DATI: NUOVA VERSIONE DEL SONDAGGIO

ERRORE.HTM
Abbiamo visto che, nel caso in cui l'utente abbia già votato, viene caricata una pagina di errore. Questa non è altro una pagina in cui si spiega all'utente che non può votare più di una volta. Nient'altro.

REPORT.ASP
La pagina report.asp invece è la pagina che si occupa di visualizzare a schermo i risultati del sondaggio.
Nella prima versione del sondaggio si effettuavano cinque interrogazioni del database contando i risultati per ogni opzione.
Il fatto di effettuare cinque interrogazioni sul database è forse il modo più semplice per ottenere il risultato cercato; però questo modo di procedere è sicuramente poco ottimizzante.
Ecco alloro che introduciamo un nuovo concetto: il raggruppamento dei risultati.
A noi interessa sapere quante volte ricorre la parola primo, quante volte la parola secondo... e così via (ovvero quanti utenti hanno scelto la prima opzione del sondaggio, quanti la seconda...).
Per far questo il metodo migliore è quello di raggruppare i record del database in cinque gruppi (ovvero tanti quanti sono le opzioni del sondaggio) e quindi contare gli elementi di ogni gruppo.
Se nel gruppo terzo sono presenti dieci elementi, significa che la parola terzo appare dieci volte nel database, quindi dieci utenti hanno scelto la terza opzione del sondaggio.

La query di interrogazione diventa pertanto

select sondaggio.vota, COUNT(*) from sondaggio GROUP BY vota

In questo modo chiediamo di selezionare il campo vota della tabella sondaggio (select sondaggio.vota), quindi chiediamo di contare il numero di record (count * ) raggruppandoli in base ai valori prelevati dallo stesso campo vota (group by vota).
Con il metodo group by possiamo raggruppare tutti i record che hanno il campo vota uguale (quindi nel primo insieme raggruppiamo i record il cui campo vota corrisponde a primo, nel secondo riuniamo quelli il campo vota corrisponde a secondo... e così via)

Naturalmente il raggruppamento deve avvenire su tutti i record, quindi la condizione deve essere while not rs.eof
(A questo proposito ricordiamo che do while not rs.eof ... loop è uguale a while not rs.eof ... wend: sono due modi diversi di fare la stessa cosa!).
Man mano che vengono analizzati i record, questi vengono raggruppati e il loro numero viene aggiornato
.
In questo modo tutti i record appartengono ad un gruppo (magari composto da un solo record...) del quale noi possiamo sapere il numero di elementi grazie a count *
Pertanto se il record contiene la parola primo (if rs(0) = "primo") nella variabile prima memorizziamo il numero di record che contengono questa parola (prima=rs(1)). E così per tutte le opzioni del sondaggio (secondo, terzo...)

Nel caso di una seleziona multipla ( select sondaggio vota e count *) come quella che abbiamo appena effettuato, ricordiamo che con rs(0) otteniamo il risultato della prima selezione (ovvero il select sondaggio.vota) mentre con rs(1) otteniamo quello della seconda (COUNT(*) from...)

Pertanto il codice da utilizzare sarà

WHILE NOT rs.EOF
IF rs(0)="primo" THEN prima=rs(1)
IF rs(0)="secondo" THEN seconda=rs(1)
IF rs(0)="terzo" THEN terza=rs(1)
IF rs(0)="quarto" THEN quarta=rs(1)
IF rs(0)="quinto" THEN quinta=rs(1)
rs.MoveNext
WEND

Così facendo abbiamo la variabile prima con memorizzati il numero di record che contengono la parola 'primo' (ovvero il numero di clic che ha ricevuto la prima opzione del sondaggio); la variabile seconda con il numero di record che contengono la parola 'secondo' e così via...

Può succedere però che alcune opzioni non abbiano ricevuto alcun voto: in questo caso le relative variabili sono vuote.
Pertanto se le variabili sono vuote il loro valore dovrà essere pari a zero: in questo caso, anziché lasciarle vuote, conviene assegnar loro il valore zero.

if prima="" then prima="0"
if seconda="" then seconda="0"
if terza="" then terza ="0"
if quarta="" then quarta ="0"
if quinta = "" then quinta ="0"

A questo punto abbiamo ottenuto il numero di voti per ogni selezione.

In definitiva il codice da inserire diventa:

<html>
<head>
<title>Risultati sondaggio</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF">
<%
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("database/sondaggio.mdb")
Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "select sondaggio.vota, COUNT(*) from sondaggio GROUP BY vota", conn
Dim prima
Dim seconda
Dim terza
Dim quarta
Dim quinta

WHILE NOT rs.EOF
IF rs(0)="primo" THEN prima=rs(1)
IF rs(0)="secondo" THEN seconda=rs(1)
IF rs(0)="terzo" THEN terza=rs(1)
IF rs(0)="quarto" THEN quarta=rs(1)
IF rs(0)="quinto" THEN quinta=rs(1)
rs.MoveNext
WEND

if prima="" then prima="0"
if seconda="" then seconda="0"
if terza="" then terza ="0"
if quarta="" then quarta ="0"
if quinta = "" then quinta ="0"

RS.Close
Set RS=Nothing
conn.Close
Set conn=Nothing

A questo punto calcoliamo il numero di voti totali:

totale= (prima + seconda + terza + quarta + quinta)

Ora dobbiamo calcolare il numero di voti in termini di percentuale (per es. ottimo = 20%, buono 12,5%...)
Per far questo utilizziamo la funzione FormatPercent(valore, X) dove valore è il numero da trasformare in percentuale e X è il numero di decimali da visualizzare. Nel nostro caso valore è il risultato della divisione tra il numero di voti e il totale dei voti stessi. I risultati così ottenuti sono memorizzati nelle variabili prima2, seconda2...
Inoltre dobbiamo verificare che il totale dei voti sia diverso da zero: infatti se provassimo a dividere un numero per zero otterremo un messaggio di errore.
Quindi il codice da inserire diventa:

IF totale<>0 THEN
prima2= FormatPercent((prima / totale), 1)
seconda2= FormatPercent((seconda / totale), 1)
terza2= FormatPercent((terza / totale), 1)
quarta2= FormatPercent((quarta / totale), 1)
quinta2= FormatPercent((quinta / totale), 1)

Nel caso in cui nessuno abbia ancora utilizzato il nostro sondaggio, tutte le variabili hanno valore zero.

ELSE
prima2 = 0
seconda2 = 0
terza2 = 0
quarta2 = 0
quinta2 = 0

A questo punto dobbiamo fare in modo di visualizzare delle barre colorate di dimensione proporzionale al numero di voti ricevuti: quindi prendiamo le percentuali di voti per ogni opzione, eliminiamo eventuali numeri decimali e memorizziamo il tutto nella variabili prima3, seconda3... che utilizzeremo come dimensione delle barre stesse.
Dato che le immagini così ottenute sono troppo piccole (infatti avremmo immagini di 20 o 30 pixel...) conviene raddoppiare tale valore, in modo che sia più agevole distinguere le differenze fra le varie barre colorate.
Quindi a noi servono le prime due cifre che compongono la percentuale. In questo caso utilizziamo la funzione Mid(valore, cifra iniziale, numero cifre) dove valore è rappresentato dalla variabile che contiene la percentuale di voto, numero di cifre è due (in quanto a noi servono le due cifre senza decimali) mentre uno è la posizione da cui contare i caratteri/numeri che ci servono (dato che a noi servono le prime due a sinistra evidentemente la posizione di partenza sarà uno). Gli ultimi due caratteri (* 2) servono a raddoppiare il risultato ottenuto.
Quindi scriveremo:

prima3 = (Mid( prima2, 1, 2))*2
seconda3 = (Mid( seconda2, 1, 2))*2
terza3 = (Mid( terza2, 1, 2))*2
quarta3 = (Mid( quarta2, 1, 2))*2
quinta3 = (Mid( quinta2, 1, 2))*2
%>

Una volta giunti a questo punto possiamo creare la pagina che visualizzi a schermo quanto abbiamo trovato: avremo pertanto nella prima colonna le varie opzioni che compongono il sondaggio, nella seconda le percentuali di voto, nella terza il numero di voti per ogni opzione e nella quarta le barre colorate con dimensioni proporizonali alla percentuale di voto: per far questo il campo width= dell'immagine colorate dovrà contenere qualcosa del tipo <%= quinta3%>

<p><font size="2" face="Verdana" color="#CC0000"><b>Come giudichi i servizi offerti da AmicoPc.com? </b></font></p>
<div align="left">
<table border="0" cellpadding="0" cellspacing="0" width="484" height="38">
<tr>
<td width="2" height="21"></td>
<td width="72" height="21"></td>
<td width="102" height="21">
<p align="center"><font size="2" face="Verdana"><i>Percentuale</i></font></td>
<td width="102" height="21">
<p align="center"><font size="2" face="Verdana"><i>N° voti</i></font></td>
<td width="200" height="21"></td>
</tr>
<tr>
<td width="2" height="0"></td>
<td width="72" height="0"></td>
<td height="0" align="center" colspan="2" width="202"></td>
<td width="200" height="0"></td>
</tr>
<tr>
<td width="2" height="25"></td>
<td width="72" height="25"><font face="Verdana" size="2"><b>Ottimi</b></font></td>
<td width="102" height="25" align="center"><font face="Verdana" size="2"><%= prima2%></font></td>
<td width="102" height="25" align="center"><font face="Verdana" size="2"><%= prima%></font></td>
<td width="200" height="25"><img border="0" src="sondaggio1.gif" width="<%= prima3%>" height="10"></td>
</tr>
<tr>
<td width="2" height="25"></td>
<td width="72" height="25"><font face="Verdana" size="2"><b>Buoni</b></font></td>
<td width="102" height="25" align="center"><font face="Verdana" size="2"><%= seconda2%></font></td>
<td width="102" height="25" align="center"><font face="Verdana" size="2"><%= seconda%></font></td>
<td width="200" height="25"><img border="0" src="sondaggio5.gif" width="<%= seconda3%>" height="10"></td>
</tr>
<tr>
<td width="2" height="25"></td>
<td width="72" height="25"><font face="Verdana" size="2"><b>Sufficienti</b></font></td>
<td width="102" height="25" align="center"><font face="Verdana" size="2"><%= terza2 %></font></td>
<td width="102" height="25" align="center"><font face="Verdana" size="2"><%= terza %></font></td>
<td width="200" height="25"><img border="0" src="sondaggio3.gif" width="<%= terza3%>" height="10"></td>
</tr>
<tr>
<td width="2" height="25"></td>
<td width="72" height="25"><font face="Verdana" size="2"><b>Mediocri</b></font></td>
<td width="102" height="25" align="center"><font face="Verdana" size="2"><%= quarta2%></font></td>
<td width="102" height="25" align="center"><font face="Verdana" size="2"><%= quarta%>
</font></td>
<td width="200" height="25"><img border="0" src="sondaggio4.gif" width="<%= quarta3%>" height="10"></td>
</tr>
<tr>
<td width="2" height="25"></td>
<td width="72" height="25"><font face="Verdana" size="2"><b>Pessimi</b></font></td>
<td width="102" height="25" align="center"><font face="Verdana" size="2"><%= quinta2%></font></td>
<td width="102" height="25" align="center"><font face="Verdana" size="2"><%= quinta%>
</font></td>
<td width="200" height="25"><img border="0" src="sondaggio2.gif" width="<%= quinta3%>" height="10"></td>
</tr>
<tr>
<td width="2" height="25"></td>
<td width="72" height="25"></td>
<td height="25" colspan="2" width="202"></td>
<td width="200" height="25"></td>
</tr>
<tr>
<td width="2" height="25"></td>
<td width="72" height="25" bgcolor="#EFEFEF"><font face="Verdana" size="2">Voti
totali:</font></td>
<td width="102" height="25" bgcolor="#EFEFEF"><font face="Verdana" size="2" color="#CC0000"><b>
<p align="center"><%=totale%></b></font></td>
<td width="102" height="25"></td>
<td width="200" height="25"></td>
</tr>
</table>
</div>

</body>
</html>

 

<< indietro

Utenti connessi: 26

Invia questa pagina ad un amico

 

 

 

Chi siamo | Pubblicità | Note sulla privacy | Dicono di noi
Grafica cura di Paolo Omero
- Stefania Migliorucci