Nu tänkte jag presentera min helt egna kommentarfunktion som jag gjort i ASP/VB. Jag försöker förklara lite övergripande vad som sker men kommer inte gå in på varenda detalj.
kommentarer.asp (formuläret)
Ett helt vanligt HTML-formulär där vi använder attributet name för att senare identifiera vilken uppgift som ska till vilket ställe i databasen.
<table width="550" align="left" border="0"> <form method="post" action="spara.asp?do=spara"> <tr> <td colspan="3" width="550"><b>Rubrik:</b> (max 45 tecken)<br /><input maxlength="45" value="" name="rubrik" class="c_input_l" /></td> </tr> <tr> <td colspan="3" width="550"><b>Text:</b><br><textarea name="kommentar" class="c_textarea"></textarea> <p class="text_xs_nm">Följande HTML-taggar kan/får användas: <em>kursiv</em> <em></em> och <strong>fet</strong> <strong></strong></p></td> </tr> <tr> <td width="245" valign="top"><b>Namn:</b><br><input value="" name="namn" class="c_input" /></td> <td width="245" valign="top"><b>Hemsida:</b><br /><input value="http://www." name="hemsida" class="c_input" /></td> </tr> <tr> <td width="275" valign="top"><b>E-post:</b><br /><input value="" name="epost" class="c_input" /> </td> <td width="275" valign="top"><b>Spamskydd:</b><br /><img src="grafik/captcha.jpg" class="ikon"> <input value="" name="spamprot" class="c_input_s2" /></td> </tr> <tr> <td colspan="3" width="550"> <input type="submit" value="Posta kommentar" class="form_submit" /> </td> </tr> </form> </table>
spara.asp
Funktionen för att spara kommentarerna hämtar captcha-koden och den aktuella tiden och lägger i variabler. De resterande uppgifterna lägger jag (slarvigt nog) inte i variabler, utan hämtas i samma stund som jag matar in upppgifterna i databasen.
Filen funktioner.asp inkluderas eftersom jag behöver funktionen FixaTecken som gör om citationstecken till två st ’.
<%If Request.Querystring("do") = "spara" Then
<!--#include file="includes/funktioner.asp"-->
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &Server.MapPath("databas\db.mdb")
spamprotection = Request.Form("spamprot")
tid = FormatDateTime(Time, vbLongTime)
If spamprotection = "D4gf68Z" Then
SQL = "Insert Into comments (title,comment,datum,tid,namn,hemsida,epost) Values('" & FixaTecken(Request.Form("rubrik")) & "','" & FixaTecken(Request.Form("kommentar")) & "','" & date & "','" & tid & "','" & Request.Form("namn") & "','" & Request.Form("hemsida") & "','" & Request.Form("epost") & "')"
Conn.Execute(SQL)
Response.Redirect "http://www.doman.se/kommentarer.asp?next=1"
Else
Response.Redirect "http://www.doman.se/kommentarer.asp?next=1"
End If
RecSet.Close
Conn.Close
Set RecSet = Nothing
Set Conn = Nothing
End If%>
komentarer.asp (visa kommentarer)
Här börjar jag med att inkludera funktioner.asp eftersom jag behöver funktionen VbCrLfToBreak. Den gör så att radbrytningar som skrivits in i databasen genererar ett radbyte i HTML (<br />).
ANTAL=”7″ anger att sju kommentarer ska visas per sida.
Jag har lagt en funktion för att bläddra mellan kommentarssidorna både ovanför och under de sju kommentarer som visas.
Jag kontrollerar även om fälten namn och hemsida är ifyllda. Om de innehåller något så skrivs de ut och om båda är ifyllda så läggs ett kommatecken till mellan namnet och URL:en till hemsidan.
<%
<!--#include file="includes/funktioner.asp"-->
ANTAL = "7"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &Server.MapPath("databas\db.mdb")
Set RecSet = Server.CreateObject("ADODB.RecordSet")
Sidan = Request.QueryString("next")
If Sidan = "" then
sida = 1
Else
sida = Sidan
End If
With RecSet
.CursorLocation = 3
.CacheSize = ANTAL
End With
SQL = "SELECT * FROM comments ORDER BY datum DESC, tid DESC"
RecSet.Open SQL, Conn
With RecSet
.MoveFirst
.PageSize = ANTAL
.AbsolutePage = sida
End With
Sidor = RecSet.PageCount
x = 0
If Sidor > 1 Then%>
<div class="contentrow_sidnr">
<p>
<%If (Int(sida)) <> 1 Then%>
<a href="kommentarer.asp?next=<%=(Int(sida)-1)%>" class="intern">Framåt</a> |
<%Else%><%End If%>
<%For Sid = 1 To Sidor
If (Int(Sid)) = (Int(sida)) Then%>
<%=Sid%><%Else%> <a href="kommentarer.asp?next=<%=Sid%>" class="intern"><%=Sid%></a> <%End If
Next%>
<%If (Int(sida)) <> (Int(Sidor)) Then%>
| <a href="kommentarer.asp?next=<%=(Int(sida)+1)%>" class="intern">Bakåt</a>
<%Else%><%End If%>
</p>
</div>
<div style="float: left; width: 630px; border-bottom: 1px solid #FF4500; margin: 0px; padding: 0px;"></div>
<%End If%>
<%Do While Not RecSet.EOF And x < RecSet.PageSize%>
<div class="commentrow">
<%
titel = RecSet("title")
If titel <> "" Then%>
<h2><%=RecSet("title")%></h2>
<%End If%>
<%
tid_a = RecSet("tid")
tiden = FormatDateTime(tid_a, vbShortTime)
%>
<p class="komdatum" style="margin"><%=RecSet("datum")%> - <%=tiden%></p>
<p class="text_medium"><%Response.Write(VbCrLfToBreak(RecSet("comment")))%></p>
<%
namn = RecSet("namn")
hemsida = RecSet("hemsida")
%>
<%If namn <> "" Then%>
<p class="text_s" style="font-style:italic;"><%=RecSet("namn")%>
<%End If%>
<%If namn <> "" AND hemsida <> "http://www." AND hemsida <> "" Then Response.Write ", "%>
<%If hemsida <> "http://www." OR hemsida = "" Then%>
<a href="<%=RecSet("hemsida")%>" target="_blank" rel="nofollow" class="extern"><%=RecSet("hemsida")%></a>
<%Else
End If%>
</p>
</div>
<%x=x+1
RecSet.MoveNext
Loop
If Sidor > 1 Then%>
<div class="contentrow_sidnr">
<p>
<%If (Int(sida)) <> 1 Then%>
<a href="kommentarer.asp?next=<%=(Int(sida)-1)%>" class="intern">Framåt</a> |
<%Else%><%End If%>
<%For Sid = 1 To Sidor
If (Int(Sid)) = (Int(sida)) Then%>
<%=Sid%><%Else%> <a href="kommentarer.asp?next=<%=Sid%>" class="intern"><%=Sid%></a> <%End If
Next%>
<%If (Int(sida)) <> (Int(Sidor)) Then%>
| <a href="kommentarer.asp?next=<%=(Int(sida)+1)%>" class="intern">Bakåt</a>
<%Else%><%End If%>
</p>
</div>
<%End If%>
<%RecSet.Close
Conn.Close
Set RecSet = Nothing
Set Conn = Nothing%>
funktioner.asp
Function FixaTecken(str) FixaTecken = Replace(Trim(str),"'","''") End function Function VbCrLfToBreak(byVal str) If IsNull(str) Then str = "" VbCrLfToBreak = Replace(str,vbCrLf,"<br />") End Function
Hoppas allt blev rätt nu. Kanske hjälper detta någon som fortfarande kodar klassisk ASP.
Usch och fy! Varför håller du på med sånt där gammalt skräp?
Ja det kan man undra. Jag kan det skapligt och kommer inte igång med att lära mig något nytt. Har funderat på .NET ett tag nu.