helopp!
har gjort en poll, som är väääldigt enkel! tre svars alternativ! Ja / Nej / vet ej, och grafiska bar som visa procent på rösningarna och lite kakor och sånt!
men..
Nu vill jag skapa en mer avancerad poll där jag kan bestämma hur många svarsalternativ det skall finnas t.ex kan den se ut så här!
Vad tycker du om webforum?
Superduperbra!
kan bli bättre
webforum?
elelr kanske
Hur ofta sitter du vid datorn?
1 ggr i veckan
1 ggr per dag
10 ggr per dag
25 gånger per år
osv
osv
osv
I stort sätt det jag har problem med är databasens uppbyggnad för denna sorts poll. resten e väl förhoppningsvis inga problem :) jag spekulerar lite kring detta, men det går inte så bra! :(
Poll
id - räknare
pollid - tal (så man håller koll på vad som hör till vad)
MVH
annoMedlem sedan nov. 2000213 inlägg Så här kan man tänka sig att det kan se ut.
En huvudtabell med allmän info om omröstningen:
tblPoll
PollID (Räknare)
Name (Namn på omröstningen)
Question (Frågan)
Start (Startdatum)
End (Slutdatum)
En tabell med alla svarsalternativ:
tblOption
OptionID (Räknare)
PollID
Option (Svarsalternativ)
En tabell med alla inkomna svar:
tblAnswer
AnswerID (Räknare)
PollID
OptionID
Med hjälp av PollID så kopplar du ihop svarsalternativen och svaren som gjorts med huvudtabellen och med denna struktur kan du lägga till hur många svarsalternativ som helst.
Okej tack så mkt! D där blev bokstavligen avancerat!
ska klura lite på det där =)
MVH
Okej nu har jag tänkt och knåpat en hel del! Och kommit en bra bit på vägen! Jag har lyckats hämta frågan och alla svarsalternativ som hör till just den pollen! men just där jag har Fetmarkerat vill jag visa hur många procent som har svarat på just det svars alternativet! och det som är kursivt är SQL frågan för att hämta svar som till hör just denna POLL vet att man skall ha
Procent = Delen / det hela * 100
det är inte det som är problemet, men just hur jag ska loopa ut resultatet har jag inte förstått ännu =/
Tabell uppsättningen är som den som är beskriven här ovan!
%
' Databaskoppling
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databaser/poll.mdb")&";"
' Hämta fråga
strSQL = "select * from tblPoll ORDER BY PollID DESC"
set RSpoll = conn.execute(strSQL)
' ID för den senaste Pollen
pollId = RSpoll("pollid")
' Hämta alla svarsalternativ
strSQL = "select * from tblOption WHERE PollID = '"&pollid&"'"
set RSOption = conn.execute(strSQL)
[b][i]' Hämta alla resultat
strSQL = "select * from tblAnswer WHERE PollID = '"&pollid&"'"
set RSAnswer = conn.execute(strSQL)[/i][/b]
fraga = RSpoll("question")
%>
<table width="550" border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#CC0000"><%=fraga%></td>
</tr>
<%
Do until RSOption.eof
svar = RSOption("option")
%>
<tr>
<td><%=svar%></td>
</tr>
<tr>
<td>[b]Här vill jag visa antalet procent[/b]</td>
</tr>
<%
RSOption.movenext
loop
%>
<tr>
<td>antal</td>
</tr>
</table>
<%
Conn.close
RSPoll.close
RSOption.close
RSAnswer.close
Set Conn = nothing
Set RSPoll = nothing
Set RSoption = nothing
Set RSAnswer = nothing
%>
Nu har jag jobbat vidare lite, och skall testa en teori :)! Men har kört fast! Min count vill inte fungera! :(
både kolumnen PollID och OptionID är av typen "TAL"
<%
Do until RSOption.eof
svar = RSOption("option")
opid = RSOption("OptionID")
SQL = "SELECT Count(OptionID) AS intAntal FROM tblAnswer WHERE PollID = "&PollID&" AND OptionID = "&opid&""
Set RScount = conn.execute(SQL)
%>
<tr>
<td><%=svar%></td>
</tr>
<tr>
<td><%=intAntal(0) %></td>
</tr>
<%
RSOption.movenext
loop
%>
och felmeddelandet jag får är! Line 41 är SQL count frågan!
Körningsfel i Microsoft VBScript (0x800A000D)
Inkompatibla typer: 'intAntal'
/community/poll_show.asp, line 41
Engine^Medlem sedan dec. 20003 887 inlägg Det kanske beror på att du är trött... ;)
<tr>
<td><%=[b]RScount(0)[/b]%></td>
</tr>
Engine^ skrev:
Det kanske beror på att du är trött... ;)
<tr>
<td><%=[b]RScount(0)[/b]%></td>
</tr>
Det ryktas om det! :) Tack så mkt Engine :)
Pollen verkar fungera utmärkt nu när jag har massa värden i databasen som åså! har inte skapat så den röstar ännu! =P men hur som hälst! Nu till mitt nästa problem!
på min adminsida hade jag tänkt att ha 10st textfält som man kan skriva in olika svars alternativ! varje form heter 1 2 3 4 5 osv osv! men hur skall jag gör på sidan där allt läggs in i självaste databasen att den endast fyller i formulär
1, 2, 3, 4 (av alla tio)
så skall den endast lägga in 4 nya poster i databasen istället för att skicka in 10 poster till databasen som är anknytna till den pollen fast endast det endast finns 4 svars alternativ och restrerande 6 poster förblir blanka och det ser fult ut på självaste hemsidan!
Nån som förstår vad jag dillar om?
MVH
@ndersMedlem sedan juni 200032 969 inlägg Se bara till att du inte stoppar in något om fältvärdet från formuläret är tomt. Om vi utgår ifrån att du har tio fält i formuläret som heter svar1, svar2 osv t.o.m. svar10 kan man göra något sånt härnt:
for i = 1 to 10
strValue = Request.Form("svar" & i)
if strValue <> "" then
' Här görs insert med strValue som värde på svarsalternativet.
end if
Next
Hajaru? :)
Mvh
@nders skrev:
Se bara till att du inte stoppar in något om fältvärdet från formuläret är tomt. Om vi utgår ifrån att du har tio fält i formuläret som heter svar1, svar2 osv t.o.m. svar10 kan man göra något sånt härnt:
for i = 1 to 10
strValue = Request.Form("svar" & i)
if strValue <> "" then
' Här görs insert med strValue som värde på svarsalternativet.
end if
Next
Hajaru? :)
Mvh
Ouh.. snabba svar här! Precis det jag letade efter! Tackar Tackar! =)
Jesper TMedlem sedan nov. 20017 144 inlägg Kan man inte lägga in alla tio och sedan plocka bort de rader som är tomma?
Kanske är mindre effektivt?
@ndersMedlem sedan juni 200032 969 inlägg
Jesper T skrev:
Kan man inte lägga in alla tio och sedan plocka bort de rader som är tomma?
Kanske är mindre effektivt?
Jo, det är klart man kan, men det är helt klart mindre effektivt.
Inte köper du tio förpackningar ägg bara för att de låg tillsammans i affären, för att sedan bara vända när du kommer hem, "Jag ville ändå bara ha ett paket"? ;)
Mvh
Jesper TMedlem sedan nov. 20017 144 inlägg Nej, men om jag köper tio förpackningar ägg och sju utav dem är tomma så kan jag ju slänga de tomma när jag kommer hem.
Fast det är klart, det är ju onödigt att bära hem tomma förpackningar såvida man inte skall bygga en studio klädd med äggkartonger.... ;)
Uäh!
PollID = RSPoll("PollID")
for i = 1 to 10
strValue = Request.Form("svar" & i)
if strValue <> "" then
SQL = "INSERT INTO tblOption (PollID, Option) VALUES ('"&PollID&"' , '"&strValue&"')"
conn.execute(SQL)
end if
Next
Genererar följande tråkigheter!
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel i INSERT INTO-uttryck.
Har kollat så alla taellnamn stämmer osv! Testat att ta bort enkel fjuttar! utan några resultat!
Tar jag bort och skriver Response.write RSPoll("PollID"), så får jag fram en siffra, vilket gör att man kan utesluta det problemet!
SQL strängen ser hel ut för mig!?
Jesper TMedlem sedan nov. 20017 144 inlägg 1. ("&PollID&", '"&strValue&"'....
2. Skriv ut :
SQL = "INSERT INTO tblOption (PollID, Option) VALUES ('"&PollID&"' , '"&strValue&"')"
'conn.execute(SQL)
Response.write SQL
@ndersMedlem sedan juni 200032 969 inlägg Option är ett reserverat ord. Byt namn på fältet.
Mvh
@nders skrev:
Option är ett reserverat ord. Byt namn på fältet.
Mvh
Du hade rätt! (igen) :) Danke Schön
men nu skall vi inte ha så himla bråttom! när jag skapar en ny poll! så finns det inga resultat i databasen eftersom ingen har hunnit rösta ännu, och när jag försöker hämta pollen på första sidan så får jag felmedelande "Spill" hur löser jag detta då? med tanke på att jag vill juhe inte lägga in ett svar som inte är giltigt o fuska på en frånt =) hehe den nya uppdaterade koden ser som såhär!
<%
' Databaskoppling
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databaser/poll.mdb")&";"
' Hämta fråga
strSQL = "select * from tblPoll ORDER BY PollID DESC"
set RSpoll = conn.execute(strSQL)
' ID för den senaste Pollen
pollId = RSpoll("pollid")
' Hämta alla svarsalternativ
strSQL = "select * from tblOption WHERE PollID = "&pollid&""
set RSOption = conn.execute(strSQL)
' Hämta alla resultat
strSQL = "select * from tblAnswer WHERE PollID = "&pollid&""
set RSAnswer = conn.execute(strSQL)
fraga = RSpoll("question")
%>
<table class="td" width="535" border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#CC0000"><span class="style1">Omröstning</span></td>
</tr>
<tr>
<td height="1"></td>
</tr>
<tr>
<td bgcolor="#CCCCCC"><b><%=fraga%></b></td>
</tr>
<tr>
<td height="1"></td>
</tr>
<%
SQL = "SELECT Count(*) AS intAntal FROM tblAnswer WHERE PollID = "&pollid&""
Set RSCountallt = conn.execute(SQL)
Do until RSOption.eof
svar = RSOption("svarsval")
opid = RSOption("OptionID")
SQL = "SELECT Count(*) AS intAntal FROM tblAnswer WHERE PollID = "&pollid&" AND OptionID = "&opid&""
Set RSCountdel = conn.execute(SQL)
%>
<tr>
<td bgcolor="#E0DFE3"><%=svar%></td>
</tr>
<tr>
<td bgcolor="#E0DFE3"><%
procent = Round(RSCountdel(0) / RSCountallt(0) * 100)
%><IMG src="syspic/nbar.gif" height="5" width="<%=procent%>%"> <%=procent%>%</td>
</tr>
<tr>
<td height="1"></td>
</tr>
<%
RSOption.movenext
loop
%>
<tr>
<td bgcolor="#E0DFE3">Antal röster = <%=RSCountallt(0)%></td>
</tr>
<tr>
<td height="1"></td>
</tr>
</table>
<%
RSOption.close
RSPoll.close
RSAnswer.close
Conn.close
Set Conn = nothing
Set RSoption = nothing
Set RSAnswer = nothing
Set RSPoll = nothing
%>