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, 7. díl - Anketa (4.)
o autorovi 
poslat mailem 
tisknout článek 
aktuální rubrika 
V tomto díle upravíme náš anketní systém tak, aby sám vybíral aktivní anketu podle zadaných dat.

Liška Adam - 07.02.2003 - clanek - Rubrika: ASP
Předchozí díl: ASP v praxi, 6. díl - Anketa (3.)
Seriál:
Následující díl: ASP v praxi, 9. díl - Diskusní fórum (2.)

Dostal jsem od jednoho čtenáře dotaz, zda by nebylo možné určovat dobu působnosti ankety. Možné to je - při její tvorbě se určí datum počátku a konce ankety. Otevřením stránky s anketou se zobrazí právě ta anketa, do jejíž intervalu nastavených dvou dat spadá datum návštěvy.

Tato změna vyžaduje několik úprav. V tabulce ank_otazky se pole zobrazovat nahradí poli start a konec:

Název pole Datový typ
idankety automatické číslo - primární klíč
jmeno text
otazka text
start datum/čas
konec datum/čas

Druhá tabulka, ank_odpovedi, zůstane beze změny.

Další úpravou projde hlavní stránka ankety, anketa.asp. Zde se změní způsob vybíraní aktivní ankety. Místo porovnávaní pole zobrazovat se bude zkoumat, zda datum návštěvy spadá do intervalu dat anket. V případě, že tomu tak je, příslušná anketa se návštěvníkovi zobrazí. Pro porovnávání dvou dat je ve VBScriptu určena funkce DateDiff:

DateDiff ( interval, datum1, datum2)

interval - udává, v čem se má rozdíl počítat (ve dnech, v rocích atp.). My budeme rozdíl počítat ve dnech, proto zadáme hodnotu "d".
datum1 a datum2 - data, která chceme porovnávat

Pokud je první datum menší (dřívější) než druhé, funkce vrací kladnou hodnotu, pokud je větší (pozdější), tak zápornou. SQL kód, pomocí kterého vybereme aktivní anketu, proto bude vypadat takto:

SELECT * FROM ank_otazky WHERE DateDiff('d',start,Date())>=0 AND DateDiff('d',konec,Date())<=0

V první podmínce, DateDiff('d',start,Date())>=0, vrátí funkce DateDiff číslo větší než nula (nebo rovno), pokud je datum zpracování - návštěvy (funkce Date()) větší než datum v poli start (nebo rovno). U druhé podmínky je to obdobné.

<%
response.expires = -1000
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "ankety"
' vybrání anktivní ankety
Set rs = conn.Execute("SELECT otazka, idankety FROM ank_otazky WHERE DateDiff('d',start,Date())>=0 AND DateDiff('d',konec,Date())<=0")
' Místo: Set rs = conn.Execute("SELECT idankety, otazka FROM ank_otazky WHERE zobrazovat = 1")
...

Hlavní soubor administrační části, aadmin.asp, se úpravě také nevyhne. Na pohled největší změnou bude zrušení formuláře na vybírání aktivní ankety (a s tím pochopitelně i zpracovacího kódu tohoto formuláře):

Dále se při výpisu anket do tabulky přidají dva sloupce, Start a Konec, a sloupec odkazující na stránku edit.asp:

Do Until rs.EOF
Response.write "<tr><td>" & rs("idankety") & "</td>"
Response.write "<td>" & rs("jmeno") & "</td>"
Response.write "<td>" & rs("otazka") & "</td>"
Response.write "<td>" & rs("start") & "</td>"
Response.write "<td>" & rs("konec") & "</td>"
Response.write"<td><ahref='delete.asp?id=" & rs("idankety") & _
"'>Vymaž</a></td>"
Response.write"<td><ahref='edit.asp?id=" & rs("idankety") & _
"'>Edit</a></td></tr>"
rs.MoveNext
Loop

Na stránce edit.asp bude moci administrátor změnit data startu a konce ankety. Může tak například znovu spustit již některou starší anketu, či jinou zase trochu oddálit (obrázek):

<%
response.buffer = true
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "ankety"
' Editační část...
If len(Request.QueryString("id"))>0 Then
intID = Request.QueryString("id")
Set ank = conn.execute("SELECT * FROM ank_otazky WHERE idankety=" & intID)
Set odp = conn.execute("SELECT * FROM ank_odpovedi WHERE idankety=" & intID)
%>

<html>
<head>
<title>Edit</title>
</head>
<body><br><formaction="edit.asp?update=<%= intID %>" method="post">
<table>
<tr><td width="125"><b>Název ankety</b></td><td><%= ank("otazka") %></td></tr>
<tr><td><b>Odpovědi</b></td><td>
<%
Do While NOT odp.EOF
response.write odp("odpoved") & "     "
odp.MoveNext
Loop
%>
</td></tr>
<tr><td><b>Start</b></td><td><input type="text" name="start"></td></tr>
<tr><td><b>Konec</b></td><td><input type="text" name="konec"></td></tr>
<tr><td><input type="submit" value="Odeslat"></td></tr>
</table>
</form>
</body>
</html>

<%
Set ank = Nothing
Set odp = Nothing
' Změna dat v databázi
ElseIf len(Request.QueryString("update"))>0 Then
dtmStart = Request.Form("start")
dtmKonec = Request.Form("konec")
' Kontrola, zda datum ukončení je pozdější než datum startu...
If DateDiff("d",dtmStart,dtmKonec)>0 Then
conn.execute("UPDATE ank_otazky SET start = '" & dtmStart & "', konec = '" & dtmKonec & "' WHERE idankety = " & Request.QueryString("update"))
Else
response.redirect "edit.asp?id=" & Request.QueryString("update")
End If

response.redirect "aadmin.asp"
Else
response.redirect "aadmin.asp"
End If
conn.close
Set conn = Nothing
%>

Posledními soubory, které se upraví, jsou soubory na přidávání nových anket. V souboru nova.asp se doplní dvě nová vstupní pole, Start a Konec:

...
<tr><td width="150">Název ankety</td><td><input type="text" name="jmeno" maxlength= "20"value=<%= request.querystring("jmeno") %>></td></tr>
<tr><td>Otázka</td><td><input type="text" name= "otazka"value=<%= request.querystring("otazka") %>></td></tr>
<tr><td>Počet odpovědí</td><td><input type="text" name="pocet" maxlength="2" size= 1value=<%= request.querystring("pocet") %>></td></tr>
<tr><td>Start</td><td><input type="text" name= "start"value=<%= request.querystring("start") %>></td></tr>
<tr><td>Konec</td><td><input type="text" name= "konec"value=<%= request.querystring("konec") %>></td></tr>
...

V souboru nova2.asp se při počáteční kontrole posílaných dat zjistí, zda je první datum menší než druhé (nebo rovno), a přidají se dvě skrytá pole, která tato data budou uchovávat:

...
If ... And DateDiff("d",request.form("start"),request.form("konec"))>=0
...
<input type= "hidden"value='<%= request.form("pocet") %>' name="pocet">
<input type="hidden" value='<%= request.form("jmeno") %>' name="jmeno">
<input type="hidden" value='<%= request.form("otazka") %>' name="otazka">
<input type= "hidden"value='<%= request.form("start") %>' name="start">
<input type= "hidden"value= '<%= request.form("konec") %>' name="konec">

...

A konečně v posledním souboru, nova3.asp, se musí změnit SQL kód, který vkládá anketu do databáze (pole zobrazovat -> start a konec):

...
conn.execute("INSERT INTO ank_otazky(jmeno, otazka, start, konec) VALUES('" & request.form("jmeno") & "', '" & request.form("otazka") & "', '" & request.form("start") & "', '" & request.form("konec") & "')")
...

Tím máme tuto verzi anketního systému hotovu. Můžete si vybrat variantu z minulého dílu, kde aktivní anketu nastavujete formulářem, anebo dnešní, jež zobrazí aktuální anketu sama dle zadaných dat...

Liška Adam


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

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


Diskuzní fórum
Kuko28.10.11:32ine ankety
zajda30.04.15:11Lépe zobrazit při editaci odpovědi
zajda30.04.15:07Doplnit datumy při editaci v edit.asp

 

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