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.