PHP 프로그래밍

본문 바로가기
사이트 내 전체검색


Web Programming >> PHP Programming
[목차]
제12장 게시판 프로그램(MySQL)

    2. 게시판 수정하기(검색,정렬 기능)

 

문제1> 게시물 검색 기능 추가하기

 

 

검색입력 박스에 "검색"이란 단어를 입력하고, 찾기 버튼을 클릭한다.

 

 

<?

$connect = mysql_connect("localhost","php","php99");

mysql_select_db("sample",$connect);

 

if(!$db)

{

        echo "<SCRIPT>alert('게시판 DB Name이 입력되지 않았습니다.');history.go(-1);</SCRIPT>";

        exit;

}

 

$query = "SELECT count(*) FROM $db";

if($keyword) $query .= " where $type like '%$keyword%'";

 

$result = mysql_query($query,$connect);

$row = mysql_fetch_row($result);

$total = $row[0];

 

if(!$page) $page=1;

$ppage = $page - 1;

$npage = $page + 1;

$pgsize = 10;

$totalpage = (int)($total/$pgsize);

if(($total%$pgsize) <> 0) $totalpage++;

$rcount=1;

 

        echo "

<HEAD>

<TITLE>LeeLAB - 게시판</TITLE>

<STYLE TYPE='text/css'>

<!--

A:link{text-decoration:none;color:}

A:visited{text-decoration:none;color:}

A:hover {background-color:dddddd}

-->

</STYLE>

</HEAD>

<BODY BGCOLOR=eeeeee>

<CENTER>

<FONT SIZE=6 FACE='Comic Sans MS'>[ 게시판 ]</FONT><BR>

 

<TABLE BORDER=0 WIDTH=600 CELLSPACING=1>

<FORM NAME=PAGE>

<TR>

        <TD ALIGN=LEFT><FONT SIZE=2>총 게시물 : $total</TD>

        <TD ALIGN=RIGHT><FONT SIZE=2>현재 페이지 :

        <SELECT NAME=PAGE onchange=\"location.replace('list.html?db=$db&page='+document.PAGE.PAGE.value);\">";

for($i=1;$i<=$totalpage;$i++)

{

        if($i==$page) echo "<OPTION VALUE='$i' SELECTED>$i / $totalpage</OPTION>";

        else echo "<OPTION VALUE='$i'>$i / $totalpage</OPTION>";

}

        echo "</SELECT></TD>

</TR>

</FORM>

</TABLE>

<TABLE BORDER=0 WIDTH=600 CELLSPACING=1 BGCOLOR='black'>

<TR>

        <TD ALIGN=CENTER BGCOLOR=bbbbbb WIDTH=30><FONT SIZE=2 COLOR=black>번호</TD>

        <TD ALIGN=CENTER BGCOLOR=bbbbbb WIDTH=350><FONT SIZE=2 COLOR=black>제목</TD>

        <TD ALIGN=CENTER BGCOLOR=bbbbbb WIDTH=110><FONT SIZE=2 COLOR=black>작성자</TD>

        <TD ALIGN=CENTER BGCOLOR=bbbbbb WIDTH=30><FONT SIZE=2 COLOR=black>조회</TD>

        <TD ALIGN=CENTER BGCOLOR=bbbbbb WIDTH=80><FONT SIZE=2 COLOR=black>작성시간</TD>

</TR>";

$query = "SELECT num,subject,writer,visit,regtime,r_step FROM $db ";

if($keyword) $query .= " where $type like '%$keyword%'";

$query .= " ORDER BY num DESC,r_step ASC";

 

$result = mysql_query($query,$connect);

for($i=1;$i<=$pgsize*($page-1);$i++) $row=mysql_fetch_array($result);

 

while($row = mysql_fetch_array($result))

{

        $writer = stripslashes($row[writer]);

        $email = stripslashes($row[email]);

        $subject = stripslashes($row[subject]);

        $content = stripslashes($row[content]);

        $passwd = stripslashes($row[passwd]);

 

        if($keyword) ${$type} = eregi_replace("$keyword", "<font color=red>${keyword}</font>", ${$type});

 

        $regtime = substr($row[regtime],0,10);

        echo "

<TR>

        <TD ALIGN=CENTER BGCOLOR='eeeeee'><FONT SIZE=2>";

        if($row[r_step] == 0) echo $row[num];

        else echo "&nbsp;";

        echo "</FONT></TD>

        <TD BGCOLOR='eeeeee'><FONT SIZE=2>";

        if($row[r_step] != 0) echo "&nbsp;&nbsp;&nbsp;&nbsp;☞&nbsp;";

        echo "&nbsp;<A HREF='read.html?db=$db&num=$row[num]&page=$page&r_step=$row[r_step]'>$subject</A></FONT></TD>

        <TD ALIGN=CENTER BGCOLOR='eeeeee'><FONT SIZE=2>$writer</FONT></TD>

        <TD ALIGN=CENTER BGCOLOR='eeeeee'><FONT SIZE=2>$row[visit]</FONT></TD>

        <TD ALIGN=CENTER BGCOLOR='eeeeee'><FONT SIZE=2>$regtime</FONT></TD>

</TR>";

        if($rcount == $pgsize) break;

        else $rcount++;

}

echo "

</TABLE><BR>

<TABLE WIDTH=600 CELLSPACING=1 CELLPADDING=3>

<TR>

        <TD ALIGN=LEFT><FONT SIZE=2>

        [ ";

        if($page > 1) echo "<A HREF='list.html?db=$db&page=$ppage'>이전페이지</A>";

        else echo "이전페이지";

        echo "]&nbsp;&nbsp;

        [ <A HREF='writeform.html?db=$db&page=$page'>글쓰기</A> ]&nbsp;&nbsp;

        [ ";

        if($page < $totalpage) echo "<A HREF='list.html?db=$db&page=$npage'>다음페이지</A>";

        else echo "다음페이지";

        echo "]</TD>

        <FORM METHOD=POST ACTION=list.html?db=$db>

        <TD ALIGN=RIGHT><SELECT NAME=type>

        <OPTION VALUE='subject'>제목</OPTION>

        <OPTION VALUE='writer'>글쓴이</OPTION>

        <OPTION VALUE='content'>내용</OPTION></SELECT>&nbsp;

        <INPUT TYPE=TEXT NAME=keyword SIZE=10>&nbsp;

        <INPUT TYPE=SUBMIT VALUE='찾기'></TD>

        </FORM>

        </TR>

</TABLE>";

 

?>

 

 

 

문제2> 페이지 직접 이동기능 추가하기

 

 

 <?

if(!$db) $db = "board";

 

########### 한 페이지당 출력할 게시물의 수

$num_per_page = 5;

 

########### 게시물 출력목록 하단에 링크를 걸 페이지의 개수

$page_per_block = 5;

 

########### 페이지 초기화

if(!$page) {

     $page = 1;

}

 

########## 데이터베이스 서버에 연결한다. ##########

$dbconn = mysql_connect("localhost","php","php99") or die("DB서버 연결에 실패하였습니다!");

 

########## 작업 데이터베이스로 sample을 선택한다. ##########

$status = mysql_select_db("sample",$dbconn);

if(!$status) {

   $errNO = mysql_errno($dbconn);

   $errMSG = mysql_error($dbconn);

 

   echo("서버의 sample 데이터베이스연결에 실패하였습니다!<br>");

   echo("에러코드 $errNO : $errMSG<br>");

   exit;

}

 

$query = "SELECT num,subject,writer,visit,regtime,r_step FROM $db ";

if($keyword) $query .= " where $type like '%$keyword%'";

$query .= " ORDER BY num DESC,r_step ASC";

 

$result = mysql_query($query,$dbconn);

if(!$result) {

   $errNO = mysql_errno($dbconn);

   $errMSG = mysql_error($dbconn);

       

   echo("에러코드 $errNO : $errMSG<br>");

   exit;

}

 

$total_record = mysql_num_rows($result);

 

########## 전체 페이지수를 계산한다. ##########

$total_page = ceil($total_record/$num_per_page);

 

########## 현재의 페이지에서 출력할 게시물의 범위를 결정한다. ##########

if(!$total_record) {

   $first = 1;

   $last = 0;   

} else {

   $first = $num_per_page*($page-1);

   $last = $num_per_page*$page;

 

   $last -= 1;

   if($total_page == $page) {

      $last = $total_record - 1;

   }

}

 

echo "

<HEAD>

<TITLE>LeeLAB - 게시판</TITLE>

<STYLE TYPE='text/css'>

<!--

A:link{text-decoration:none;color:}

A:visited{text-decoration:none;color:}

A:hover {background-color:dddddd}

-->

</STYLE>

</HEAD>

<BODY BGCOLOR=eeeeee>

<CENTER>

<FONT SIZE=6 FACE='Comic Sans MS'>[ 게시판 ]</FONT><BR>

 

<TABLE BORDER=0 WIDTH=600 CELLSPACING=1>

<FORM NAME=PAGE>

<TR>

        <TD ALIGN=LEFT><FONT SIZE=2>총 게시물 : $total_record</TD>

        <TD ALIGN=RIGHT><FONT SIZE=2>현재 페이지 :

        <SELECT NAME=PAGE onchange=\"location.replace('list.html?db=$db&page='+document.PAGE.PAGE.value);\">";

for($i=1;$i<=$total_page;$i++)

{

        if($i==$page) echo "<OPTION VALUE='$i' SELECTED>$i / $total_page</OPTION>";

        else echo "<OPTION VALUE='$i'>$i / $total_page</OPTION>";

}

        echo "</SELECT></TD>

</TR>

</FORM>

</TABLE>

<TABLE BORDER=0 WIDTH=600 CELLSPACING=1 BGCOLOR='black'>

<TR>

        <TD ALIGN=CENTER BGCOLOR=bbbbbb WIDTH=30><FONT SIZE=2 COLOR=black>번호</TD>

        <TD ALIGN=CENTER BGCOLOR=bbbbbb WIDTH=350><FONT SIZE=2 COLOR=black>제목</TD>

        <TD ALIGN=CENTER BGCOLOR=bbbbbb WIDTH=110><FONT SIZE=2 COLOR=black>작성자</TD>

        <TD ALIGN=CENTER BGCOLOR=bbbbbb WIDTH=30><FONT SIZE=2 COLOR=black>조회</TD>

        <TD ALIGN=CENTER BGCOLOR=bbbbbb WIDTH=80><FONT SIZE=2 COLOR=black>작성시간</TD>

</TR>";

########## 테이블내 모든 레코드의 각 데이터 값을 각각의 변수에 저장하여 출력한다.

for($i = $first; $i <= $last; $i++) {

        $num = mysql_result($result,$i,0);

        $subject = mysql_result($result,$i,1);

        $writer = mysql_result($result,$i,2);

        $visit = mysql_result($result,$i,3);

        $regtime = mysql_result($result,$i,4);

        $r_step = mysql_result($result,$i,5);

 

        if($keyword) ${$type} = eregi_replace("$keyword", "<font color=red>${keyword}</font>", ${$type});

 

        $regtime = substr($regtime,0,10);

        echo "

<TR>

        <TD ALIGN=CENTER BGCOLOR='eeeeee'><FONT SIZE=2>";

        if($r_step == 0) echo $num;

        else echo "&nbsp;";

        echo "</FONT></TD>

        <TD BGCOLOR='eeeeee'><FONT SIZE=2>";

        if($r_step != 0) echo "&nbsp;&nbsp;&nbsp;&nbsp;";

        echo "&nbsp;<A HREF='read.html?db=$db&num=$num&page=$page&r_step=$r_step'>$subject</A></FONT></TD>

        <TD ALIGN=CENTER BGCOLOR='eeeeee'><FONT SIZE=2>$writer</FONT></TD>

        <TD ALIGN=CENTER BGCOLOR='eeeeee'><FONT SIZE=2>$visit</FONT></TD>

        <TD ALIGN=CENTER BGCOLOR='eeeeee'><FONT SIZE=2>$regtime</FONT></TD>

</TR>";

}

?>

</TABLE><BR>

<table width="600" border="0" cellspacing="0" cellpadding="0" align="center">

<tr>

   <td colspan="6" align="center">

<?

### 게시물 목록 하단의 각 페이지로 직접 이동할 수 있는

### 페이지링크에 대한 설정을 한다.

$total_block = ceil($total_page/$page_per_block);

$block = ceil($page/$page_per_block);

 

$first_page = ($block-1)*$page_per_block;

$last_page = $block*$page_per_block;

 

if($total_block <= $block) {

   $last_page = $total_page;

}

 

########## 이전페이지블록에 대한 페이지 링크 ##########

if($block > 1) {

   $my_page = $first_page;

   echo("<font size=2><a href=\"$php_self?page=$my_page\" >

   [이전 ${page_per_block}개]</a></font>");

}

 

### 현재의 페이지 블럭범위내에서 각 페이지로 바로

### 이동할 수 있는 하이퍼링크를 출력한다.

for($direct_page = $first_page+1; $direct_page <= $last_page; $direct_page++) {

   if($page == $direct_page) {

      echo("<font size=2><b>[$direct_page]</b></font>");

   } else {

      echo("<font size=2><a href=\"list.html?page=$direct_page\">

      [$direct_page]</a></font>");

   }

}

 

########## 다음페이지블록에 대한 페이지 링크 ##########

if($block < $total_block) {

   $my_page = $last_page+1;

   echo("<font size=2><a href=\"list.html?page=$my_page\">

   [다음 ${page_per_block}개]</a></font>");

}

?>   

   </td>

</tr>

</table>

<?

echo "

<TABLE WIDTH=600 CELLSPACING=1 CELLPADDING=3>

<TR>

        <TD ALIGN=LEFT><FONT SIZE=2>

        [ ";

        $ppage = $page + 1;

        $npage = $page - 1;

 

        if($page > 1) echo "<A HREF='list.html?db=$db&page=$ppage'>이전페이지</A>";

        else echo "이전페이지";

        echo "]&nbsp;&nbsp;

        [ <A HREF='writeform.html?db=$db&page=$page'>글쓰기</A> ]&nbsp;&nbsp;

        [ ";

        if($page < $total_page) echo "<A HREF='list.html?db=$db&page=$npage'>다음페이지</A>";

        else echo "다음페이지";

        echo "]</TD>

<FORM METHOD=POST ACTION=list.html?db=$db>

        <TD ALIGN=RIGHT><SELECT NAME=type>

        <OPTION VALUE='subject'>제목</OPTION>

        <OPTION VALUE='writer'>글쓴이</OPTION>

        <OPTION VALUE='content'>내용</OPTION></SELECT>&nbsp;

        <INPUT TYPE=TEXT NAME=keyword SIZE=10>&nbsp;

        <INPUT TYPE=SUBMIT VALUE='찾기'></TD>

        </FORM>

        </TR>

</TABLE>";

 

?>

 

 

 

문제3> 답변글쓰기 오류 수정하기

 답변형 게시판의 구현 원리에 대해서 알아보자

답변형 게시판은 원글에 대한 답변글이 원글의 바로 밑에 출력되기 때문에 모든 게시물이 작성 시간에 따른 순서대로 출력되지는 않는다. 예를 들어 이전장의 방명록과 같은 경우는 글이 작성된 순서에 따라 가장 최근에 작성된 글이 가장 큰 uid값을 가지므로 이 uid필드의 내림차순으로 정렬하기만 하면 되었다. 그러나 게시판의 경우에는 원글에 대한 답변글이 사용자에 의해 순차적으로 작성되는 것이 아니기 때문에 어떤 시간적 순서에 의해 답변글이 작성되더라도 원글에 대한 답변글을 연관지어 함께 출력하는 알고리즘이 필요하게 된다.

답변형 게시판의 출력형태를 보면 다음과 같다.

uid

num

subject

r_step

17

9

첫 번째 글입니다.

A

18

☞ 첫 번째 답변글

AA

19

☞ ☞  답변글에 대한 답변글

AAA

21

☞ ☞ ☞  답변글에 대한 답변글

AAAA

20

☞ 두 번째 답변글

AB

22

☞ ☞  답변글에 대한 답변글

ABA

16

8

게시물 답변기능 구현 중입니다.

A

23

☞ 게시물 답변기능 구현 중입니다.

AA

24

☞ ☞ 게시물 답변기능 구현 중입니다.

AAA

15

7

테스트입니다.

A

위의 그림은 여기서 만들 게시판에서 게시물이 출력되는 순서를 나타낸 것이다.

uid 필드값은 게시판 테이블에서 기본키로 정의하였으므로 각게시물마다 서로 다른 값을 가지며, 또 auto_increment로 선언되어 있으므로 가장 최근에 작성된 게시물이 가장 큰 uid값을 갖는다. 그러나 위의 그림에서 목록에 대한 출력 순서를 보면 답변형 게시판에서는 게시물을 출력할 때 방명록의 경우처럼 uid값이 큰 순서대로 출력하지 않는다는 것을 알 수 있다. 즉 여기서는 uid값이 24인 게시물이 가장 최근에 작성된 글이지만 출력순서상으로는 맨위에 나타나지 않는다.

결국, 답변형 게시판은 먼저 원글을 작성한 순서대로 정렬하고, 그 원 글에 대한 답변글들은 다시 정해진 순서에 따라 그 원글의 바로 밑에 출력하는 방식을 갖는다.

앞에서 원글과 답변글은 모두 하나의 묶음으로 간주하여 동일한  num값을 갖는다고 하였다. 즉 위에서 uid가 16번인 게시물은 num이 8일 경우 이 게시물에 대한 답변 글과 그 답변글에 대한 또 다른 답변글은 모두 num이 8이 된다. 따라서 우선은 이 num값이 큰 순서대로 모든 게시물을 정렬한다. 그러면, 일단 원글과 원글에 대한 답변글들은 모두 같은 num을 갖지므로 게시물 출력할 때 서로 떨어지지 않고, 붙어서 출력될 것이다.

이렇게 원글에 대한 답변글들은 num이 같은 답변글들 내에서  다시 원글과 답변글의 관계를 갖게 되는데, 이럴 때 위의 그림처럼 답변글을 해당 원글의 바로 밑에 출력하기 위한 순서를 정의하는 필드가 바로 r_step이라는 필드이다.

r_step필드는 원글에 대한 답변글의 순서와 답변의 깊이를 그값으로서 나타내는 필드라고 할 수 있다. 일단 모든 원글은 기본값으로 r_step필드가 "A"이라고 정의한다. 즉, 위 그림에서 15, 16, 17번의 글은 writeform에서 글쓰기 할 때 r_step의 값은 "A"으로 저장된다.

다음에 원글에 대한 답변글을 달았을 경우 답변글의 r_step은 해당 원글이 가지고 있던 r_step에 하나의 영문자를 추가한 값을 갖게된다. 이때 추가되는 영문자는 답변글이 원글의 몇 번째 답변글이냐에 따라 결정된다. 위의 그림을 보면서, 참고 하기 바란다.

그리고, 게시물 목록을 출력하는 list.html 파일에서는 게시물의 num필드를 내림차순, r_step필드를 로름차순으로 정렬하여, 그 결과를 레코드 세트로 가져와 해당 레코드의 필드값을 각각 리스트 형태로 출력하기만 하면된다.

 

 

 

파일명 : list.html

<?

if(!$db) $db = "board";

 

########### 한 페이지당 출력할 게시물의 수

$num_per_page = 5;

 

########### 게시물 출력목록 하단에 링크를 걸 페이지의 개수

$page_per_block = 5;

 

########### 페이지 초기화

if(!$page) {

     $page = 1;

}

 

########## 데이터베이스 서버에 연결한다. ##########

$dbconn = mysql_connect("localhost","php","php99") or die("DB서버 연결에 실패하였습니다!");

 

########## 작업 데이터베이스로 sample을 선택한다. ##########

$status = mysql_select_db("sample",$dbconn);

if(!$status) {

   $errNO = mysql_errno($dbconn);

   $errMSG = mysql_error($dbconn);

 

   echo("서버의 sample 데이터베이스연결에 실패하였습니다!<br>");

   echo("에러코드 $errNO : $errMSG<br>");

   exit;

}

 

$query = "SELECT num,subject,writer,visit,regtime,r_step FROM $db ";

if($keyword) $query .= " where $type like '%$keyword%'";

$query .= " ORDER BY num DESC,r_step ASC";

 

$result = mysql_query($query,$dbconn);

if(!$result) {

   $errNO = mysql_errno($dbconn);

   $errMSG = mysql_error($dbconn);

       

   echo("에러코드 $errNO : $errMSG<br>");

   exit;

}

 

$total_record = mysql_num_rows($result);

 

########## 전체 페이지수를 계산한다. ##########

$total_page = ceil($total_record/$num_per_page);

 

########## 현재의 페이지에서 출력할 게시물의 범위를 결정한다. ##########

if(!$total_record) {

   $first = 1;

   $last = 0;   

} else {

   $first = $num_per_page*($page-1);

   $last = $num_per_page*$page;

 

   $last -= 1;

   if($total_page == $page) {

      $last = $total_record - 1;

   }

}

 

echo "

<HEAD>

<TITLE>LeeLAB - 게시판</TITLE>

<STYLE TYPE='text/css'>

<!--

A:link{text-decoration:none;color:}

A:visited{text-decoration:none;color:}

A:hover {background-color:dddddd}

-->

</STYLE>

</HEAD>

<BODY BGCOLOR=eeeeee>

<CENTER>

<FONT SIZE=6 FACE='Comic Sans MS'>[ 게시판 ]</FONT><BR>

 

<TABLE BORDER=0 WIDTH=600 CELLSPACING=1>

<FORM NAME=PAGE>

<TR>

        <TD ALIGN=LEFT><FONT SIZE=2>총 게시물 : $total_record</TD>

        <TD ALIGN=RIGHT><FONT SIZE=2>현재 페이지 :

        <SELECT NAME=PAGE onchange=\"location.replace('list.html?db=$db&page='+document.PAGE.PAGE.value);\">";

for($i=1;$i<=$total_page;$i++)

{

        if($i==$page) echo "<OPTION VALUE='$i' SELECTED>$i / $total_page</OPTION>";

        else echo "<OPTION VALUE='$i'>$i / $total_page</OPTION>";

}

        echo "</SELECT></TD>

</TR>

</FORM>

</TABLE>

<TABLE BORDER=0 WIDTH=600 CELLSPACING=1 BGCOLOR='black'>

<TR>

        <TD ALIGN=CENTER BGCOLOR=bbbbbb WIDTH=30><FONT SIZE=2 COLOR=black>번호</TD>

        <TD ALIGN=CENTER BGCOLOR=bbbbbb WIDTH=350><FONT SIZE=2 COLOR=black>제목</TD>

        <TD ALIGN=CENTER BGCOLOR=bbbbbb WIDTH=110><FONT SIZE=2 COLOR=black>작성자</TD>

        <TD ALIGN=CENTER BGCOLOR=bbbbbb WIDTH=30><FONT SIZE=2 COLOR=black>조회</TD>

        <TD ALIGN=CENTER BGCOLOR=bbbbbb WIDTH=80><FONT SIZE=2 COLOR=black>작성시간</TD>

</TR>";

########## 테이블내 모든 레코드의 각 데이터 값을 각각의 변수에 저장하여 출력한다.

for($i = $first; $i <= $last; $i++) {

        $num = mysql_result($result,$i,0);

        $subject = mysql_result($result,$i,1);

        $writer = mysql_result($result,$i,2);

        $visit = mysql_result($result,$i,3);

        $regtime = mysql_result($result,$i,4);

        $r_step = mysql_result($result,$i,5);

 

        $step_len = strlen($r_step) -1;

 

        if($keyword) ${$type} = eregi_replace("$keyword", "<font color=red>${keyword}</font>", ${$type});

 

        $regtime = substr($regtime,0,10);

        echo "

<TR>

        <TD ALIGN=CENTER BGCOLOR='eeeeee'><FONT SIZE=2>";

        if($r_step == "A") echo $num;

        else echo "&nbsp;";

        echo "</FONT></TD>

        <TD BGCOLOR='eeeeee'><FONT SIZE=2>";

        for($j=0; $j<$step_len; $j++) echo "&nbsp;&nbsp;";

        echo "&nbsp;<A HREF='read.html?db=$db&num=$num&page=$page&r_step=$r_step'>$subject</A></FONT></TD>

        <TD ALIGN=CENTER BGCOLOR='eeeeee'><FONT SIZE=2>$writer</FONT></TD>

        <TD ALIGN=CENTER BGCOLOR='eeeeee'><FONT SIZE=2>$visit</FONT></TD>

        <TD ALIGN=CENTER BGCOLOR='eeeeee'><FONT SIZE=2>$regtime</FONT></TD>

</TR>";

}

?>

</TABLE><BR>

<table width="600" border="0" cellspacing="0" cellpadding="0" align="center">

<tr>

   <td colspan="6" align="center">

<?

### 게시물 목록 하단의 각 페이지로 직접 이동할 수 있는

### 페이지링크에 대한 설정을 한다.

$total_block = ceil($total_page/$page_per_block);

$block = ceil($page/$page_per_block);

 

$first_page = ($block-1)*$page_per_block;

$last_page = $block*$page_per_block;

 

if($total_block <= $block) {

   $last_page = $total_page;

}

 

########## 이전페이지블록에 대한 페이지 링크 ##########

if($block > 1) {

   $my_page = $first_page;

   echo("<font size=2><a href=\"$php_self?page=$my_page\" >

   [이전 ${page_per_block}개]</a></font>");

}

 

### 현재의 페이지 블럭범위내에서 각 페이지로 바로

### 이동할 수 있는 하이퍼링크를 출력한다.

for($direct_page = $first_page+1; $direct_page <= $last_page; $direct_page++) {

   if($page == $direct_page) {

      echo("<font size=2><b>[$direct_page]</b></font>");

   } else {

      echo("<font size=2><a href=\"list.html?page=$direct_page\">

      [$direct_page]</a></font>");

   }

}

 

########## 다음페이지블록에 대한 페이지 링크 ##########

if($block < $total_block) {

   $my_page = $last_page+1;

   echo("<font size=2><a href=\"list.html?page=$my_page\">

   [다음 ${page_per_block}개]</a></font>");

}

?>   

   </td>

</tr>

</table>

<?

echo "

<TABLE WIDTH=600 CELLSPACING=1 CELLPADDING=3>

<TR>

        <TD ALIGN=LEFT><FONT SIZE=2>

        [ ";

        $ppage = $page + 1;

        $npage = $page - 1;

 

        if($page > 1) echo "<A HREF='list.html?db=$db&page=$ppage'>이전페이지</A>";

        else echo "이전페이지";

        echo "]&nbsp;&nbsp;

        [ <A HREF='writeform.html?db=$db&page=$page'>글쓰기</A> ]&nbsp;&nbsp;

        [ ";

        if($page < $total_page) echo "<A HREF='list.html?db=$db&page=$npage'>다음페이지</A>";

        else echo "다음페이지";

        echo "]</TD>

<FORM METHOD=POST ACTION=list.html?db=$db>

        <TD ALIGN=RIGHT><SELECT NAME=type>

        <OPTION VALUE='subject'>제목</OPTION>

        <OPTION VALUE='writer'>글쓴이</OPTION>

        <OPTION VALUE='content'>내용</OPTION></SELECT>&nbsp;

        <INPUT TYPE=TEXT NAME=keyword SIZE=10>&nbsp;

        <INPUT TYPE=SUBMIT VALUE='찾기'></TD>

        </FORM>

        </TR>

</TABLE>";

 

?>

 

 

파일명 : write.html

<?

$connect = mysql_connect("localhost","php","php99");

mysql_select_db("sample",$connect);

 

$writer = addslashes($writer);

$email = addslashes($email);

$subject = addslashes($subject);

$content = addslashes($content);

$passwd = addslashes($passwd);

 

$query = "SELECT max(num) FROM $db";

$result = mysql_query($query,$connect);

$num = mysql_result($result,0,0)+1;

$query = "INSERT INTO $db (num,writer,email,subject,content,passwd,r_step,regtime,visit) VALUES ($num,'$writer','$email','$subject','$content','$passwd','A',NOW(),0)";

$result = mysql_query($query,$connect);

echo "<SCRIPT>location.replace('list.html?db=$db&page=$page');</SCRIPT>";

?>

 

파일명 : replyform.html

<?

$connect = mysql_connect("localhost","php","php99");

mysql_select_db("sample",$connect);

 

$query = "SELECT subject,content FROM $db WHERE num=$num AND r_step=$r_step";

$result = mysql_query($query,$connect);

$row = mysql_fetch_array($result);

 

$subject = stripslashes($row[subject]);

$content = stripslashes($row[content]);

 

$subject = eregi_replace("☞", "", $subject);

?>

<HEAD>

<TITLE>LeeLAB - 게시판</TITLE>

<STYLE TYPE='text/css'>

<!--

A:link{text-decoration:none;color:}

A:visited{text-decoration:none;color:}

A:hover {background-color:dddddd}

-->

</STYLE>

 

<SCRIPT LANGUAGE='javascript'>

function chk_form()

{

        if(document.replyform.writer.value == '') alert('이름을 입력하여 주세요.');

        else if(document.replyform.subject.value == '') alert('제목을 입력하여 주세요');

        else if(document.replyform.content.value.length < 10) alert('내용을 성심껏 입력해주세요');

        else if(document.replyform.passwd.value == '') alert('비밀번호는 추후 글을 수정,삭제하는데 필요하니 입력해주세요.');

        else document.replyform.submit();

}

</SCRIPT>

</HEAD>

<BODY BGCOLOR='eeeeee'>

<CENTER>

<FORM NAME='replyform' METHOD=POST ACTION='reply.html'>

<TABLE WIDTH=600 BGCOLOR=black CELLSPACING=1>

<TR>

        <TD BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR='black'>글 쓴 이</TD>

        <TD BGCOLOR='eeeeee' WIDTH=500><INPUT TYPE=TEXT NAME='writer' SIZE=12 MAXLENGTH=12></TD>

</TR>

<TR>

        <TD BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR='black'>E-Mail</TD>

        <TD BGCOLOR='eeeeee' WIDTH=500><INPUT TYPE=TEXT NAME='email' SIZE=50 MAXLENGTH=100></TD>

</TR>

<TR>

        <TD BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR='black'>글 제 목</TD>

        <TD BGCOLOR='eeeeee' WIDTH=500><INPUT TYPE=TEXT NAME='subject' SIZE=50 MAXLENGTH=100 VALUE='☞ <?echo "$subject";?>'></TD>

</TR>

<TR>

        <TD BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR='black'>글 내 용</TD>

        <TD BGCOLOR='eeeeee' WIDTH=500>

<TEXTAREA NAME='content' ROWS=10 COLS=67>

<?echo("{$content}\n

------------------------------------------------------------\n");?>

</TEXTAREA>

</TD>

</TR>

<TR>

        <TD BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR='black'>비밀번호</TD>

        <TD BGCOLOR='eeeeee'><INPUT TYPE=PASSWORD NAME='passwd' SIZE=12 MAXLENGTH=12>

</TR>

</TABLE>

<TABLE WIDTH=600 BGCOLOR=eeeeee>

<TR>

        <TD ALIGN=CENTER>

        <INPUT TYPE='BUTTON' VALUE='저장' onclick='chk_form();'>&nbsp;&nbsp;

        <INPUT TYPE='BUTTON' VALUE='취소' onclick='javascript:location = "<?echo("list.html?db=$db&page=$page");?>"'></TD>

</TR>

</TABLE>

<INPUT TYPE=HIDDEN NAME=db VALUE='<?echo $db;?>'>

<INPUT TYPE=HIDDEN NAME=num VALUE='<?echo $num;?>'>

<INPUT TYPE=HIDDEN NAME=page VALUE='<?echo $page;?>'>

<INPUT TYPE=HIDDEN NAME=r_step VALUE='<?echo $r_step;?>'>

</FORM>

</BODY>

</HTML>

 

파일명 : replyform.html

<?

$connect = mysql_connect("localhost","php","php99");

mysql_select_db("sample",$connect);

 

$query = "SELECT subject,content FROM $db WHERE num=$num AND r_step='$r_step'";

$result = mysql_query($query,$connect);

$row = mysql_fetch_array($result);

 

$subject = stripslashes($row[subject]);

$content = stripslashes($row[content]);

 

$subject = eregi_replace("☞", "", $subject);

?>

<HEAD>

<TITLE>LeeLAB - 게시판</TITLE>

<STYLE TYPE='text/css'>

<!--

A:link{text-decoration:none;color:}

A:visited{text-decoration:none;color:}

A:hover {background-color:dddddd}

-->

</STYLE>

 

<SCRIPT LANGUAGE='javascript'>

function chk_form()

{

        if(document.replyform.writer.value == '') alert('이름을 입력하여 주세요.');

        else if(document.replyform.subject.value == '') alert('제목을 입력하여 주세요');

        else if(document.replyform.content.value.length < 10) alert('내용을 성심껏 입력해주세요');

        else if(document.replyform.passwd.value == '') alert('비밀번호는 추후 글을 수정,삭제하는데 필요하니 입력해주세요.');

        else document.replyform.submit();

}

</SCRIPT>

</HEAD>

<BODY BGCOLOR='eeeeee'>

<CENTER>

<FORM NAME='replyform' METHOD=POST ACTION='reply.html'>

<TABLE WIDTH=600 BGCOLOR=black CELLSPACING=1>

<TR>

        <TD BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR='black'>글 쓴 이</TD>

        <TD BGCOLOR='eeeeee' WIDTH=500><INPUT TYPE=TEXT NAME='writer' SIZE=12 MAXLENGTH=12></TD>

</TR>

<TR>

        <TD BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR='black'>E-Mail</TD>

        <TD BGCOLOR='eeeeee' WIDTH=500><INPUT TYPE=TEXT NAME='email' SIZE=50 MAXLENGTH=100></TD>

</TR>

<TR>

        <TD BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR='black'>글 제 목</TD>

        <TD BGCOLOR='eeeeee' WIDTH=500><INPUT TYPE=TEXT NAME='subject' SIZE=50 MAXLENGTH=100 VALUE='☞ <?echo "$subject";?>'></TD>

</TR>

<TR>

        <TD BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR='black'>글 내 용</TD>

        <TD BGCOLOR='eeeeee' WIDTH=500>

<TEXTAREA NAME='content' ROWS=10 COLS=67>

<?echo("{$content}\n

------------------------------------------------------------\n");?>

</TEXTAREA></TD>

</TR>

<TR>

        <TD BGCOLOR='bbbbbb' ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR='black'>비밀번호</TD>

        <TD BGCOLOR='eeeeee'><INPUT TYPE=PASSWORD NAME='passwd' SIZE=12 MAXLENGTH=12>

</TR>

</TABLE>

<TABLE WIDTH=600 BGCOLOR=eeeeee>

<TR>

        <TD ALIGN=CENTER>

        <INPUT TYPE='BUTTON' VALUE='저장' onclick='chk_form();'>&nbsp;&nbsp;

        <INPUT TYPE='BUTTON' VALUE='취소' onclick='javascript:location = "<?echo("list.html?db=$db&page=$page");?>"'></TD>

</TR>

</TABLE>

<INPUT TYPE=HIDDEN NAME=db VALUE='<?echo $db;?>'>

<INPUT TYPE=HIDDEN NAME=num VALUE='<?echo $num;?>'>

<INPUT TYPE=HIDDEN NAME=page VALUE='<?echo $page;?>'>

<INPUT TYPE=HIDDEN NAME=r_step VALUE='<?echo $r_step;?>'>

</FORM>

</BODY>

</HTML>

 

파일명 : reply.html

<?

$connect = mysql_connect("localhost","php","php99");

mysql_select_db("sample",$connect);

 

$writer = addslashes($writer);

$email = addslashes($email);

$subject = addslashes($subject);

$content = addslashes($content);

$passwd = addslashes($passwd);

 

 

$query = "SELECT r_step FROM $db WHERE num=$num AND length(r_step)=length('$r_step')+1 ORDER BY r_step ";

$result = mysql_query($query,$connect);

 

$rows = mysql_num_rows($result);

if($rows) {

        $row = mysql_fetch_array($result);

 

        $step = substr($row[r_step],strlen($r_step)-1,1);

        $step = ++$step;

 

        $r_step = $r_step . $step;

 

} else {

        $r_step = $r_step . "A";

}

 

$query = "INSERT INTO $db (num,writer,email,subject,content,passwd,r_step,regtime,visit) VALUES ($num,'$writer',  '$email','$subject','$content','$passwd','$r_step',NOW(),0)";

$result = mysql_query($query,$connect);

if(!$result) {

        echo($query);

        exit;

}

echo "<SCRIPT>location.replace('list.html?db=$db&page=$page');</SCRIPT>";

 

?>

 

 

 

[목차]

개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.