Grafika publishing webtip.cz grafika.cz mujiPod.cz mujmac.cz fotografovani.cz printing.cz builder.cz galerie
webtip.cz
adresář  | práce  | diskuse  | redakce  | inzerce
 
 


  ASP v praxi, 5. díl - Anketa (2.)
o autorovi 
poslat mailem 
tisknout článek 
aktuální rubrika 
Anketa popsaná v minulém díle měla jednu velkou nevýhodu - odpovědí musel být určitý počet. V tomto díle vytvoříme anketu, ve které bude moci být libovolný počet odpovědí.

Liška Adam - 17.01.2003 - clanek - Rubrika: ASP
Předchozí díl: ASP v praxi, 4. díl - Anketa
Seriál: 
Následující díl: ASP v praxi, 6. díl - Anketa (3.)

Představte si, že byste používali anketu z minulého dílu a chtěli například změnit počet odpovědí ze čtyř na tři. V takové situaci je třeba změnit tabulku v databázi (smazat příslušná pole). Stránka anketa.asp by místo čtyř odkazů vypisovala jen tři, vypočítávala pouze tři šířky apod. To je zbytečná práce a lze se jí vyhnout, když již od prvotního návrhu necháte aplikaci jakousi "volnost".

Hlavní změnou projde tabulka v databázi. Rozdělíme ji na dvě samostatné části. Ty však budou provázané. Jedna bude obsahovat otázky, druhá odpovědi. Tabulka s otázkami má tuto strukturu:

Název pole Datový typ
idankety automatické číslo - primární klíč
jmeno text
otazka text
zobrazovat číslo

V druhé tabulce, ank_odpovedi, budou, jak již bylo řečeno, uloženy odpovědi. Každý záznam (odpověď) obsahuje i informaci, ke které anketě patří - její ID (pole idankety):

Název pole Datový typ
idodpovedi automatické číslo - primární klíč
idankety číslo
odpoved text
pocet číslo

Počet odpovědí na otázku závisí na počtu záznamů v tabulce ank_odpovedi, které mají v poli idankety ID příslušné ankety. Jednou jich může být pět, podruhé jen dvě.

Teď začneme vytvářet samotné soubory s ASP kódem. Ty budou, jako v minulém díle, dva - anketa.asp a zapis.asp. Zdrojový kód prvního je následující:

<%
response.expires = -1000

Set conn = Server.CreateObject("ADODB.Connection")
conn.open "ankety"

' vybrání aktivní ankety
Set rs = conn.Execute("SELECT idankety, otazka FROM ank_otazky WHERE zobrazovat = 1")
' pokud nějaká je, ...
If NOT rs.eof OR NOT rs.bof Then
idank = rs("idankety")
otazka = rs("otazka")

' pomocí tzv. agregační funkce SUM zjistíme celkový počet hlasujících
Set rs = conn.execute("SELECT SUM(pocet) AS celkem FROM ank_odpovedi WHERE idankety = " & idank)
celkem = rs("celkem")

' vybrání odpovědí, které přísluší k aktivní anketě
strSQL = "SELECT * FROM ank_odpovedi WHERE idankety = " & idank
Set rs = conn.execute(strSQL)

' pokud nějaké jsou, ...
If NOT rs.eof OR NOT rs.bof Then
%>
<html>
<head>
<title>Anketa</title>
</head>
<body>

<%
' vypsání otázky
response.write "<b>" & otazka & "</b><br><br>"
Do While NOT rs.EOF
' vypočítání šířky
If rs("pocet")>0 Then
intSirka = int(((rs("pocet"))/celkem) * 100)
Else
intSirka = 0
End If

' vypsání odkazu s odpovědí a s pruhem
response.write "<a href='zapis.asp?ID=" & rs("idodpovedi") & "'>" & rs("odpoved") & "<br><img src='ank.gif' width='" & intSirka & "' height='5' border='0'></a>  (" & intSirka & "%)<br>"
rs.MoveNext
Loop
%>

</body>
</html>

<%
End If
' uvolnění paměti
conn.close
Set rs = Nothing
Set conn = Nothing
End If
%>

Doufám, že díky okomentování nemusím kód nijak blíže popisovat - až na tzv. agregační funkce. To jsou speciální příkazy v SQL, pomocí kterých můžeme zjišťovat např. celkový počet záznamů v tabulce, součet všech hodnot ve sloupci apod.

Soubor zapis.asp se od minulého dílu moc nezměnil:

<%
response.expires = -1000
response.buffer = true
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "ankety"
intID = int(Request.QueryString("id"))
strSQL = "SELECT idankety FROM ank_otazky WHERE zobrazovat = 1"
set rs = conn.execute(strSQL)
id_ankety = rs("idankety")
If Request.Cookies("anketa" & id_ankety) <> "hlasoval" AND isNumeric(intID) Then
strSQL = "UPDATE ank_odpovedi SET pocet = pocet + 1 WHERE idodpovedi=" & intID
conn.execute(strSQL)

Response.Cookies("anketa" & id_ankety)="hlasoval"
Response.Cookies("anketa" & id_ankety).Expires = dateadd("YYYY", +1, now)
End If

conn.close
Set conn = nothing
Set rs = nothing
Response.Redirect "anketa.asp"
%>

Nyní máme tuto vylepšenou anketu hotovu. Samozřejmě, že si můžete stáhnout všechny použité soubory.

V příštím díle vytvoříme administrační část, pomocí které budete moci spravovat všechny vaše ankety.

Liška Adam


Hodnocení článku: -1- -2- -3- -4- -5-  Aktuální hodnocení: 2.69 (2297)

Relevantní články
Žádné články


Příspěvky do diskuse o aktuálním článku

K tomuto článku zatím nejsou žádné příspěvky
 

 

  O vydavateli | Kontakt | Ceník reklamy | Ochrana osobních dat
©2002 Grafika Publishing. Všechna práva vyhrazena!