Kommentarfunktion i ASP

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.

2 kommentarer

    1. 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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *