Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Artiklar / Titel på artikeln

Konsten att rösta, inkl. stapeldiagram

Postad 2005-06-02 av Benni Svensson i sektionen ASP.NET, C#, Okategoriserat med 1 Kommentarer | Läst av: 6524, Betyg: 94%

Förord

Då och då, så dyker frågan upp, om hur man bör skriva ett lyckat röstnings-script. Därtill så har man i regel lite olika önskemål, om uppbyggnad och teknisk utformning. För min del, så vill jag alltid att någonting skall hända på en asp-sida, därför så visar jag hur man gör en röstapplikation med en slumpgenerator, som helt enkelt slumpar fram frågan.
Innehåll
  » Inledning
  » Databasen
  » dataconn.asp
  » MinaSubbar.asp:
  » Vote.asp
  » Uppdatera databasen
  » Hela koden
  » Avslutningsvis
Relaterade artiklar


Inledning


Precis som jag har gjort i mina tidigare artiklar

Artikel [Ett Administrations script för webb baserad databas Del 1]

Artikel [Ett Administrations script för webb baserad databas del 2]

Artikel [Ett Administrations script för webb baserad databas del 3]

Artikel [Skriv inte för mycket kod, återanvänd den istället.]

så använder jag en include-fil för min data-connection, och en fil för mina subbar
(för koder som upprepas).



Databasen

Databasen har jag kallat för vote.mdb, och består av två tabeller

t_quize:














FälnamnDatatyp
IDRäknare primärnyckel
Quizetext text 50 tecken


t_answer:


























FälnamnDatatyp
a_idRäknare primärnyckel
idtal främmande nyckel till tabellen t_quize
vyestal räknar upp alla yes-svar
vnotal räknar upp alla no-svar
vdontKnowtal räknar upp alla dontKnow-svar


Relationen t_quize.id ? t_answer.id
Detta är en väldigt enkel design, men jag har ändå försökt att hålla mig till normaliserings
reglerna så långt som jag har förstått.



dataconn.asp


Denna fil ser i stort sett ut som tidigare…


Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & server.MapPath("vote.mdb")


I detta exempel, så har jag lagt databasen i rooten(inte att rekommendera), enbart för
enkelhetens skull.




MinaSubbar.asp:



MinaSubbar har jag lagt in som en include-fil, det är alltså koder som kommer eller
kan komma att användas flera gånger.


Sub MakeRecordSet(rec,sql,con)
Set rec = Server.CreateObject("ADODB.Recordset")
rec.open sql,con, 2, 2
End Sub


Denna sub gör det enkelt att öppna upp ett rekordset, samt köra SQL:en. Som ni
ser så vill den ha tre argument, vad vi skall kalla rekordsetet för, SQL:en samt
connectionsträngen. Den används så här:


SQL="SELECT id FROM t_answer WHERE id =" & nId
CALL MakeRecordSet(rst,SQL,Connection)


Nästa subb är lite större. Den används för att räkna fram alla ja/nej/vetinte-röster,
räknar procenten samt visar ett stapeldiagram.


SUB Voting(sID)
SQL="SELECT a_id,id,vyes,vno,vdontKnow from t_answer WHERE id =" & sID
CALL MakeRecordSet(rst,sql,Connection)
if not rst.eof then
totalt= rst("vyes") + rst("vno") + rst("vdontKnow")
dim syes
syes = rst("vyes")/totalt * 100
sno = rst("vno")/totalt * 100
sdontknow = rst("vdontKnow")/totalt * 100

response.write "
"
response.write "
"
response.write "
Ja" & "
 " & FormatPercent(rst("vyes")/totalt) & "
Nej" & "
 " & FormatPercent(rst("vno") / totalt) & "
Vet inte" & "
 " & FormatPercent(rst("vdontKnow") / totalt) & "
"

end if
End Sub




Vote.asp


Den kod som jag har skrivet, baseras på en slumgenerator, dvs den slumpar
fram en fråga av alla de frågor som finns i databasen. Detta system gör att det
hela tiden tycks hända någonting på sidan.

Skulle man istället vilja ha en fråga i veckan eller i månaden så är det inga problem:


'Veckonummer
strId = DatePart("ww", Now(), vbUseSystemDayOfWeek, vbUseSystem)
'Månaden i tal
strId= DatePart("m", Now(), vbUseSystemDayOfWeek, vbUseSystem)


Och då blir SQL:en:


SQL = "SELECT id,quize FROM t_quize WHERE ID = " & strId


…men nu så skulle vi ha ett randomscript och det ser ut så här:


SQL = "SELECT id,quize FROM t_quize Order BY id "
CALL MakeRecordSet(rst,SQL,Connection)
Dim arrData
Dim arrSequencer
Dim iArrayLooper
Dim iArraySize
arrData = rst.GetRows’här får vi allt vad som finns i databasen
'stänger objecten
rst.close
Set rst = Nothing
’hur många poster finns det i databasen
iArraySize = CLng((Ubound(arrData, 2) - LBound(arrData, 2)))
Randomize’slumpar fram ett id
'nu har vi fått ett random nr och hämtar det ifrån arrayen
i = CInt(Int((iArraySize * Rnd()) + 1))
strId = arrData(0, i)
strquize = arrData(1, i)
'skriver ut frågan
response.write "
" & strquize & "
"


För min del så tycker jag att detta är ett väldigt smidigt sätt att dynamiskt få en
levande asp-sida.



Uppdatera databasen


Ifrån formen, så skickas id(som vi fick ifrån slumgeneratorn) med, och det första
vi måste göra är, att kolla, har det röstats på denna fråga innan?
Har det inte det, så måste vi göra en INSERT, annars så gör vi en UPDATE.
Men innan detta, så måste vi se vad som har röstats. Det gör vi med en CASE SELECT-sats


Dim totalt,nVote,sAnsw
nVote=Request.form("Vote")'variabler ifrån formuläret
nId = request("id")'variabler ifrån formuläret

SELECT CASE nVote'härkollar vi vad som röstades, och ger variablen ett tal
Case "yes" 'som vi använder när vi skall uppdateara röstningen
sAnsw ="vyes" 'fältnamn i databasen
iAnsw = 1
Case "no"
sAnsw ="vno" 'fältnamn i databasen
iAnsw = 1
Case "dont_know"
sAnsw ="vdontKnow" 'fältnamn i databasen
iAnsw = 1
End Select


Nu får vi reda på o, användaren har klickat på yes/no/dontknow, och vi sparar
variablerna så vi lätt kan uppdatera databasen.


'Vi kollar efter om denna fråga har röstats på tidigare
SQL="SELECT id FROM t_answer WHERE id =" & nId
CALL MakeRecordSet(rst,SQL,Connection)

if rst.eof then
'om den inte har det så måste vi göra en insert
SQL = ("Insert INTO t_answer(id," & sAnsw & ")VALUES(" & request("id") & "," & iAnsw & ")")
Connection.Execute(SQL)
else
'annars så gör vi en uppdate och plussa på med ett
SQL = "UPDATE t_answer set " & sAnsw & " = " & sAnsw & " +1 WHERE id =" & request("id") & " "
Connection.Execute(SQL)
end if


Slutligen så sätter vi en cookies, för att man inte skall kunna rösta en gång till samma dag:


'Vi sätter en cookies så att det inte går att rösta med en gång igen
Response.Cookies("vote")("yes") = "yes"
Response.Cookies("vote").Expires = date()+1'antal dagar cookies skall leva


När man sedan laddar applikationen, så kollar vi om det finns en cookies, finns det en
så gör vi radioknapparna och submittknapparna disabla, annars inte.


If LEN(Request.Cookies("vote")("yes")) > 0 Then
sdisabled ="disabled"
else
sdisabled =""
End If


Nu är det dags att visa den hela koden:


Hela koden




< % Response.Buffer = true % >
< !--#include file="dataconn.asp"-- >
< !--#include file="Style/MinaSubbar.asp"-- >



Vote<



< %
Dim sdisabled
session.LCID = 1053

if LEN(Request.form("btnsubmit"))>0 AND LEN(Request.form("Vote"))>0 then
Dim totalt,nVote,sAnsw
nVote=Request.form("Vote")'variabler ifrån formuläret
nId = request("id")'variabler ifrån formuläret

SELECT CASE nVote'härkollar vi vad som röstades, och ger variablen ett tal
Case "yes" 'som vi använder när vi skall uppdateara röstningen
sAnsw ="vyes"
iAnsw = 1
Case "no"
sAnsw ="vno"
iAnsw = 1
Case "dont_know"
sAnsw ="vdontKnow"
iAnsw = 1
End Select

'Vi kollar efter om denna fråga har röstats på tidigare
SQL="SELECT id FROM t_answer WHERE id =" & nId
CALL MakeRecordSet(rst,SQL,Connection)

if rst.eof then
'om den inte har det så måste vi göra en insert
SQL = ("Insert INTO t_answer(id," & sAnsw & ")VALUES(" & request("id") & "," & iAnsw & ")")
Connection.Execute(SQL)
else
'annars så gör vi en uppdate och plussa på med ett
SQL = "UPDATE t_answer set " & sAnsw & " = " & sAnsw & " +1 WHERE id =" & request("id") & " "
Connection.Execute(SQL)
end if
'Vi sätter en cookies så att det inte går att rösta med en gång igen
Response.Cookies("vote")("yes") = "yes"
Response.Cookies("vote").Expires = date()+1'antal dagar cookies skall leva
end if
% >


Dagens fråga!!!

< %'om det finns en cook disabla radioknapparna och supmittknappen
If LEN(Request.Cookies("vote")("yes")) > 0 Then
sdisabled ="disabled"
else
sdisabled =""
End If

'Vi slumpar fram en fråga ifrån databasen

Dim Connection
SQL = "SELECT id,quize FROM t_quize Order BY id "
CALL MakeRecordSet(rst,SQL,Connection)
Dim arrData ' Array to Store Data
Dim arrSequencer ' Array to Hold Random Sequence
Dim iArrayLooper ' Integer for Looping
Dim iArraySize ' Size of Data Array

arrData = rst.GetRows
'stänger objecten
rst.close
Set rst = Nothing

iArraySize = CLng((Ubound(arrData, 2) - LBound(arrData, 2)))
Randomize
'nu har vi fått ett random nr och hämtar det ifrån arrayen
i = CInt(Int((iArraySize * Rnd()) + 1))
strId = arrData(0, i)
strquize = arrData(1, i)
'skriver ut frågan
response.write "
" & strquize & "
"
% >




name="Vote" value="yes">Ja

name="Vote" value="no">Nej

name="Vote" value="dont_know">Vet inte

VALUE="Rösta" name="btnsubmit">


< %
'här skriver vi ut resultatet
CALL Voting(strId)
% >







Eftersom jag visade hela connection.asp och MinaSubbar.asp ovanför, så skriver jag
inte ut dem igen.

Så här kan det se ut, om man har följt denna artikel:



De bilder som jag har använt till stapeldiagrammet ser ut så här:










Avslutningsvis


Denna applikation är menat som en includefil i t ex öppningsfilen som Du har på din site.
När det gäller formatering osv, så är det ju upp till den egna fantasin.

Någonstans så är det galet med Pelles artikel-applikation, vilket innebär, att jag har varit tvungen
att "fuska" en del.
Jag var tvungen att lägga in mellanslag mellan "<" och "%", mellan "%" och ">".
Likadant mellan "<" och "!" samt mellan "!" och ">".
Jag hoppas att ni tänker på det.

Lycka till

Med vänlig hälsning
Benni Svensson
Upp

1 Kommentarer


  1. Sven-Eric Ingblom
    11 jul 2005

    Hej vill bara tacka för en utförlig beskrivning...

Skriv en kommentar på artikeln

Ditt betyg på artikeln



Kommentar:





Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 602
27 953
271 705
5 951
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies