Permalänk
Medlem

Poll script/röstnings system

Hejsan folket!

Tänkte försöka mig på att göra ett pollscript/röst system, men vill ha det rätt fint, som här på Sweclockers t.ex. med procent och dom där barsen som finns.

Men vet inte riktigt hur jag ska börja eller gå tillväga, så en liten knuff på vägen skulle vara guld värt!

Har ni några tips på hur man ska tänka och var man ska börja osv?

Seriösa svar, endast tack!

MVH
Jesper

Permalänk
Medlem

Börja med att skapa en databas som håller koll på din omröstning. En tabell för de olika omröstningarna, sen en tabell som innehåller alla röster länkade till den aktuella omröstningen. När du väl har databasen så får du skapa en röstningsfunktion där du matar databasen med information.
När du väl har detta i en databas kan du alltid visa det på olika sätt och lägga energi på olika utseenden med procent och liknande.

Visa signatur

"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." - Brian W. Kernighan

Permalänk
Medlem

Okejokej, att få in allting i databasen är egentligen inga problem och tackar så mycket för vägledningen. Hade tänkt något sånt.

Men frågan är ju hur jag ska få ett bra utseende, hur ska jag använda för att få en bar för dom olika när dom röstar? så den höjs varje gång etc, etc.

Permalänk
Medlem
Skrivet av pettiz:

Okejokej, att få in allting i databasen är egentligen inga problem och tackar så mycket för vägledningen. Hade tänkt något sånt.

Men frågan är ju hur jag ska få ett bra utseende, hur ska jag använda för att få en bar för dom olika när dom röstar? så den höjs varje gång etc, etc.

Presentation av datat är separerat från logiken av att rösta och att spara rösterna.

Den absolut enklaste presentationen, om du vill ha staplar är att göra en <div> baserat på höjd eller bredd i procent.

Säg att du har tre stycken alternativ: Ja, nej, kanske. Där rösterna är 20, 100 respektive 80.

Formel du kan använda för att göra procentuella staplar är:
(Antal röster / totalt antal röster) multiplicerat med 100
Ex: "Kanske"-röster (80) delat med totalt antal röster (200) multiplicerat med 100 = 40 (procent)

Då gör du "Ja"-stapeln (20/200)*100 enheter. En enhet kan vara en pixel, fem pixlar eller hur stor du nu än vill. Bara alla enheter är lika stora.
Likaså för "Nej" (100/200)*100
och "Kanske" (80/200)*100

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Jo, fick ihop det med presenationen. Det var rätt simpelt, efter en hel del tänkande då!

Men nu har jag fått en total brainfreeze, vet inte hur jag ska göra med hanteringen av datan osv.

Så en till knuff på vägen skulle sitta fint!

Permalänk
Medlem
Skrivet av pettiz:

Jo, fick ihop det med presenationen. Det var rätt simpelt, efter en hel del tänkande då!

Men nu har jag fått en total brainfreeze, vet inte hur jag ska göra med hanteringen av datan osv.

Så en till knuff på vägen skulle sitta fint!

Hur ser dina tabeller ut?

Skickades från m.sweclockers.com

Permalänk
Medlem

Votes {
VotesID
Total
Alternativ
};

vote_name {
VoteID
vote_name
ip
};

så ser dom ut

Permalänk
Medlem

Jag skulle nog börjat med att skapa ett formulär i ett tomt HTML dokument och sedan fått det att kommunicera korrekt med databasen till att börja med och fokusera på hur det ser ut senare.

Du kan ex börja med att ge varje alternativ ett id. Lämpligtvis så ger du det översta 1 eller 0. När någon sedan bockar i ett alternativ och trycker "Submit" så vill du lägga till en rad i din tabell över röster. I den tabellen kan det vara lämpligt att ha med vem som röstat(anv.namn eller IP så att man inte kan spamma) och vilket alternativ de röstat på(ID för deras val).

Ifall du inte planerar att göra det här i någon enorm skala så är det lättast att bara skriva ett PHP/MySQL kommando som räknar hur många rader du har i tabellen som har ID 1, ID 2 osv.

Sen kan du fortsätta att trixa runt med procentberäkningen när du väl har fått fram hur många röster varje alternativ har. Ex Allla med ID 1/ totalen.

Känner att det blev lite luddigt det här men du kan förhoppningsvis få ut något av det

Permalänk
Medlem

Massy, själva koden för att få in allt i databasen etcetc är inte särskilt svårt.

Själva html koden för att få procent och annat är klart, så det är löst.

Men hur ska själva databasen se ut är frågan, tyckte mitt jag la upp här inte kändes särskilt bra.

Skulle du kunna slänga fram något?

Tack för all hjälp än så länge!

Permalänk
Medlem
Skrivet av pettiz:

Massy, själva koden för att få in allt i databasen etcetc är inte särskilt svårt.

Själva html koden för att få procent och annat är klart, så det är löst.

Men hur ska själva databasen se ut är frågan, tyckte mitt jag la upp här inte kändes särskilt bra.

Skulle du kunna slänga fram något?

Tack för all hjälp än så länge!

Du kan börja enkelt precis som Massy skrev. Om du vill göra det mer avancerat så föreslår jag att du tänker fram olika scenarion som kan inträffa eller man vill göra. Jag listar ett par:
Deaktivera poll
Deaktivera poll baserat på en tidpunkt
Aktivera poll baserat på en tidpunkt
Olika många svarsalternativ för olika polls
Olika former av svarsalternativ (en, flera, eget svar)
Statistik för rösterna/när lades rösterna

Alla dessa kräver lite extra kolumner och tabeller. Det är inte fel att lägga till flera kolumner eftersom men det är bra att gå igenom allt man kan och skulle kunna göra med ett pollsystem.

Jag spottar ur mig en tänkbar struktur över databasen och försöker kommentera allt.

tabell: poll
kolumner:
pollid (bigint)
pollcreatedate (date) -- När den skapades
pollvalidstartdate (date) -- När den ska aktiveras
pollvalidenddate (date) -- När den ska deaktiveras
pollstatus (int) -- Vad det är för typ av poll (en, flera eller eget svar)

tabell: pollanswer
kolumner:
pollanswerid (bigint)
fk_pollid (bigint) -- Koppling som säger att detta svar tillhör en specifik poll.
pollanswertext (nvarchar) -- Namnet på svarsalternativet.
pollanswertype (int) -- Svarsalternativstyp (ikryssning eller fritext)
pollanswerschemeorder (int) -- Ordningen det skall presenteras

tabell: vote
kolumner:
voteid (bigint)
votedate (date) -- Datum när rösten lades
fk_pollanswerid (bigint) -- Koppling till vilket svarsalternativ man valde
votetext (nvarchar) -- Svaret man gav för det svarsalternativet

Säg att man skapar en ny poll med frågan "Har du köpt Diablo 3?" där svarsalternativen "Ja, Nej, Nej - men jag planerar att göra det" finns.

Då blir det en "poll" och tre stycken "pollanswer".
När någon lägger en röst så sparar man en "vote".

Har man en "user"-tabell så bör det kopplas på en responsibleuser (Användaren som skapade pollen) på "poll" samt en koppling till "user" på "vote"

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Leedow:

Kan bara tacka för en väldigt bra utförlig förklaring och hur databasen kan se ut!
Ska ge mig på detta så fort som möjligt, tack så mycket!

Hör av mig ifall problem uppstår eller liknande.