Web Programming >> PHP Programming
|
[목차] |
제10장 메모장 만들기(MySQL)
1. MySQL을 이용한 메모장 프로그램
1. Table 만들기 파일명 : memo.sql CREATE TABLE memo ( num int not null default '0' auto_increment, writer varchar(20), memo varchar(255), regtime datetime, primary key(num)); # mysql -u php -p sample < memo.sql
2. 목록보기(list.html)
<HTML> <HEAD> <TITLE>메모장</TITLE> </HEAD> <BODY> <CENTER> <BR><FONT SIZE=6 FACE='Comic Sans MS'>메모장</FONT> <TABLE WIDTH=600 CELLSPACING=1 CELLPADDING=1 BGCOLOR=6b7bad> <TR> <TD ALIGN=CENTER WIDTH=60><FONT SIZE=2 COLOR=WHITE> 번호</TD> <TD ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR=WHITE> 작성자</TD> <TD ALIGN=CENTER WIDTH=440><FONT SIZE=2 COLOR=WHITE> 내용</TD> </TR> <? $connect = Mysql_connect("localhost","php","php99"); mysql_select_db("sample",$connect);
$query = "SELECT * FROM memo ORDER BY num DESC"; $result = mysql_query($query,$connect); while($row = mysql_fetch_array($result)) { // $row[regtime] = substr($row[regtime],11,8); echo " <TR BGCOLOR=ghostwhite> <TD ALIGN=CENTER><FONT SIZE=2>$row[num]</TD> <TD ALIGN=CENTER><FONT SIZE=2>$row[writer]</TD> <TD><FONT SIZE=2>$row[memo] - <FONT COLOR=RED>$row[regtime]</TD> </TR>"; } ?> </TABLE> <BR> <TABLE WIDTH=600 CELLSPACING=1 CELLPADDING=1 BGCOLOR=6b7bad> <FORM METHOD=POST ACTION=post.html> <TR BGCOLOR=ghostwhite> <TD ALIGN=CENTER><FONT SIZE=2> 작성자 : <INPUT TYPE=TEXT NAME=writer SIZE=10> <INPUT TYPE=TEXT NAME=memo SIZE=40> <INPUT TYPE=SUBMIT VALUE='메모남기기'> </TR> </FORM> </TABLE> </BODY> </HTML>
3. 글쓰기 처리(post.html) <? $connect = Mysql_connect("localhost","php","php99"); mysql_select_db("sample",$connect);
$query="INSERT INTO memo(writer,memo,regtime) VALUES ('$writer','$memo',NOW())"; mysql_query($query,$connect);
echo "<SCRIPT>location.replace('list.html');</SCRIPT>"; ?>
4. 목록보기(list.html) 수정 - 페이지 이동 기능
<? ########### 한 페이지당 출력할 게시물의 수 $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 * FROM memo ORDER BY num DESC"; $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);
########## 현재의 페이지에서 출력할 게시물의 범위를 결정한다. ########## if(!$total_record) { $first = 1; $last = 0; } else { $first = $num_per_page*($page-1); $last = $num_per_page*$page;
$IsNext = $total_record - $last; if($IsNext > 0) { $last -= 1; } else { $last = $total_record - 1; } }
########## 전체 페이지수를 계산한다. ########## $total_page = ceil($total_record/$num_per_page);
?> <HTML> <HEAD> <TITLE>메모장</TITLE> </HEAD> <BODY> <CENTER> <BR><FONT SIZE=6 FACE='Comic Sans MS'>메모장</FONT> <TABLE WIDTH=600 CELLSPACING=1 CELLPADDING=1 BGCOLOR=6b7bad> <TR> <TD ALIGN=CENTER WIDTH=60><FONT SIZE=2 COLOR=WHITE> 번호</TD> <TD ALIGN=CENTER WIDTH=100><FONT SIZE=2 COLOR=WHITE> 작성자</TD> <TD ALIGN=CENTER WIDTH=440><FONT SIZE=2 COLOR=WHITE> 내용</TD> </TR> <? ########## 게시물의 가상번호(게시물의 개수에 따른 일련번호) ########## $article_num = $total_record - $num_per_page*($page-1);
########## 테이블내 모든 레코드의 각 데이터 값을 각각의 변수에 저장하여 출력한다. ########## for($i = $first; $i <= $last; $i++) { $my_num = mysql_result($result,$i,0); $my_writer = mysql_result($result,$i,1); $my_memo = mysql_result($result,$i,2); $my_regtime = mysql_result($result,$i,3);
echo " <TR BGCOLOR=ghostwhite> <TD ALIGN=CENTER><FONT SIZE=2>$my_num </TD> <TD ALIGN=CENTER><FONT SIZE=2>$my_writer </TD> <TD><FONT SIZE=2>$my_memo - <FONT COLOR=RED>$my_regtime </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>
<table width="600" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td align="left"> <a href="list.html">목록</a> </td> <td align="right"> <? ########## 이전페이지가 존재할 경우 이전페이지로 가는 링크를 활성화시킨다. if ($page > 1) { $page_num = $page - 1; echo("<a href=\"list.html?page=$page_num\">이전</a> | "); } else { echo("이전 | "); }
########## 게시물이 다음페이지에도 존재할 경우 다음페이지로 가는 링크를 활성화시킨다. if ($IsNext > 0) { $page_num = $page + 1; echo("<a href=\"list.html?page=$page_num\">다음</a></td>"); } else { echo("다음</td>"); } ?>
</tr> </table> <? mysql_close(); ?> <br> <TABLE WIDTH=600 CELLSPACING=1 CELLPADDING=1 BGCOLOR=6b7bad> <FORM METHOD=POST ACTION=post.html> <TR BGCOLOR=ghostwhite> <TD ALIGN=CENTER><FONT SIZE=2> 작성자 : <INPUT TYPE=TEXT NAME=writer SIZE=10> <INPUT TYPE=TEXT NAME=memo SIZE=40> <INPUT TYPE=SUBMIT VALUE='메모남기기'> </TR> </FORM> </TABLE> </BODY> </HTML>
|
[목차] |