<!--METADATA TYPE="typelib" NAME="ADODB Type Library"
    FILE="C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll" -->

<%
Option Explicit

Dim strConnect
strConnect="Provider=Microsoft.Jet.OLEDB.4.0;" & _
           "Data Source=C:\DataStore\board.mdb"

Dim objConn, objRS, SQL, Rcount
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConnect
SQL = "select count(b_key) as recCount from MyBoard"
Set objRS = objConn.Execute(SQL)
Rcount = objRS(0)

Dim Pscale,Psize, Pnum, Pcount
Pscale=10
Psize=10
Pcount = CInt((Rcount-1)/Psize) + 1

Pnum = Request.QueryString("Pnum")
if Pnum = "" then
    Pnum = 1
end if

SQL = "SELECT TOP " & Psize & " * FROM MyBoard "
  if int(Pnum) > 1 then
    SQL = SQL & " WHERE b_key not in "
    SQL = SQL & "(SELECT TOP " & ((Pnum - 1) * Psize) & " b_key FROM MyBoard"
    SQL = SQL & " ORDER BY b_key DESC) "
  end if
SQL = SQL & " order by b_key desc"
Set objRS = objConn.Execute(SQL)


Response.Write "<center>" & _
               "<h1>게시판</h1>" & Pnum & " " & Pscale & " " & Pcount & " " & Rcount & _
               "<table border=0 width=500>" & _
               "<tr><td align=right><a href=./board.asp?mode=write>글쓰기</a></td></tr>" & _
               "</table>" & _
               "<table border=1 width=500>" & _
               "<tr>" & _
                "<td align=center>번호</td>"& _
               "<td align=center>이름</td>"& _
               "<td align=center>제목</td>"& _
               "<td align=center>조회수</td>"& _
               "<td align=center>날짜</td>" & _
               "</tr>"

Dim vDate, vYear, vMonth, vDay, vHour, vMin

Do while Not objRS.EOF

    vDate = objRS("b_date")
    vYear = year(vDate)
    vMonth = right("0" & month(vDate) , 2)
    vDay = right("0" & day(vDate) , 2)
    vHour = right("0" & hour(vDate) , 2)
    vMin = right("0" & minute(vDate) , 2)
    vDate = vYear & "/" & vMonth & "/" & vDay & " (" & vHour & ":" & vMin & ")"

    Response.write "<tr>" & _
               "<td align=center>" & objRS("b_key") & "</td>" & _
               "<td align=center><a href = 'mailto:" & objRS("b_email") & "'>" & _
                objRS("b_name") & "</a></td>" & _
               "<td align=center><a href=./board.asp?mode=pre_read&key=" & _
                objRS("b_key") & ">" & objRS("b_title") & "</a>"

               if datediff ("h",objRS("b_date"),Now()) < 24 then
                   Response.Write "<img src=./img/new.gif border=0>"
               end if
               if objRS("b_acc") > 30 then
                   Response.Write "<img src=./img/hot.gif border=0>"
               end if
    Response.Write "</td><td align=center>" & objRS("b_acc") & "</td>" & _
               "<td align=center>" & vDate & "</td>" & _
               "</tr>"
    objRS.MoveNext
Loop
Response.write "</table>"


Dim Step,StepStart,StepEnd,prenum,nextnum

Response.Write "<table border=0 width=500 cellpadding=3 cellspacing=3>" & _
               "<tr><td align=center>"

if Int(Rcount) > Int(Psize) then

    StepStart = Int((Pnum-1)/Pscale)*Pscale+1
    
    if (Pcount - StepStart) < (Pscale-1) then
        StepEnd = StepStart + Pcount-StepStart
    else
        StepEnd = StepStart+(Pscale-1)
    end if

    if Int(Pscale) < Int(Pnum) then
        prenum = StepStart - Pscale
        Response.Write "[<a href=list.asp?Pnum=" & prenum & ">Pre</a>] - "
    end if

    For Step = StepStart to StepEnd
        if Int(Step) = Int(Pnum) then
            response.write "[" & Step & "]"
        else
            Response.Write "[<a href=list.asp?Pnum=" & Step & ">" & Step & "</a>]"
        end if
    Next

    if Int(Pcount - StepStart) > Int(Pscale-1) then
        nextnum = StepStart+Pscale
        Response.Write " - [<a href=list.asp?Pnum=" & nextnum & ">Next</a>]"
    end if
end if

Response.Write "</td></tr></table></center>"

%>

<br>
<center>
<a href=./board.asp?mode=write>글쓰기<%= StepStart %></a>
</center>



이번에는 읽기 모드에 삭제하기 기능을 넣어 보자. 우선 읽기 모드에 삭제라는 글을 삽입하고 이 글에 삭제를 담당하는 delete.asp 문서를 작성한다. 먼저 read.asp 문서에 다음과 같이 수정한다.

<!--METADATA TYPE= "typelib"  NAME= "ADODB Type Library"
      FILE="C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll"
-->
<%
Option Explicit

Dim key
key = Request.QueryString("key")

Dim strConnect
strConnect="Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=C:\DataStore\board.mdb"
Dim objConn,SQL,objRS
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConnect
SQL = "select * from MyBoard where b_key LIKE " & key
Set objRS = objConn.Execute(SQL)

Response.Write "<table border=1 width=500>" & _
               "<tr><td align=center>제목</td></tr>" & _
               "<tr><td align=center>" & objRS("b_comment") & "</td></tr>" & _
               "<tr><td align=center>" & objRS("b_home") & "</td></tr>" & _
               "<tr><td align=center>" & objRS("b_ip") & "</td></tr>" & _
               "</table>"
Response.Write "<table border=0 width=500>" & _
               "<tr><td><a href=./delete.asp?key=" & _
               objRS("b_key") & ">글삭제</a></td></tr>" & _
               "</table>"

Set objRS = nothing
Set objConn = nothing
%>




이제 삭제를 담당하는 delete.asp 문서를 다음과 같이 작성한다.

<!--METADATA TYPE= "typelib"  NAME= "ADODB Type Library"
      FILE="C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll"
-->
<%
Option Explicit

Dim key
key = Request.QueryString("key")

Dim strConnect
strConnect="Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=C:\DataStore\board.mdb"
Dim objConn,SQL,objRS
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConnect
SQL = "delete * from MyBoard where b_key LIKE " & key
Set objRS = objConn.Execute(SQL)
Set objRS = nothing
Set objConn = nothing
Response.redirect "list.asp"
%>


여기까지만 하고 실제로 글을 올리고 글읽기 모드에서 글삭제를 눌러 글을 삭제시켜보자. 문제없다면 성공이다.

그런데....사실 이건 말도 안된다. 왜냐하면 아무나 글을 지워서는 안되지 않는가. 글을 지울때는 글을 등록할때 비밀번호를 같이 등록하도록 하고 이 등록된 비밀번호를 이용하여 글삭제시 비밀번호 확인 화면을 보여주어서 암호를 아는 사람만이 지울 수 있도록 해야 한다. 자 이걸 한번 해보자.


먼저 글 등록시 비밀번호도 같이 등록하도록 하고 이걸 저장할 필드를 추가한다.



그리고 write.asp 문서에서 비밀번호입력을 추가한다.

<html>
<head><title>글쓰기</title></head>
<body>
    <form method='POST' action='Insert.asp'>
    <table border='1' width='450'>
    <tr>
    <td align='center'>제목</td>
    <td><input type='text' name='title' size='50'></td>
    </tr><tr>
    <td align='center'>이름</td>
    <td><input type='text' name='name' size='50'></td>
    </tr><tr>
    <td align='center'>이메일</td>
    <td><input type='text' name='email' size='50'></td>
    </tr><tr>
    <td align='center'>홈주소</td>
    <td><input type='text' name='home' size='50'></td>
    </tr><tr>
    <td align='center'>글</td>
    <td>
    <textarea wrap='hard' rows='10' name='comment' cols='50'></textarea>
    </td></tr>
    <td align='center'>비밀번호</td>
    <td><input type='password' name='passwd' size='50'></td>
    </tr>
<tr>
    <td align='right' colspan='2' style='padding-right:25'>
    <input type='submit' value='글 저장'>
    </td></tr>
    </table>
    </form>
</body>
</html>


이제 write.asp 문서의 내용이 전달되는 insert.asp 문서에서 전달받은 암호를 DB에 저장하는 부분을 추가한다.

<!--METADATA TYPE= "typelib"  NAME= "ADODB Type Library" FILE="C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll"  -->
<%
Option Explicit

Dim name, title, comment, email,home,passwd
name = Request.form("name")
title = Request.form("title")
email = Request.form("email")
home = Request.form("home")
comment = Request.form("comment")
passwd = Request.form("passwd")

Dim strConnect,objRS
strConnect="Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=C:\DataStore\board.mdb"
Set objRS = Server.CreateObject("ADODB.RecordSet")
objRS.Open "Myboard", strConnect, adOpenStatic, adLockPessimistic,adCmdTable

with objRS
.AddNew
.Fields("b_name") = name
.Fields("b_title") = title
.Fields("b_comment") = comment
      .Fields("b_ip") = Request.ServerVariables("REMOTE_ADDR")
      .Fields("b_email") = email
.Fields("b_home") = home
      .Fields("b_date") = now()
      .Fields("b_passwd") = passwd
.Update
.Close
end with
Set objRS = nothing
Response.redirect "list.asp"
%>


자 여기까지가 글등록시 추가된 비밀번호를 DB의 b_passwd 필드에 저장시키는 방법이다. 이제 이 저장된 글비밀번호을 이용해서 글삭제를 누르면 암호를 묻는 화면을 보여주고 이곳에 입력한 값과 DB에 저장된 글암호를 비교해서 같으면 글을 삭제시키고 같지 않으면 계속 암호를 묻는 화면을 보여주도록 하자.

이 부분은 먼저 글읽기 모드에서 글삭제모드로 보내지는 쿼리값을 고려해야 한다. 그리고 글삭제시 암호를 묻는 폼태그는 다시 글삭제모드로 돌아가도록 지정해야 한다. 이때 암호는 히든으로 보내서 처리한다.

자 다음과 같이 delete.asp문서를 수정한다.

<!--METADATA TYPE= "typelib"  NAME= "ADODB Type Library"
      FILE="C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll"
-->
<%
Option Explicit

Dim key,passwd
key = Request("key")
passwd = Request("passwd")

Dim strConnect
strConnect="Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=C:\DataStore\board.mdb"
Dim objConn,SQL,objRS
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConnect

SQL = "select b_passwd from MyBoard where b_key LIKE " & key
Set objRS = objConn.Execute(SQL)

Dim db_passwd
db_passwd=objRS("b_passwd")
Set objRS = nothing

if db_passwd = passwd then
    SQL = "delete * from MyBoard where b_key LIKE " & key
    Set objRS = objConn.Execute(SQL)
    Set objRS = nothing
    Set objConn = nothing
    Response.redirect "list.asp"
else
    response.write "<form method=post action=delete.asp>" & _
    "<input type=hidden name=key value=" & key & ">" &_
    "<center><table border=1 width=200>" &_
    "<tr><td align=center>비밀번호</td></tr>" &_
    "<tr><td align=center><input type=password name=passwd size=10></td></tr>" &_
    "<tr><td align=right><input type=submit value=확인></td></tr>" &_
    "</table>" &_
    "</form>"
end if

%>