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, 9. díl - Diskusní fórum (2.)
o autorovi 
poslat mailem 
tisknout článek 
aktuální rubrika 
V tomto díle naše diskusní fórum vylepšíme - přidáme podporu témat.

Liška Adam - 04.04.2003 - clanek - Rubrika: ASP
Předchozí díl: ASP v praxi, 7. díl - Anketa (4.)
Seriál:

V diskusním fóru z minulého dílu byly všechny příspěvky na jednom místě, i když byly každé z jiného oboru. Proto dnes toto fórum vylepšíme a přidáme podporu témat. To znamená, že návštěvník na hlavní stránce diskusního fóra bude mít na výběr z několika témat (pokud by to byl server o programování, tak např. ASP, PHP, C++,...).

To si vyžádá několik změn jak v databázi, tak i v souborech ASP. V databázi budeme muset vytvořit novou tabulku fora a v ní tři pole - idfora, forum a popis. Pole forum bude uchovávat název fóra a pole popis jeho popis. Aby se rozpoznalo, jaký příspěvek patří k jakému diskusnímu fóru, přidáme v tabulce prispevky pole idfora.

Fórum bude nyní pracovat následovně: Návštěvník otevře soubor default.asp, kde, na rozdíl od minulého dílu, budou vypsány odkazy na jednotlivá témata. Po výběru jednoho z nich bude přesměrován na soubor forum.asp, kam se přesune obsah souboru default.asp popsaný v minulém díle. Jednotlivé příspěvky bude zobrazovat soubor prispevek.asp.

Vytvoření souboru default.asp není složité. Záznamy z databáze - názvy fór - vypíše do tabulky (obrázek):

...
Set rs = conn.execute("SELECT * FROM fora")
...
<%
Do Until rs.eof
response.write "<tr><td><a href='forum.asp?id=" & rs("idfora") & "' class='nadpis'>"
response.write rs("forum") & "</a></td></tr>"
response.write "<tr><td width='70%' colspan='3'><ul>" & rs("popis") & "</ul></td></tr>"
rs.MoveNext
Loop
%>

Celý zdrojový kód vypadá následovně:

<%
response.buffer = true
response.expires = -1000
Set conn = Server.CreateObject("ADODB.Connection")
' Otevření spojení
conn.open "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" + Server.MapPath("forum.mdb")
Set rs = conn.execute("SELECT * FROM fora")
%>

<html>
<head>
<title>Untitled</title>
<link rel="STYLESHEET" type="text/css" href="forum.css">
</head>

<body>
<table border="0" width="90%" align="center">
<tr>
<td width="100%" class='hlavicka'><b> Diskusní fóra</b></td>
</tr>
</table>
<table border="0" width="90%" align="center" class='pismo'>
<%
Do Until rs.eof
response.write"<tr><td><a href='forum.asp?id=" & rs("idfora") & "' class='nadpis'>"
response.write rs("forum") & "</a></td></tr>"
response.write "<tr><td width='70%' colspan='3'><ul>" & rs("popis") & "</ul></td></tr>"
rs.MoveNext
Loop
%>
</table>
</body>
</html>

<%
conn.close
Set conn = Nothing
Set rs = Nothing
%>

Odkazy směřují na stránku forum.asp a předávají jí parametr id, který představuje ID tématu - fóra.

Soubor forum.asp bude téměř identický jako soubor default.asp v minulém dílu. Prvním ze dvou rozdílů je, že se budou vybírat jen příspěvky z daného tématu:

intID = Request.QueryString("id")
Set rs = conn.execute("SELECT * FROM prispevky WHERE idfora = " & intID & " AND odpoved = 0 ORDER BY posledni DESC")

Dále budeme muset přidat k formuláři na nový příspěvek skryté pole forum , podle kterého bude soubor novy_prispevek.asp poznávat, jaké číslo má doplnit do pole idfora:

<input type="hidden" name= "forum"value="<%= intID %>">

Celý soubor forum.asp vypadá takto:

<%
If len(Request.QueryString("id"))>0 Then
Set conn = Server.CreateObject("ADODB.Connection")
' Otevření spojení
conn.open "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" + Server.MapPath("forum.mdb")
intID = Request.QueryString("id")
Set forum = conn.execute("SELECT forum FROM fora WHERE idfora = " & intID)
Set rs = conn.execute("SELECT * FROM prispevky WHERE idfora = " & intID & " AND odpoved = 0 ORDER BY posledni DESC")
%>

<html>
<head>
<title>Forum</title>
<link rel="STYLESHEET" type="text/css" href="forum.css">
</head>

<body>
<% If Request.QueryString("chyba")=1 Then %>
<p class="chyba">Chyba! Formulář nebyl správně vyplněn</p>
<% End If %>
<table border="0" width="90%" align="center">
<tr>
<td width="100%" class='hlavicka'> Diskusní fórum - <%= forum("forum") %></td>
</tr>
</table>
<table border="0" width="90%" align="center" class="pismo">
<%
Do Until rs.eof
response.write "<tr><td width= '40%'><a href='prispevek.asp?id=" & rs("idprispevku") & "'>" & rs("predmet") & "</a></td>"
response.write "<td width='20%'>" & rs("autor") & "</td>"
response.write "<td width='10%'>" & rs("pocet") & "</td>"
response.write "<td align='right' width='20%'>" & rs("posledni") & "</td>"
response.write "</tr>"
rs.MoveNext
Loop
%>
</table>
<br><br>
<table border="0" width="90%" align="center">
<tr><td width="100%" class='hlavicka'> Přidat příspěvek</td></tr>
<tr>
<td>
<a name="novy"></a>
<form action="novy_prispevek.asp" method="post">
<table class="pismo">
<tr><td width="150">Jméno</td><td><input type="text" name="jmeno" maxlength= "50"value="<%= request.querystring("jmeno") %>"></td></tr>
<tr><td width="150">Email</td><td><input type="text" name="email" maxlength= "100"value="<%= request.querystring("email") %>"></td></tr>
<tr><td width="150">Předmět</td><td><input type="text" name="predmet" maxlength="100" value="<%= request.querystring("predmet") %>"></td></tr>
<tr><td>Text příspěvku</td><td><textarea name="txt" cols= "50"rows="10"><%= request.querystring("txt") %></textarea></td></tr>
<input type="hidden" name="novy" value="ano">
<input type="hidden" name= "forum"value= "<%= intID %>">
</table>
<input type="submit" value="Odeslat">
</form>
</td>
</tr>
</table></body>
</html>

<%
conn.close
Set conn = Nothing
Set forum = Nothing
Set rs = Nothing
End If
%>

Při vkládání nového příspěvku v souboru novy_prispevek.asp se bude navíc ukládat hodnota do pole idfora, kterou soubor získá z již zmíněného skrytého pole. Dále pak bude nutné návštěvníka přesměrovat na stránku forum.asp (místo default.asp v minulém díle):

intIDfora = request.form("forum")
...
conn.execute("INSERT INTO prispevky(idfora,odpoved,...) VALUES (" & intIDfora & ",0...)")
...
response.redirect "forum.asp?id=" & intIDfora

Soubor novy_prispevek.asp po změnách:

<%
response.buffer = true
response.expires = -1000

If len(request.form("novy"))>0 Then
strJmeno = request.form("jmeno")
strEmail = request.form("email")
If len(strEmail) = 0 Then
strEmail="-"
End If
strPredmet = request.form("predmet")
strTxt = request.form("txt")
intIDfora = request.form("forum")

If len(strJmeno)>0 AND len(strPredmet)>0 AND len(strTxt)>0 Then
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" + Server.MapPath("forum.mdb")
dtmDatum = now()
conn.execute("INSERT INTO prispevky(idfora,odpoved,autor,email,predmet,txt,datum," & _
"pocet,posledni) VALUES (" & intIDfora & ",0,'" & strJmeno & "','" & strEmail & "','"_
& strPredmet & "','"_
& strTxt & "','" & dtmDatum & "', 0,'" & dtmDatum & "')")
conn.close
Set conn = Nothing
Set rs = Nothing
Else
response.redirect "forum.asp?id=" & intIdfora & "&jmeno=" & strJmeno &_
"&email=" & strEmail & "&txt=" & strTxt & "&chyba=1&#novy"
End If
response.redirect "forum.asp?id=" & intIDfora


'********************************************************************************


ElseIf len(request.querystring("odp"))>0 Then
strJmeno = request.form("jmeno")
strEmail = request.form("email")
If len(strEmail) = 0 Then
strEmail="-"
End If
strPredmet = request.form("predmet")
strTxt = request.form("txt")
intOdp = request.querystring("odp")
If len(strJmeno)>0 AND len(strEmail)>0 AND len(strPredmet)>0 AND len(strTxt)>0 Then
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" + Server.MapPath("forum.mdb")
dtmDatum = now()
conn.execute("INSERT INTO prispevky(odpoved,autor,email,predmet,txt,datum) VALUES (" _
& intOdp & ", '" & strJmeno & "','" & strEmail & "','" & strPredmet & "','" & strTxt &_
"','" & dtmDatum & "')")
conn.execute("UPDATE prispevky SET pocet = pocet + 1, posledni = '" & dtmDatum & _
"' WHERE idprispevku = " & intOdp)

conn.close
Set conn = Nothing
Set rs = Nothing
Else
response.redirect "prispevek.asp?id=" & intOdp & "&jmeno=" & strJmeno & "&email=" & strEmail & _
"&txt=" & strTxt & "&chyba=1&#odpovedet"
End If
response.redirect "prispevek.asp?id=" & intOdp
End If
response.redirect "default.asp"
%>

Soubory forum.css a prispevek.asp zůstávají beze změn.

Zde si můžete stáhnout všechny zdrojové kódy. V příštím díle diskusní fórum zase dále vylepšíme.

Liška Adam


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

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


Diskuzní fórum
Degrees28.04.16:29Bude pokračování?
D.05.12.19:17SOS
Martin Fous19.06.18:11neběhá mi to
David Maj03.10.10:08 LRE: neběhá mi to
ferda15.05.9:40nové téma
Adam Liška22.05.15:19 LRE: nové téma
ferda23.05.8:11  -RE: RE: nové téma
Sam11.04.14:47  LRE: RE: nové téma
zajda29.04.10:27Poslat emailem mi nefunguje

 

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