Sistema di valutazione articolo

snakefrancesco

Utente Attivo
4 Mag 2008
33
0
0
Salve a tutti vorrei sapere se esiste un modo per inserire nel mio sito un sistema di valutazione con voto da 1 a 10 per i miei articoli, riportandone la media. Il mio sito è in asp ed utilizzo un database access. Ho provato diverse soluzioni come rating star ma non vanno bene al mio caso visto che sono da 1 a 5 stelle. Mi andrebbe bene anche una semplice finestrella (form) che riporti i 10 numeri.
 
Ciao...credo che sia più semplice fare un insiremento in una tabbella...tipo id_art-voto..poi li leggi e fai media aritmentica...o struttiri in modo da leggere i più votati per numero o media :p
Cercare di modificare qualcosa di già fatto o da studiare prima di adattare, è sicuramente meno semplice ed impieghi più tempo.
facce sapè...e se possiamo, siamo qui.
:byebye::byebye:
 
Per farvi capire meglio io ho questa pagina:

http://www.retrogaminghistory.com/articolo.asp?id=760

Vorrei che sotto la Valutazione del redattore ci fosse anche un sistema semplice per votare (da 1 a 10) e il voto del lettore, ovviamente dovrebbe essere la media di tutti i voti per il gioco recensito. Il mio problema è che non riesco a fare la media, non sono ancora molto pratico in ASP. Aiutatemiii :)
 
Perfetto Francesco...:D:D:D
era abbastanza chiaro quello che intendevi.
Permettimi una piccola premessa:
Lo spirito del forum è quello di aiutare o dare qualche consiglio là dove ci siano difficoltà... hai preso qualcosa di già bello e fatto? (per carità senza nessuna critica) e dovresti modificarlo?...ma non puoi chiedere di farti fare il lavoro...:D:D:D e non che sia complicatissimo ma richiede un minimo di conoscenza ASP e DB (nel tuo caso Access)
In fondo alla pagina hai un inserici commento...l'hai scritto tu o era già fatto? potresti integrare il modulo con un elenco/menu per i voti

La media in ASP è semplice,
dichiari :
a = 1
b = 2
c = (a + b) /2
nel tuo caso valori dinamici ma la logica è la stessa.
e non credo che già non sia :D
Quindi le tue diffocoltà dove nascono? Nell'inserimento, nella lettura db o nella media?
:byebye::byebye:
 
Ultima modifica:
Ti ringrazio per la risposta Majinbu, vorrei però farti capire che io ho preso tutto il codice del sito in gestione, io sono un esperto grafico non me ne intendo molto di codice quindi sto imparando qualcosina da diverse guide in rete, cose comunque già belle preparate che bisogna solo adattarle. Mi sono rivolto a voi perchè già in altri casi mi avete aiutato. Spero che mi aiuterete anche stavolta, anche indirettamente con una guida nel sito, confido in voi :fonzie:
 
Ho creato questo semplice form dove con rs(id) mi chiamo l'id dell'articolo poi il voto e mando tutto ad una pagina che inserisce i dati nel database:

<form method="post" action="process_form_vote.asp">
<input type="hidden" name="id_articolo" value="<%=rs("id")%>">
<SELECT size=1 cols=4 name="voto">
<OPTION selected Value=nessuna>
<OPTION value=1> 1
<OPTION value=2> 2
<OPTION Value=3> 3
<OPTION value=4> 4
<OPTION value=5> 5
<OPTION Value=6> 6
<OPTION value=7> 7
<OPTION value=8> 8
<OPTION Value=9> 9
<OPTION Value=10> 10
</select>
<input type="submit" value="Vota">
</form>

Questa è la pagina process_form_vote.asp:

<%
strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/mdb-database/database.mdb")
set conn = Server.CreateObject("ADODB.Connection")
conn.Open strConn

conn.Execute "INSERT INTO voti_utente (id_articolo, voto) VALUES (" & _
"'" & Replace(Request.Form("id_articolo"), "'", "''") & "', " & _
"'" & Replace(Request.Form("voto"), "'", "''") & "', " & _
Response.Redirect ("http://www.retrogaminghistory.com/")
%>

Ora però purtroppo non sono riuscito a combinare nulla perchè nel database non viene inserito nulla, e poi non so come fare il Response.Redirect alla pagina articolo... Majinbu puoi aiutarmi?
 
Ciao francesco...prova cosi...

Codice:
<% 
If  Request.Form("voto") = " " then
Response.Redirect "pagina_precedente.asp"
end if
%> ' per id_art non serve visto che è hidden
<%
art = Request.Form("id_articolo")
voto = Request.Form("voto")

connessione = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/mdb-database/database.mdb")
set conn = Server.CreateObject("ADODB.Connection")
conn.Open connessione
sql = "INSERT INTO voti_utente (id_articolo, voto) VALUES ('"& art &"', '"& voto &"')"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn ,3,3
rs.Close
set rs = Nothing
conn.Close
set conn = Nothing

Response.Redirect ("http://www.retrogaminghistory.com/pagina_articolo.asp?id="& art )
%>

dovrebbe bastare...
PS.visto l'orario del post capisco la tua apprensione :-), ma a volte dopo un buon riposo :dormo::dormo: vedi le cose più chiare e prima di postare la stessa domanda su diversi forum...forse e meglio aspettare un pochino e sentire prima chi ti a una mano...(mi riferisco a Optime che sicuramente ti posterà soluzione simile...e tu magari hai già risolto...quindi gli fai perdere tempo:eek::eek:)
:byebye::byebye:
 
Ho modificato la pagina process_form_vote.asp così:

<%
If Request.Form("voto") = " " then
Response.Redirect "pagina_precedente.asp"
end if
%>
<%
art = Request.Form("id_articolo")
voto = Request.Form("voto")

connessione = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/mdb-database/database.mdb")
set conn = Server.CreateObject("ADODB.Connection")
conn.Open connessione
sql = "INSERT INTO voti_utente (id_articolo, voto) VALUES ('"& art &"', '"& voto &"')"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn ,3,3

Response.Redirect ("http://www.retrogaminghistory.com/articolo.asp?id="& art )
%>

Ora mi inserisce i dati nel database... però ora non so come visualizzare la media del voto nella pagina dell'articolo, ho provato così:

<%
Set RSv = Server.CreateObject("ADODB.Recordset")
RSv.ActiveConnection = con
sqlString = "SELECT AVG(Voto) AS MediaUtente FROM voti_utente WHERE Id_Articolo=" & id
RSv.open sqlString
%>

<td align="center"><p><%=rsv("voto)")%></p></td>

però mi da un errore:

ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/articolo5.asp, line 152
 
Ho risolto così:

<td align="center"><p><%=rsv("mediautente)")%></p></td> (grazie optime :))

ora vorrei sapere se è possibile fare in modo che un utente possa votare una volta sola un articolo? nel database ho id_utente e data ma non so come sfruttarli.
 
No il sito è senza login, cmq ho provato così:

<%
If Request.Form("voto") = " " then
Response.Redirect "pagina_precedente.asp"
end if
%>
<%
art = Request.Form("id_articolo")
voto = Request.Form("voto")
ip = Request.ServerVariables("REMOTE_ADDR")

connessione = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/mdb-database/database.mdb")
set conn = Server.CreateObject("ADODB.Connection")
conn.Open connessione
sql = "INSERT INTO voti_utente (id_articolo, voto, id_utente) VALUES ('"& art &"', '"& voto &"', '"& ip &"')"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn ,3,3

sql= "SELECT COUNT(*) AS VOTATO FROM voti_utente WHERE id_utente= ('"& ip &"') AND id_articolo=('"& art &"')"
Set rsa = Server.CreateObject("ADODB.Recordset")
rsa.Open sql

IF rsa("VOTATO")>0 THEN
Response.Redirect ("errore.asp")
else
Response.Redirect ("http://www.retrogaminghistory.com/articolo.asp?id="& art )
end if
%>

ma mi da errore, dove sbaglio?
 
Scusa ma in id_utente che valore hai? e dove l'inserisci?
Non credo ti convenga usare come parametro di blocco l'IP...
Com un minimo di lettura sull'argomento (che è abbastanza complesso) ti renderai conto che ti comporterà non poco limiti e ti ritroverai con un n° non definito di visitatori bloccati :eek::eek:
Senza paramentri univoci assegnati da un login, non hai molte scelte...dovresti utilizzare i cookie (sempre con qualche limitazione).
 
ASP...itina :hammer::hammer:
Nella pagina d'inserimento aggiungi

Codice:
<%
Response.Cookies("nome_cookies") = Request.Form("id_articolo")
Response.Cookies("nome_cookies").Expires = #December 25, 2010# ' qui imposti la scadeza
%>
Quidi ti basterà leggerlo nella pagina dove hai il form che invia i dati o in qualunque altra pagina con :
Codice:
<%Response.Write Request.Cookies("nome_cookie")%>
e quindi ....
Codice:
<% if Request.Cookies("nome_cookie") = "" then %>
 <!--qui aggiungi il  form -->
<%else%>
 <!--qui mostri un messaggio o quello che pare... Pippone! hai già votato -->
<%end if%>
Questo sempre a patto che l'utente abbia i cookie abilitati o non li abbia già cancellati....nella maggiorparte dei casi hai un buon risultato.

:byebye::byebye::byebye:
 
Nella pagina articolo ho modificato così:

Codice:
<%Response.Write Request.Cookies("nome_cookie")%>
      <% if Request.Cookies("nome_cookie") = "" then %>
      <form method="post" action="process_form_vote.asp">
<input type="hidden" name="id_articolo" value="<%=rs("id")%>">
<SELECT name="voto" size=1 cols=4>
<OPTION selected Value=nessuna>
<OPTION value=1> 1
<OPTION value=2> 2
<OPTION Value=3> 3
<OPTION value=4> 4
<OPTION value=5> 5
<OPTION Value=6> 6
<OPTION value=7> 7
<OPTION value=8> 8
<OPTION Value=9> 9
<OPTION Value=10> 10
</select>
<input type="submit" value="Vota">
</form>
<%else%>
<p>Pippone! hai già votato</p>
<%end if%>

Nella pagina process_form_vote.asp così:

Codice:
<% 
If  Request.Form("voto") = " " then
Response.Redirect "pagina_precedente.asp"
end if
%>
<%
art = Request.Form("id_articolo")
voto = Request.Form("voto")
Response.Cookies("nome_cookies") = Request.Form("id_articolo")
Response.Cookies("nome_cookies").Expires = #December 25, 2010# ' qui imposti la scadeza

connessione = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/mdb-database/database.mdb")
set conn = Server.CreateObject("ADODB.Connection")
conn.Open connessione
sql = "INSERT INTO voti_utente (id_articolo, voto) VALUES ('"& art &"', '"& voto &"')"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn ,3,3
Response.Redirect ("http://www.retrogaminghistory.com/articolo5.asp?id="& art )
%>

Purtroppo non succede nulla, però mi sono accorto di un'altra cosa ancora, la media certe volte viene molto lunga come 7,444444 come potrei fare per avere solo 7,4?
 
Puoi controllare se c'è già un voto per quell'articolo da parte di quell'ID utente. Se le righe restituite sono una vuol dire che ha già votato e mostri errore, altrimenti inserisci il voto. È solo una soluzione teorica perché ASP non è il mio campo :p
 

Discussioni simili