login register Sysop! about ME  
qrcode
    최초 작성일 :    2001년 06월 19일
  최종 수정일 :    2001년 07월 20일
  작성자 :    taeyo
  편집자 :    Taeyo (김 태영)
  읽음수 :    107,853

강좌 목록으로 돌아가기

필자의 잡담~

이번에 개를 한마리 기를까 하는데... 셔틀랜드 쉬프독으로 결정했습니다(실은 시베리안 허스키를 좋아하지만.. 아파트에서는 그것은 어려울 거 같아서리)

디따리 이쁘네요... 과연 제가 잘 기를 수 있을까요? 프로그램에 몰두하면 옆에 누가와도 모르는데... -_-

저번 강좌로 인해서 글에 커멘트를 달아보았는데요....  그리고 나니깐.. 글 삭제시 에러가 난다는 분들이 계셔서요....  ^^  다음과 같은 제약관련 에러요..

DELETE statement conflicted with COLUMN REFERENCE constraint 'FK_Comment_MyBoard'.
The conflict occurred in database 'MyDataBase', table 'Comment', column 'board_idx'.

하지만, 이것은 어쩔 수가 없어요. 외래키가 설정되어져 있는 컬럼은 그 컬럼이 다른 테이블에서 사용되고 있다면 그 종속적인 테이블에서 먼저 이러한 값을 가지는 데이터를 모두 지우기 전까지는 원래의 레코드를 지울 수가 없거든요. 해서 그 문제를 해결하기 위해서는 약간의 결정이 필요한데요

글을 내부적으로 남기고 지워진 것처럼 하겠느냐? 아니면, 원래의 글이 삭제되면 그 글에 따르는 커멘트들도 모두 지우겠느냐... 가 바로 그것입니다. 사람마다...  자신이 맘에 드는 쪽으로 그러한 룰은 정해야 하겠지만... 이 강좌에서는 깔끔하게 모두 지우는 쪽으로 진행해 보겠습니다.

그럼.. 어떻게 하면 될까요?

아마도 Del_ok.asp 의 소스를 다음처럼 바꾸면 될 것입니다. MyBoard 에서 특정 레코드를 지우기 전에, 먼저 Comment 테이블에 있는 관련 데이터를 모두 지우고 난 뒤에... MyBoard 것도 지우는 것이지요. ^^

Del_Ok.asp

  <!--METADATA TYPE="typelib" NAME="adoRs Type Library"
    FILE="C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll" -->
  <% Option Explicit %>
  <!--#include file="config.asp"-->
  <%
    Dim Gotopage, board_idx, pwd
    Gotopage = Request.Form("Gotopage")
    board_idx = Request.Form("board_idx")
    pwd = Request.Form("pwd")

    Dim adoDb, adoRs, strSQL
    Set adoDb = Server.CreateObject("ADODB.Connection")
    adoDb.open strconnect
    Set adoRs = Server.CreateObject("ADODB.RecordSet")

    strSQL = "SELECT board_idx from MyBoard "
    strSQL = strSQL & " where board_idx=" & board_idx & " and b_pwd='" & pwd & "'"

    adoRs.open strSQL, adoDb, adOpenStatic, adLockPessimistic, adCmdText

    if adoRs.BOF and adoRs.EOF then '만일, 조건에 해당 레코드가 없다면(비밀번호가 맞지 않는다면
        Response.Write "<script language=javascript>"
        Response.Write " alert('비밀번호가 일치하지 않습니다');"
        Response.Write " history.back();"
        Response.Write "</script>"
        Response.End
    else '비밀번호가 일치한다면...
        adoRs.close
        Set adoRs = nothing

        strSQL = "Delete from Comment where board_idx=" & board_idx & ";"
        strSQL = strSQL & "Delete from MyBoard where board_idx=" & board_idx

        adoDb.Execute strSQL
        '만일 Access를 사용한다면 위의 쿼리는 각각 실행시켜야 할 수 있습니다.
        adoDb.Close
        Set adoDb = nothing
    end if

    Response.redirect "list.asp?Gotopage=" & Gotopage
  %>

이전 Del_ok.asp 가 레코드셋 개체를 통해서 데이터를 Delete 했다면, 이번에 수정된 소스에서는 그냥 Delete 쿼리를 통해서 관련 데이터를 모두 지웠습니다. 소스중에 쿼리를 작성한 부분이 좀 재미있는데요.. 두개의 쿼리를 ";"를 구분자로 주욱 연결해서 문자열을 만들고 있지요?  다음처럼요

        strSQL = "Delete from Comment where board_idx=" & board_idx & ";"
        strSQL = strSQL & "Delete from MyBoard where board_idx=" & board_idx

이렇게 각각의 쿼리를 하나의 문자열로 만들어서 쿼리를 실행시켜도.. 각각의 구문은 모두 동작합니다. 해서 먼저 Comment 테이블에서 관련 데이터를 모두 지운뒤에, MyBoard 테이블에서도 데이터를  지우고 있는 것이지요...  ^^  이렇게 처리하면 더이상 에러는 없이 깔끔하게 처리될 것이랍니다.  ^^

만일, 여러분이 Access를 사용하신다면 위의 쿼리 부분을 다음과 같이.. 각각 실행시키도록 하세요

strSQL = "Delete from Comment where board_idx=" & board_idx 
adoDb.Execute strSQL

strSQL = "Delete from MyBoard where board_idx=" & board_idx
adoDb.Execute strSQL

물론, 다른 방법도 여러가지 있을수 있지만, 제 생각에는 이 방법도 나쁘지는 않아보여서요

자..  이제 실제로 이번 강좌에서 해야할 부분에 대한 이야기를 할 시간입니다. 이번 주제는 검색이지요...  ^^  그리 어려운 내용은 아닐 것입니다만....  조금은 머리가 아파올 수도 있을 것입니다. 먼저 결과그림을 보고 이야기할까요? 다음 그림은 이름으로 검색할 결과를 보여주는 그림입니다.

이 검색결과 페이지는 소스측면에서는 list.asp와 대단히 흡사한 모습을 가지게 됩니다. 단지, list.asp 와 다른 것이 있다면, 이 목록은 테이블에 존재하는 모든 데이터를 가져오는 것이 아니라... 사용자가 검색하고자 한 항목에서 사용자가 검색하고자 한 검색어가 들어있는 데이터만을 가져온 것입니다. 즉, 사용자가 "글쓴이", "제목", "내용"중에 어떤 컬럼에서 검색할 것인지를 선택한 다음에... 검색할 단어를 입력할 경우 그 조건에 맞는 데이터만을 가져와서 보여주어야 한다는 것입지여... 소스를 일단 보면서 이야기하자구요?  네.. 그렇게 하겠습니다.

먼저, list.asp의 제일 하단에 다음과 같은 검색폼을 추가해 주세요.

<form name="frmSearch" Method="post" action="searchResult.asp" onSubmit="return false">
   <table cellpadding="1" cellspacing="0" width="600" style="border:1px solid #cfcfdf">
      <tr bgcolor="#cfcfdf" height="25">
         <td align="right">
            <select name="column" align="absmiddle">
               <option value="b_name">글쓴이</option>
               <option value="b_title" selected>제목</option>
               <option value="b_content">본문</option>
            </select>
            <input type="text" size="20" name="searchString">
            <input type="button" value="검색" onClick="doSearch();" id=button3 name=button3>
         </td>
      </tr>
   </table>
</form>

그리고, 이 폼에서 [검색]버튼이 눌렸을 경우에 호출되는 자바스크립트도 추가되어야 하겠죠? 해서, 이 모든 것이 추가된 list.asp는 다음과 같을 것입니다.

Search 기능 추가된 list.asp

<!--METADATA TYPE="typelib" NAME="ADODB Type Library"
      File="C:\Program Files\Common Files\System\ado\msado15.dll" -->
<% Option Explicit %>
<% Response.Expires=-1 %>
<!--#include file="config.asp"-->
<!--#include file="functions.asp"-->
<html>
<head> <title>게시판 리스트</title>
<style type="text/css">
   A   {text-decoration: none; color:navy }
   A:hover   {text-decoration: underline; color:#ff4500}
   td  { font-family:돋움; font-size:12 }
   select{border:1 solid gray; font-family:돋움}
   input{border:1 solid gray; font-family:돋움}
</style>
<Script language="javascript">
   function doSearch()
   {
      var searchString = document.frmSearch.searchString.value;
      if (CheckStr(searchString, " ", "")==0){
         alert("검색어를 기입해 주세요");
         document.frmSearch.searchString.value= "";
         document.frmSearch.searchString.focus();
         return;
      }
      document.frmSearch.submit();
   }

   function CheckStr(strOriginal, strFind, strChange){
       var position, strOri_Length;
       position = strOriginal.indexOf(strFind);
   
       while (position != -1){
         strOriginal = strOriginal.replace(strFind, strChange);
         position = strOriginal.indexOf(strFind);
      }

      strOri_Length = strOriginal.length;
      return strOri_Length;
   }
</script>
</head>
<%
   Dim Gotopage
   Dim Dbcon, Rs
   Dim pagecount, recordCount
   Dim SQL
   
   GotoPage = Request("GotoPage")
   if GotoPage = "" then GotoPage = 1
   
   Set Dbcon = Server.CreateObject("ADODB.Connection")
   Dbcon.Open strConnect

   SQL = "select count(board_idx) as recCount from MyBoard"
   Set Rs = Dbcon.Execute(SQL)

   recordCount = Rs(0)
   pagecount = int((recordCount-1)/pagesize) +1

   SQL = "SELECT TOP " & pagesize & " * FROM MyBoard "
   SQL = SQL & " WHERE board_idx not in "
   SQL = SQL & "(SELECT TOP " & ((GotoPage - 1) * pagesize) & " board_idx FROM MyBoard"
   SQL = SQL & " ORDER BY board_idx DESC) order by board_idx desc"

   Set Rs = Dbcon.Execute(SQL)
%>
<body topmargin="5" leftmargin="20">
<br>
<table cellpadding="0" cellspacing="0" border="0" width="600">
   <tr>
      <td bgcolor="white" height="30" width="400" style="padding-top:5px;">
      글의 갯수 : <%=recordCount%> &nbsp;&nbsp;
         [<a href="write.asp">글쓰기</a>] &nbsp;
         <% if int(gotopage) > 1then%>
            [<a href="list.asp?gotopage=<%=gotopage-1%>">이전</a>]
         <% else %>
            <font color="gray">[이전]</font>
         <% end if %>
         &nbsp;
         <% if int(gotopage) < int(pagecount) then %>
            [<a href="list.asp?gotopage=<%=gotopage+1%>">다음</a>]
         <% else %>
            <font color="gray">[다음]</font>
         <% end if %>
      </td>
      <td width="200" align="right">
         page ( <%=gotopage%> / <%=pagecount%> )
      </td>
   </tr>
</table>
<table cellpadding="1" cellspacing="0" width="600" style="border:1px solid #cfcfdf">
   <tr bgcolor="#cfcfdf" height="25">
      <td width="340" align="center">제 목</td>
      <td width="20" align="center"><img src="images/clipw.gif" WIDTH="13" HEIGHT="13"></td>
         <td width="60" align="center">글쓴이</td>
      <td width="50" align="center">읽음수</td>
      <td width="130" align="center">날짜</td>
   </tr>
<%
      Dim board_idx, name, mail, title, yymmdd, strNew
      Dim yy, mm, dd, h, mi, re_level, readnum
      
      Do until Rs.EOF

         board_idx = rs("board_idx")
         name = rs("b_name")
         mail = rs("b_email")

         If Len(name) > 4 Then name = Mid(name,1,4) & ".."
         if name="" then name="無名"

         name = ReplaceTag2Text(name)

         title = rs("b_title")
         If Len(title) > 22 Then title = Mid(title,1,23) & "..."
         If Trim(title) = "" then title = "[제목없음]"

         title = ReplaceTag2Text(title)

         yymmdd = rs("b_date")
         strNew = ""
         if datediff ("h",yymmdd,Now()) < 24 then
            strNew = " <img src='images/new.gif' border=0>"
         end if

         yy= year(yymmdd)
         mm = right("0" & month(yymmdd),2)
         dd = right("0" & day(yymmdd),2)
         h = right("0" & hour(yymmdd),2)
         mi = right("0" & minute(yymmdd),2)
         yymmdd = yy & "/" & mm & "/" & dd & " (" & h & ":" & mi & ")"

         readnum = rs("b_readnum")
%>
   <tr bgcolor="white">
      <td height="20" style="padding-left:10px;">
         <a href="content.asp?board_idx=<%=board_idx%>&GotoPage=<%=GotoPage%>">
         <%=title%> <%=strNew%></td>
      <td align="center">&nbsp;</td>
      <td align="center">
         <% if mail <>"" then %>
            <a href= "mailto:<%= mail%>"><%=name%></a>
         <%else%>
            <%=name%>
         <%end if%>
      </td>
      <td align="center"><% = readnum%></td>
      <td align="center"><%=yymmdd%></td>
      </tr>
<%
      Rs.Movenext
      Loop

      Rs.close
      Dbcon.close
      Set Rs = Nothing
      Set Dbcon = Nothing
%>
<tr height="30">
   <td align="center" colspan="5">
      <%call gotoPageHTML(GotoPage, Pagecount)%>
   </td>
</tr>
</table>

<form name="frmSearch" Method="post" action="searchResult.asp" onSubmit="return false">
<table cellpadding="1" cellspacing="0" width="600" style="border:1px solid #cfcfdf">
   <tr bgcolor="#cfcfdf" height="25">
      <td align="right">
         <select name="column" align="absmiddle">
            <option value="b_name">글쓴이</option>
            <option value="b_title" selected>제목</option>
            <option value="b_content">본문</option>
         </select>
         <input type="text" size="20" name="searchString">
         <input type="button" value="검색" onClick="doSearch();">
      </td>
   </tr>
</table>
</form>
</body>
</html>

소스중의 오렌지 부분이 list.asp 에서 주로 바뀌어진 부분인데..  잘 보심 이해가 가능하실 것입니다. 단지, 그림과 같이 검색하는 창을 하나 추가한 것 뿐이니까요...

그리고, 그 폼에서 select 컨트롤의 각각의 옵션값들은 테이블의 컬럼이름과 일치함을 보실 수 있습니다. 이렇게하면 검색하는 asp 에서 Request("column") 을 하면 그 값이 바로 컬럼이름이 되겠죠? 좀 더 코드를 간결하게 만들어보려는 시도라고 볼 수 있겠습니다.  ^^

좋습니다. 말로만 하니깐 잘 이해가 안 가시는 분들이 있어보입니다. 먼저 SearchResult.asp 소스를 공개하겠습니다.  이것을 돌려보고 마저 이야기를 나눠봅시다.... 소스중에 빨간색 코드부분이 바로..  list.asp 와 다른 부분들이며 조금은 복잡해진 부분입니다.

SearchResult.asp

<!--METADATA TYPE="typelib" NAME="ADODB Type Library"
  File="C:\Program Files\Common Files\System\ado\msado15.dll" -->
<% Option Explicit %>
<% Response.Expires=-1 %>
<!--#include file="config.asp"-->
<!--#include file="functions.asp"-->
<html>
<head> <title>게시판 리스트</title>
<style type="text/css">
  A {text-decoration: none; color:navy }
  A:hover {text-decoration: underline; color:#ff4500}
  td { font-family:돋움; font-size:12 }
</style>
</head>
<%
  Dim Gotopage, column, searchString
  Dim Dbcon, Rs
  Dim pagecount, recordCount
  Dim SQL

  GotoPage = Request("GotoPage")
  if GotoPage = "" then GotoPage =1

  column = Request("column")
  searchString = Request("searchString")


  Set Dbcon = Server.CreateObject("ADODB.Connection")
  Dbcon.Open strConnect

  SQL = " SELECT count(board_idx) from MyBoard "
  SQL = SQL & " Where " & column & " like '%" & searchString & "%'"


  Set Rs = Dbcon.Execute(SQL)

  recordCount = Rs(0)
  pagecount = int((recordCount-1)/pagesize) +1

  SQL = "SELECT TOP " & pagesize & " * FROM MyBoard "
  SQL = SQL & " WHERE " & column & " like '%" & searchString & "%' and board_idx not in "
  SQL = SQL & "(SELECT TOP " & ((GotoPage - 1) * pagesize) & " board_idx FROM MyBoard"
  SQL = SQL & " Where " & column & " like '%" & searchString & "%'"
  SQL = SQL & " ORDER BY board_idx DESC) order by board_idx desc"

  Set Rs = Dbcon.Execute(SQL)
%>
<body topmargin="5" leftmargin="20">
<br>
<table cellpadding="0" cellspacing="0" border="0" width="600">
  <tr bgcolor="slategray">
    <td height="30" width="300"> &nbsp;
      <font size="3" color=white><b>검색 결과 리스트</b></font>
    </td>
    <td width="300" align="right"><font color=white>
      <B><%=recordCount%></b> 개의 검색결과가 있습니다&nbsp;&nbsp;&nbsp;
      page ( <%=gotopage%> / <%=pagecount%> ) </font>&nbsp;
    </td>
  </tr>
  <tr bgcolor="white">
    <td height="20" colspan=2>&nbsp;&nbsp;
      <a href="list.asp">&lt;&lt; 리스트로</a>
    </td>
  </tr>
</table>

<table cellpadding="3" cellspacing="1" width="600" bgcolor="slategray">
  <tr bgcolor="#eeeeee" height="25">
    <td width="340" align="center">제&nbsp; 목</td>
    <td width="20" align="center"><img src="images/clipw.gif" WIDTH="13" HEIGHT="13"></td>
    <td width="60" align="center">글쓴이</td>
    <td width="50" align="center">읽음수</td>
    <td width="130" align="center">날짜</td>
  </tr>
<%
    Dim board_idx, name, mail, title, yymmdd, strNew
    Dim yy, mm, dd, h, mi, re_level, readnum

    Do until Rs.EOF

      board_idx = rs("board_idx")
      name = rs("b_name")
      mail = rs("b_email")

      If Len(name) > 4 Then name = Mid(name,1,4) & ".."
      if name="" then name="無名"

      name = ReplaceTag2Text(name)

      title = rs("b_title")
      If Len(title) > 22 Then title = Mid(title,1,23) & "..."
      If Trim(title) = "" then title = "[제목없음]"

      title = ReplaceTag2Text(title)

      yymmdd = rs("b_date")
      strNew = ""
      if datediff ("n",yymmdd,Now()) < 1440 then
        strNew = " <img src='images/new.gif' border=0>"
      end if

      yy= year(yymmdd)
      mm = right("0" & month(yymmdd),2)
      dd = right("0" & day(yymmdd),2)
      h = right("0" & hour(yymmdd),2)
      mi = right("0" & minute(yymmdd),2)
      yymmdd = yy & "/" & mm & "/" & dd & " (" & h & ":" & mi & ")"

      readnum = rs("b_readnum")
%>
  <tr bgcolor="white">
    <td height="20" style="padding-left:10px;">
      <a href="list2content.asp?board_idx=<%=board_idx%>&GotoPage=<%=GotoPage%>">
      <%=title%> <%=strNew%></td>
    <td align="center">&nbsp;</td>
    <td align="center">
      <% if mail <>"" then %>
        <a href="mailto:<%= mail%>"><%=name%></a>
      <%else%>
        <%=name%>
      <%end if%>
    </td>
    <td align="center"><%=readnum%></td>
    <td align="center"><%=yymmdd%></td>
  </tr>
<%
      Rs.Movenext
    Loop

    Rs.close
    Dbcon.close
    Set Rs = Nothing
    Set Dbcon = Nothing
%>
  <tr height="30" bgcolor="#eeeeee">
    <td align="center" colspan="5">
      <%call gotoPageOnSearch(GotoPage, Pagecount)%>
    </td>
  </tr>
</table>
</body>
</html>

소스를 list.asp와 비교해서 보도록 하세요....  반드시..~~!!!! 안 그러면 소스를 보자마자...  윈도우를 닫아버리고 싶은 강한 충동에 빠져버릴 수 있습니다. 속으로 "뜨아아~~"란 말을 하면서 말이죠...  음하하..

머리속으로 SearchResult.asp 페이지가 하는 역할을 먼저 그리는 것이 중요합니다. 먼저 머리속으로 list.asp 를 그려보도록 하세요. list.asp에서는 단지 MyBoard 에서 모든 레코드를 다 가져오면 되었을 것입니다. 하지만, SearchResult.asp 에서는 두가지 조건이 더 지정되게 된다는 것을 기억하세요..

하나는... 검색하고자 하는 컬럼의 이름, 다른 하나는 그 컬럼에서 검색하고자 하는 단어입니다.

소스에서는 그 각각의 값들을 다음과 같은 코드로 받아옴을 볼 수 있을 것입니다. 이 값은 list.asp 에서 폼을 통해서 넘어온 값이 되겠죠?

  column = Request("column")
  searchString = Request("searchString")

column 이라는 변수는 사용자가 검색하고자 하는 컬럼의 이름이 될 것이구요. searchString는 사용자가 그 컬럼에서 검색하고자 하는 문자열이 될 것입니다. 자.. 이 변수들을 가지고 우리가 소스중에서 가장 먼저 하는 것은 바로... 검색에 맞는 레코드가 총 몇개인지 알아내는 것이겠지요? 그 쿼리는 다음과 같을 것이구요

  SQL = " SELECT count(board_idx) from MyBoard "
  SQL = SQL & " Where " & column & " like '%" & searchString & "%'"

이것은 list.asp에서의   SQL = " SELECT count(board_idx) from MyBoard " 라는 부분과 흡사하지요? list.asp에서야 모든 레코드를 가져오는 것이었기에... 특별한 조건이 필요치 않았지만.. 여기서는 검색조건이 추가되기에 위와 같게 된 것입니다. 이러한 부분을 이해할 수 있어야 합니다. 

위의 코드로 검색결과 총 레코드의 수는 구했구요... 그 다음은 실제로 10개 단위로 레코드를 가져와야 하는 부분이지요..  ^^ 이 부분도 마찬가지로.. 검색조건이 추가적으로 붙기만 하면 됩니다. 어려울 것은 없지요. ^^

  SQL = "SELECT TOP " & pagesize & " * FROM MyBoard "
  SQL = SQL & " WHERE " & column & " like '%" & searchString & "%' and board_idx not in "
  SQL = SQL & "(SELECT TOP " & ((GotoPage - 1) * pagesize) & " board_idx FROM MyBoard"
  SQL = SQL & " Where " & column & " like '%" & searchString & "%'"
  SQL = SQL & " ORDER BY board_idx DESC) order by board_idx desc"

이 부분도 list.asp 에서 이미 보았던 것입니다. 단지, 그 쿼리에 검색조건이 추가적으로 붙은 것이지요....  ^^ 어려울 것은 없을 것입니다.

검색이라는 것은 모든 데이터를 불러오는 쿼에다가 조건이 추가적으로 붙은 것이니까요. 해서...  이렇게 만들어진 쿼리는 이미 검색조건에 합당한 것들이니  이하의 소스에선 그냥 주욱~~  목록을 뿌려주면 된답니다.  ^^ list.asp 에서와 마찬가지로 말이지요...

단지, 중요한 부분이 있다면.... 그것은.. 바로 페이징부분입니다.  페이징 부분을 어렵게 생각하실 수도 있는데요... 이미 제가 제공해드린 소스에서는 페이징을 위한 함수가 따로 있었지요? 그 페이징용 함수를 마찬가지로 약간 수정해서...  검색결과용 페이징 함수를 만들 수 있습니다. 일반 페이징용 함수와 검색용 페이징 함수와의 차이는 단지.... column과 searchString 값을 다시금 넘겨주느냐 아니냐의 차이이니까요....

일반 검색용 함수는 그 하이퍼링크가 list.asp 로 걸려져 있었다면... 검색결과용  페이징 함수는 그 하이퍼링크가 searchResult.asp 로 걸려지게 되면 되는 것이지요.  또한, 검색컬럼과 검색어도 다시금 searchResult.asp로 넘겨주저야 할 것입니다.  searchResult.asp 라는 페이지는 그 것이 없이는 아무런 데이터도 가져올 수가 없으니 말입니다.  ^^

그렇기에, 우리의 searchResult.asp 페이지의 제일 하단에는 검색결과용 페이징 함수를 다음과 같이  호출하고 있는 것을 볼 수가 있을 것입니다.

<%call gotoPageOnSearch(GotoPage, Pagecount)%>

그리고, 이 함수는 이미 여러분이 만들어둔 functions.asp 에 추가되어야 하겠지요? 다음과 같은 함수가 말입니다.  (기존의 gotoPageHTML함수와 비교해 보세요 Red 색의 코드정도만이 바뀌었을 겁니다)

Sub gotoPageOnSearch(page, Pagecount)
   Dim blockpage, i
   blockpage=Int((page-1)/10)*10+1

   '********** 이전 10 개 구문 시작 **********
   if blockPage = 1 Then
      Response.Write "<font color=silver>[이전 10개]</font> ["
   Else
      Response.Write "<a href='searchResult.asp?gotopage=" & blockPage-10 & _
                                 "&column=" & column & "&searchString=" & searchString & "'>[이전 10개]</a> ["
   End If
   '********** 이전 10 개 구문 끝**********

   i=1
   Do Until i > 10 or blockpage > Pagecount
      If blockpage=int(page) Then
         Response.Write " <font size=2 color=gray>" & blockpage & "</font>"
      Else
         Response.Write " <a href='searchResult.asp?gotopage=" & blockpage & _
                                    "&column=" & column & "&searchString=" & searchString & "'>" &  blockpage & "</a> "
      End If

      blockpage=blockpage+1
      i = i + 1
   Loop

   '********** 다음 10 개 구문 시작**********
   if blockpage > Pagecount Then
      Response.Write "] <font color=silver>[다음 10개]</font>"
   Else
      Response.write "] <a href='searchResult.asp?gotopage=" & blockpage & _
                                    "&column=" & column & "&searchString=" & searchString & "'>[다음 10개]</a>"
   End If
   '********** 다음 10 개 구문 끝**********
End Sub

자... 그럼 이제 마지막으로 위의 함수가 추가된 functions.asp 의 소스를 확인해 보도록 합시다.

Functions.asp

<%
function ReplaceTag2Text(str)
   Dim text
   text = replace(str, "&", "&amp;")
   text = replace(text, "<", "&lt;")
   text = replace(text, ">", "&gt;")
   ReplaceTag2Text = text
End Function

'******************************************************************
'* # FUNCTION NAME : 페이지별 바로가기
'* # FUNCTION CONT. : 게시판에서 페이지별 바로가기를 생성해 준다.
'* # MODIFICATIONS :
'*      1. 2000/02/      진인식    프로그램 처음 작성
'*      2. 2001/05/      김태영    편집
'*
'* # 참고사항 : 흑기사님이 제공해주신 소스를 정리한 함수임
'******************************************************************

Sub gotoPageHTML(page, Pagecount)
   Dim blockpage, i
   blockpage=Int((page-1)/10)*10+1

   '********** 이전 10 개 구문 시작 **********
   if blockPage = 1 Then
      Response.Write "<font color=silver>[이전 10개]</font> ["
   Else
      Response.Write"<a href='list.asp?gotopage=" & blockPage-10 & "'>[이전 10개]</a> ["
   End If
   '********** 이전 10 개 구문 끝**********

   i=1
   Do Until i > 10 or blockpage > Pagecount
      If blockpage=int(page) Then
         Response.Write " <font size=2 color=gray>" & blockpage & "</font>"
      Else
         Response.Write "<a href='list.asp?gotopage=" & blockpage & "'>" & blockpage & "</a> "
      End If

      blockpage=blockpage+1
      i = i + 1
   Loop

   '********** 다음 10 개 구문 시작**********
   if blockpage > Pagecount Then
      Response.Write "] <font color=silver>[다음 10개]</font>"
   Else
      Response.write "]<a href='list.asp?gotopage=" & blockpage & "'>[다음 10개]</a>"
   End If
   '********** 다음 10 개 구문 끝**********
End Sub


'******************************************************************
'* # FUNCTION NAME : 검색결과에서 페이지별 바로가기
'* # FUNCTION CONT. : 검색결과에서 페이지별 바로가기를 생성해 준다.
'* # MODIFICATIONS :
'*      1. 2000/02/      진인식    프로그램 처음 작성
'*      2. 2001/05/      김태영    편집
'*
'* # 참고사항 : 위의 함수에 각각의 링크에 column, searchString 을 추가해줌
'******************************************************************

Sub gotoPageOnSearch(page, Pagecount)
   Dim blockpage, i
   blockpage=Int((page-1)/10)*10+1

   '********** 이전 10 개 구문 시작 **********
   if blockPage = 1 Then
       Response.Write "<font color=silver>[이전 10개]</font> ["
   Else
      Response.Write "<a href='searchResult.asp?gotopage=" & blockPage-10 & _
                             "&column=" & column & "&searchString=" & searchString & "'>[이전 10개]</a> ["
   End If
   '********** 이전 10 개 구문 끝**********

   i=1
   Do Until i > 10 or blockpage > Pagecount
      If blockpage=int(page) Then
         Response.Write " <font size=2 color=gray>" & blockpage & "</font>"
      Else
         Response.Write " <a href='searchResult.asp?gotopage=" & blockpage & _
                                "&column=" & column & "&searchString=" & searchString & "'>" & blockpage & "</a> "
      End If

      blockpage=blockpage+1
      i = i + 1
   Loop

   '********** 다음 10 개 구문 시작**********
   if blockpage > Pagecount Then
      Response.Write "] <font color=silver>[다음 10개]</font>"
   Else
      Response.write "] <a href='searchResult.asp?gotopage=" & blockpage & _
                             "&column=" & column & "&searchString=" & searchString & "'>[다음 10개]</a>"
   End If
   '********** 다음 10 개 구문 끝**********
End Sub

%>

설명이 조금은 부족하다는 느낌이 들 수 있습니다. 그렇습니다. 하지만, 그렇게 느껴지셨다면 여러분은 list.asp 페이지를 제대로 이해하지 못하고 계시기 때문에 그렇게  느껴질 수 있답니다....  ^^

list.asp 페이지와 searchResult.asp 페이지는 그다지 큰 차이점이 없다는 것을 여러분은 조금만 노력하면 알아채실 수 있을 것이구요...  list.asp 페이지를 가지고 searchResult.asp 페이지를 대신하게 프로그래밍 할 수도 있을 것입니다. 하지만 그것이 가능하겠지만 그리 하지는 마세요.. 소스가 너무 복잡해지면 오히려 퍼포먼스는 떨어지게 됩니다.  ^^

여러분의 생각에 따라 소스를 다르게 구성하실 수도 있겠지만, 제 생각에는 이렇게 list.asp 와  검색용 searchResult.asp를 따로 두는 것이 낫지 않난 생각한답니다...  ^^ 이제 기본적은 게시판에 관계된 것들은 적당히 마무리 되지 않았나 싶네요....

다음주 부터는 이제 드뎌... 이 게시판에 "ABCUpload"를 붙여서 자료실 기능까지고 추가해 보도록 하겠습니다. 그럼... 다음 주를 기대해 주세요..  ^^  짜짠...


authored by


 
 
.NET과 Java 동영상 기반의 교육사이트

로딩 중입니다...

서버 프레임워크 지원 : NeoDEEX
based on ASP.NET 3.5
Creative Commons License
{5}
{2} 읽음   :{3} ({4})