27. september 2002 - 10:32Der er
34 kommentarer og 1 løsning
Speciel afstemning i ASP
<Genbrug> -->Jeg skal bruge et stemmesystem som på alfanexus, eller lign. Hvor en bruger kan give sin mening, og så ændrer 'stjernerne' status alt efter hvad der bliver stemt. (Der må kun være én status bar) Det skal bruges til http://www.trailersiden.dk , til hver eneste film.<-- </Genbrug>
Er der virkelig ikke nogen der kan hjælpe??? Jeg har oprettet spm før, men jeg mangler det virkelig. Og lad nu være med at henvise til andre sider. Sidst var det solutions2all, men der henviser de også til andre sider. Og der henvises til poll's, til alm. brug. DET KAN JEG IKKE BRUGE.
Hvis bare der er nogen som kan give mig scriptet, finder jeg selv ud af resten.
vil gerne prøve. skal nemlig også selv bruge noget lignende :D men kan ik love at det bliver lige med det samme :( Håber nogle andre kan hjælpe dig imens
Jeg vil måske godt prøve at lave spørger lige lidt til hvad du vil havde..:
1. Hvad er min/max karakter som du har idag men 0-5 stjernet?
2. Når karakteren udskrive skal det væred med grafik? Hvis Ja: Hvad er opløsningen på stjernene? Eks hvis 2 har stem og ialt givet 5 stjerner så giver det 2,5... Skal det vises som 2,5 stjerne eller rudnes op/ned?
3. Hvilken Database bruger du?
4. Hvis du bruger grafik, levere du alle grafik filerne for stjerne, 0,1,2,3,4,5 stjerne valgt + evt halve 0.5,1.5,2.5 ovs?
1: Karakter - 0-5. Tænkte på at 0 skal være skrevet som 'Ingen stemmer'
2: Hvis 2 har stemt og det giver 5 , ja, så skal det være 2,5.
3: Jeg bruger access 2000.
4: Jeg har nogle stjerner som du kan kigge på. Se om det dur. Ellers må jeg lige lave noget andet. Smid din mail (hvis du vil) til admin@trailersiden.dk, så sender jeg stjernerne til dig.
Hvis man vil gemme IP for hver stemme bliver tabellen hurtig meget lang/stor hvis du har mange besøgne, IP logning er et valg man tager og der er fordele/ulemper ved det, bare husk på hvis en stor flok mennesker sidder bag en proxy/firewall vil de alle havde samme IP adresse så kun en kan stemme....
Jeg forstiller mig en tabel som indeholder samme stemmerne som vi kan kalde stemmeTbl: IP : text stjerner : tal givetTil : tal .. denne skal være unik ID på det produkt/film man har stemt på.
Må indrømme jeg tænkte nærmere over det efter jeg havde skrevet det. Tabellen bliver lang. Men spørgsmålet er også om folk overhovedet stemmer flere gange. De får jo ikke noget ud af at en film f.eks bliver stemt på 20 gange.
Måske skulle man nok lade ip loging være, og måske hvis man finder det nødvendigt, bygge det til senere.
Det førte jeg havde tænkt på var nemlig at havde en kolonne for hver film i tabellem og så talte man en counter for hvor mange der havde stemt og en kolonne hvor man summerede stjerne som var givet. Så kunne man let regne gennemsnittet ud ved at dividere de to kolonner. Men det giver så ingen sikkerhed for mange stemmer, dog kunne man lave en cookien som genner ID på den man har stemt på for at fange de fleste som ville stemme to gange.
Første udgave af koden, som du kan se af kommentarne skal det flettes ind i den kode du har som udskiver filmne.. I første omgang kan dette eks bare copy/pasted ind i en ny fil med navnet spm263120.asp og så skal database forbindelsen rettes til.
En tabel med navnet stemmeTbl: id : autonummer stemmer : tal totalStjerner : tal givetTil : tal
<html> <head> <title>Stem</title> </head> <body> <% Set Conn = Server.CreateObject("ADODB.Connection") ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db9.mdb") Conn.Open ConnStr Set rs = Server.CreateObject("ADODB.RecordSet")
if Request.ServerVariables("REQUEST_METHOD") = "POST" then stempaa = Request.Form("stempaa") karakter = Request.Form("karakter") strSQL = "SELECT id FROM stemmeTbl WHERE givetTil = " & stempaa set rs = Conn.Execute (strSQL) 'Tjek om der er stem på filmen før eller det er føtste gang. if rs.EOF then strSQL = "INSERT INTO stemmeTbl (stemmer, totalStjerner, givetTil) VALUES (1, " & karakter & ", " & stempaa & ")" else strSQL = "UPDATE stemmeTbl SET stemmer = stemmer + 1, totalStjerner = totalStjerner + " & karakter & " WHERE givetTil = " & stempaa end if Conn.Execute (strSQL) end if %>
<% 'Denne del udskriver stemmebox og antal stjerne givet..:
'Finder med en SQL antal stjerner for en film. 'Denne SQL skal nok indarbejes i den SQL du har som hendter de film som skal vises på en side 'så man kun hendter data en gang. strSQL = "SELECT stemmer, totalStjerner FROM stemmeTbl WHERE givetTil = 1" set rs = conn.Execute (strSQL) if rs.EOF then billede = "s0" else stemmer = 1*rs("stemmer") totalStjerner = 1*rs("totalStjerner") if stemmer = 0 then billede = "s0" else snit = Round(totalStjerner / stemmer,3) * 2 snit = round(snit) / 2 snit = replace(snit, ".", "k") snit = replace(snit, ",", "k") billede = "s" & snit end if end if
<% 'Stemme formen den skal også bygges ind i den fil hvor du udskriver filmene 'Bland andet skal hidden feltet stempaa's values ændre til ID på den film som vises %> <form action="spm263120.asp" method="post"> <input type="hidden" name="stempaa" value="1"> <input type="radio" name="karakter" value="1">1 <input type="radio" name="karakter" value="2">2 <input type="radio" name="karakter" value="3" checked>3 <input type="radio" name="karakter" value="4">4 <input type="radio" name="karakter" value="5">5<br> <input type="submit" name="Stem" value="Stem"> </form>
Det ser godt ud, men jeg tænkte nu mere på et selvstændigt script, hvor hver stemme boks har sin egen unikke ID. Så man kan oprette flere stemme bokse i samme database. Problemet er at alle film siderne hos mig er i .html (Ved godt det er lamt)..
Nej...jeg gemmer sgu scriptet, laver alle mine filmsider til asp, som jeg længe har ville gjort. Så kan jeg også få orden i skridtet. Og få stemme-stjernerne med.
Jeg er ikke helt med på hvordan du havde tænkt afstemningen skulle komme ind på en siden for hver film??? Skulle det være en pop-up hvor man kunne stemme, men hvordan skulle resultatet så vises?....
Selve scriptet skal være en script for sig selv. En selvstændig database. I databasen kan man så selv tilføje afstemninger som man vil, med en givet ID som man bruger på siden.
Et script på en enkelt side bruges til visningen, hvor det henviser til det ID som passer til den afstemning man har oprettet i databasen.
Her er tabellen med stemme sammen tællingen. Så kan man fjeren kolonnen givetTil som var tænkt som ID på den film man stemte på. Så skal du bare bruge ID til at bestemme hviken afstemning man har gang i..:
ID : autonummer stemmer : tal totalStjerner : tal
Så kan koden rettes til dette:
<% 'Her skriver du i SQL ID=xx på det nummer som du vil havde vist + stemme på strSQL = "SELECT stemmer, totalStjerner FROM stemmeTbl WHERE ID = 1" set rs = conn.Execute (strSQL) if rs.EOF then billede = "s0" else stemmer = 1*rs("stemmer") totalStjerner = 1*rs("totalStjerner") if stemmer = 0 then billede = "s0" else snit = Round(totalStjerner / stemmer,3) * 2 snit = round(snit) / 2 snit = replace(snit, ".", "k") snit = replace(snit, ",", "k") billede = "s" & snit end if end if
Glemte lige det som opdater stemmeboxen.. koden kan laves om det til dette så man bruger ID og ikke givetTil i SQL sætningen:
if Request.ServerVariables("REQUEST_METHOD") = "POST" then stempaa = Request.Form("stempaa") karakter = Request.Form("karakter") strSQL = "UPDATE stemmeTbl SET stemmer = stemmer + 1, totalStjerner = totalStjerner + " & karakter & " WHERE ID = " & stempaa Conn.Execute (strSQL) end if %>
tabellen skal hedde stemmeTbl med disse kolonner: ID : autonummer stemmer : tal totalStjerner : tal
ID er nummeret på afstemingen som bruge i SQL sætniger finde den bestemte afstening. stemmer er antalet af afgivne stemmer. totalStjerner er antallet af det totale antal stjerne givet.
Det er hvad der skal til som minimun så kan du evt tilføje flere kolonner hvis du vil havde en overskrift/test tilknyttet til afstemningen.
Nej det skal bare laves på en anden måde. Skal det være med IP logning?? for man kan oprette en ny table med disse kolonner som så sikre man ikke kan stemme flere gange på den samme...
stemt IP : text stemmeID : tal som er lig den stemmebox/film man har stemt på
Jeg har lavet en ny tabel i samme database fil som ser sådan ud:
tabelnavn: ipLog id : autonummer ipadr : text boxId : den stemmebox man har stemt på
if Request.ServerVariables("REQUEST_METHOD") = "POST" then Set rsTest = Server.CreateObject("ADODB.RecordSet") stempaa = Request.Form("stempaa") karakter = Request.Form("karakter") strSQL = "SELECT id FROM ipLog WHERE IPadr = '" & Request.ServerVariables("REMOTE_ADDR") & "' AND boxID = " & stempaa set rsTest = Conn.Execute (strSQL) 'Tjek om denne IP adr har stem før... if rsTest.EOF then strSQL = "UPDATE stemmeTbl SET stemmer = stemmer + 1, totalStjerner = totalStjerner + " & karakter & " WHERE givetTil = " & stempaa Conn.Execute (strSQL) strSQL = "INSERT INTO ipLog (IPadr, boxID) VALUES ('" & Request.ServerVariables("REMOTE_ADDR") & "', " & stempaa & ")" Conn.Execute (strSQL) else 'Denne IP adr har stem før lad som ingen ting... end if rsTest.Close end if
Jeg takker utrolig mange gange. Du har været en kæmpe hjælp!!
Mvh Plato
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.