Creare un sistema di votazione per dare un voto online a prodotti tramite Database e ASP
Rapido sistema di votazione con tre scelte che permette di dare giudizi al volo su un prodotto qualsiasi. In questo sistema l'unico controllo è dato da un cookie che non permette di rivotare per lo stesso prodotto fino a quando il cookie è attivo e/o presente. Questo script l'ho creato per il mio sito di recensioni letterarie ma è facilmente adattabile a qualsiasi sito che presenti una serie di record da votare estratti da un database.
La prima operazione da fare è quella di creare ulteriori tre campi numerici nella tabella del database che contiene i prodotti che vorremo far votare. Questi campi io li ho chiamati pos neu neg e il valore predefinito è lo zero. Il significato dovrebbe essere chiaro ma lo specifico per sicurezza. Pos è il campo per i commenti positivi, neu è il campo dei giudizi neutri, neg è quello dei voti negativi.
Passiamo al codice premettendo che ometterò tutto quello che riguarda la connessione al database e le select che non riguardano le votazioni.
La pagina che visualizza il record si chiama read.asp. In questo simulazione stiamo visualizzando il record indicato dalla variabile Idprodotto.
<%
'Nella pagina di visualizzazione del prodotto la nostra istruzione SQL sarà
SELECT pos, neu, neg FROM Tabella WHERE ID = " & Idprodotto
'Valorizziamo le variabili
pos = rs("pos")
neu = rs("neu")
neg = rs("neg")
'Facciamo le percentuali e formattiamo
dim tot,pos_per,neu_per,neg_per 'dichiaro le variabili
tot = (pos + neu + neg)
if tot > 0 then
pos_per = Formatpercent((pos/tot),2) 'formatto al secondo decimale
neu_per = Formatpercent((neu/tot),2)
neg_per = Formatpercent((neg/tot),2)
else
pos_per = 0.00 'questo serve per evitare problemi di coerenza di formato
neu_per = 0.00
neg_per = 0.00
end if
%>
Forse è superfluo dire che per visualizzare le percentuali basta un fare un Response.Write delle variabili pos_per, neu_per, neg_per .... ma non si sa mai ;)
Vediamo come si vota.
Sotto al prodotto inseriremo tre icone (nel mio caso ho
utilizzato tre libri di colore diversi: rosso, giallo e
verde) che sono link alla pagina che gestisce il sistema di
votazione.
I link alla pagina di votazione sono (ricordate che questo sistema lo uso per votazioni al volo su libri)
<a href="vota.asp?voto=pos&docid=<%=Idprodotto%>"><img src="images/libro_pos.gif" border = "0" alt="Ottimo libro, lo consiglio a tutti" width="18" height="25"></a> <a href="vota.asp?voto=neu&docid=<%=Idprodotto%>"><img src="images/libro_neu.gif" border = "0" alt="Da leggere, è piacevole" width="18" height="25"></a> <a href="vota.asp?voto=neg&docid=<%=Idprodotto%>"><img src="images/libro_neg.gif" border = "0" alt="Non l'ho trovato interessante" width="18" height="25"></a>
Ecco la pagina vota.asp
<%
Idprodotto = request("docid")
voto = request("voto")
pagina = "read.asp?docid="&Idprodotto 'ci serve per sapere dove tornare
if request.Cookies("libro"& Idprodotto) <> Idprodotto then
sSQL = "SELECT pos, neu, neg FROM Tabella WHERE ID = " & Idprodotto
rs.Open sSQL
pos = rs("pos")
neu = rs("neu")
neg = rs("neg")
if voto = "pos" then
conn.execute "UPDATE Tabella SET pos = pos + 1 WHERE ID = " & Idprodotto
end if
if voto = "neu" then
conn.execute "UPDATE Tabella SET neu = neu + 1 WHERE ID = " & Idprodotto
end if
if voto = "neg" then
conn.execute "UPDATE Tabella SET neg = neg + 1 WHERE ID = " & Idprodotto
end if
response.Cookies("libro"&Idprodotto) = Idprodotto
end if
response.Redirect(pagina)
%>
In questa pagina si controlla se chi sta votando ha il cookie relativo al prodotto. Se non lo ha viene incrementato il valore relativo alla votazione e si viene reindirizzati alla pagina di provenienza. Se invece il cookie è presente si viene subito reindirizzati.
Questo è tutto. Sicuramente lo script è migliorabile sotto molti punti di vista ma è rapido e ho constatato che non appesantisce il lavoro del server in maniera significativa.