Presentation is loading. Please wait.

Presentation is loading. Please wait.

12장 자유게시판 한빛미디어(주).

Similar presentations


Presentation on theme: "12장 자유게시판 한빛미디어(주)."— Presentation transcript:

1 12장 자유게시판 한빛미디어(주)

2 학습 목표 자유게시판 동작 기능을 이해한다 자유게시판 DB 테이블을 생성하는 법을 익힌다.
자유게시판 목록 보기/검색 소스를 이해한다. 자유게시판 글을 DB 테이블에 저장 방법을 익힌다. 자유게시판의 글 내용 소스를 이해한다. 글 수정 방법을 익힌다 글 내용을 삭제하는 방법을 익힌다

3 주요 학습 내용 01. 파일목록 및 DB 테이블 02. 목록 보기 및 검색 03. 글쓰기 04. 글 내용 보기
05. 글 수정 및 삭제

4 자유게시판 기능 01 ⑴ 로그인 여부와 상관없는 글 쓰기 ⑵ 글 내용 수정 및 삭제 시 비밀번호 확인
⑶ 관리자 로그인 시 모든 글의 수정 및 삭제 가능 ⑷ 제목, 글내용, 글쓴이를 키워드로 하는 문자열 검색 ⑸ 목록보기 아래에 링크 페이지 번호 표시

5 자유게시판 미리 보기 02

6 자유게시판 파일 목록 03 파일명 설명 freeboard.sql 자유게시판 DB 테이블 생성 명령 list.php
게시판 목록 보기 insert.php 게시판 글을 DB에 저장 passwd_form.php 글 삭제 시 사용되는 비밀번호 확인 양식 delete.php 게시판 글을 DB에서 삭제 modify_form.php 게시판 글 수정 양식 modify.php 게시판 글을 DB에서 수정 search.php 특정 문자열로 검색된 게시판 글 목록 view.php 글 내용 보기 write_form.php 게시판 글쓰기 양식 [표 12-1] 자유게시판에 사용되는 파일 목록

7 자유게시판 프로그램 설치 04 ⑴ 작업 폴더(“www" 폴더) 밑에 “freeboard" 폴더를 만들고 생성된 “freeboard" 폴더 밑에 교재 뒤 CD의 “www\freeboard" 폴더에 있는 파일들과 "img" 디렉토리를 통째로 복사한다. ⑵ 자유게시판 DB 테이블을 생성한다.

8 not null, auto_increment,
자유게시판 DB 테이블 05 필드 이름 타입 추가 사항 필드 설명 num int not null, auto_increment, primary key 일렬 번호 name varchar(20) not null 이름 passwd 비밀 번호 subject varchar(100) 제목 content text 글 내용 regist_day 글 쓴 날짜 hit 조회수 ip 접속 IP [표 12-2] 자유게시판 DB 테이블 (테이블 명 : freeboard)

9 자유게시판 DB 테이블 만들기 06 메모장으로 다음을 타이핑한 다음 “c:\mysql\bin” 폴더 밑에 “freeboard.sql”이름으로 저장 CREATE TABLE freeboard (        num int not null auto_increment,        name varchar(20) not null,        passwd varchar(20) not null,        subject varchar(100) not null,        content text not null,        regist_day varchar(20),        hit int,        ip varchar(20),        PRIMARY KEY (num)  ); 명령 프롬프트에서 다음을 실행  C:\mysql\bin> mysql -uphp5 -p1234 php5_db < freeboard.sql

10 【예제 12-1】list.php 02 자유게시판 목록 보기 1 : <?
 2 :    $scale = 5;   // 한 화면에 표시되는 글 수  4 :    include "../dbconn.php";  6 :    $sql = "select * from freeboard order by num desc";  7 :    $result = mysql_query($sql, $connect);  8 : ?>  9 : <html>  10 : <META http-equiv="Content-Type" content="text/html; charset=Korean">  11 :  <head>  12 :   <title> :: PHP 프로그래밍 입문에 오신 것을 환영합니다~~ :: </title>  13 :   <link rel="stylesheet" href="../style.css" type="text/css">    14 :  </head>  15 :  <body leftmargin="0" topmargin="0" marginwidth="0“ marginheight="0">

11 【예제 12-1】list.php 02  24 : <?  $total_record = mysql_num_rows($result); // 전체 글 수 ?>  25 :         <tr>  26 :           <td align="right" colspan="5" height=20>전체  27 :             <? echo $total_record; ?>건  28 :             </td></tr>  29 :         <tr> <td> 32 : <table border=0 cellspacing=0 cellpdding=0 width='100%‘ class="txt">  33 :         <tr bgcolor="#5AB2C8">  34 :           <td colspan="5" height=1></td></tr>  36 :         <tr bgcolor="#D2EAF0" height=25>  37 :           <td width="50" align="center"><strong>번호</strong></td>  38 :           <td width="450" align=center><strong>제목</strong></td>  39 :           <td width="76" align=center><strong>글쓴이</strong></td>  40 :           <td width="145" align=center><strong>작성일</strong></td>  41 :           <td width="55" align=center><strong>조회</strong></td></tr>

12 【예제 12-1】list.php 02 47 : <? 48 : // 전체 페이지 수($total_page) 계산
 47 : <?  48 :    // 전체 페이지 수($total_page) 계산  49 :    if ($total_record % $scale == 0)      50 :       $total_page = floor($total_record/$scale);       51 :    else  52 :       $total_page = floor($total_record/$scale) + 1;  53 :   54 :    if (!$page)                 // 페이지번호($page)가 0 일 때  55 :        $page = 1;              // 페이지 번호를 1로 초기화   57 :    // 표시할 페이지($page)에 따라 $start 계산   58 :    $start = ($page - 1) * $scale;       60 :    $number = $total_record - $start;   62 :   for ($i=$start; $i<$start+$scale && $i < $total_record; $i++)      63 :    {  // 가져올 레코드로 위치(포인터) 이동   64 :       mysql_data_seek($result, $i);        65 :       // 하나의 레코드 가져오기  66 :       $row = mysql_fetch_array($result);    

13 【예제 12-1】list.php 02 69 : $day = $row[regist_day];
 71 :       // 레코드 화면에 출력하기  72 :       echo " <tr height=25>  74 :           <td align=center>$number</td>  75 :           <td><img src='img/record_id.gif' border=0>  76 :               <a href='view.php?num=$row[num]&page=$page'>  77 :                        $row[subject] </a></td>  78 :           <td align=center>$row[name] </td>  79 :           <td align=center>$day</td>  80 :           <td align=center>$row[hit]</td>  81 :         </tr>  82 :         <tr bgcolor='#CCCCCC' height=1>  83 :           <td colspan='5'></td></tr>     ";  86 :     $number--;  87 :    }  88 : ?>

14 【예제 12-1】list.php 02 126 :        <form name=searchForm method=post action="search.php">  127 :         <tr>  128 :           <td>    129 :             <select name="find" class="txt">  130 :               <option value="subject">제목에서</option>  131 :               <option value="content">본문에서</option>  132 :               <option value="name">글쓴이에서</option>  133 :             </select>  134 :                           135 :               <input type="text" name="search" size=10>  136 :               <input type="image" src="img/i_search.gif"  137 :                     align=absmiddle border=0>  138 :           </td>  139 :  140 :           <td align=right>

15 【예제 12-1】list.php 02 141 : <a href="write_form.php">
 142 :                <img src="img/i_write.gif" align=absmiddle border=0></a>  143 :         <a href="list.php"><img src="img/i_list.gif" border=0></a>  144 :          </td>  145 :         </tr>  146 :         <tr height=5>  147 :           <td></td>  148 :         </tr>  149 :         <tr bgcolor="#5AB2C8" height=1>  150 :           <td colspan=2></td>  151 :         </tr>  152 :        </form>  153 :     </table>  154 :    <!-- 검색하기 끝 -->  155 :  </body>  156 : </html>

16 【예제 12-2】search.php 02 검색하기 1 : <?
 2 :    $scale = 5;   // 한 화면에 표시되는 글 수  3 :  4 :    include "../dbconn.php";  5 :  6 :    // $find : subject, name, content 중 하나의 값을 가짐  7 :    // $search : 입력된 문자열  8 :    $sql = "select * from freeboard where $find like '%$search%'  9 :            order by num desc";  10 :    $result = mysql_query($sql, $connect);  11 : ?>  위 소스를 제외하면 list.php 와 동일

17 【예제 12-3】write_form.php 02 글쓰기 폼 양식 1 : <html> 2 : <head>
 3 :   <title>:: PHP 프로그래밍 입문에 오신 것을 환영합니다~~ ::</title>  4 :  <link rel="stylesheet" href="../style.css" type="text/css">      5 :  </head>  6 :  <body leftmargin="0" topmargin="0" marginwidth="0"  7 :      marginheight="0">  9 :     <table width=776 align=center border=0 cellspacing=0  10 :                cellpadding=0>  11 :        <form name="writeform" action="insert.php" method="post">  12 :         <tr><td colspan="6" height=25>  13 :               <img src="img/freeboard_title.gif"> </td></tr>  15 :         <tr><td background="img/bbs_bg.gif">  16 :               <img border="0" src="img/blank.gif"  17 :                     width="1" height="3"></td></tr>

18 【예제 12-3】write_form.php 02 32 :     <table width="100%" border=0 cellspacing=0 cellpadding=0  33 :            class="txt">  34 :         <tr height=25>  35 :           <td align=right width=100>이름 </td>  36 :           <td align=left>  37 :             <input style='font-size:9pt;border:1px solid'  38 :                     type=text name="name"  39 :                     size=25 maxlength=16></td> </tr>  42 :         <tr height=25>  43 :           <td align=right>비밀번호 </td>  44 :           <td align=left>  45 :             <input style='font-size:9pt;border:1px solid'  46 :                     type="password" name="passwd" size=25  47 :                maxlength=16>  48 :           </td></tr>  51 :     </table>

19 【예제 12-3】write_form.php 02  62 :     <table width="100%" border=0 cellspacing=0 cellpadding=0  63 :            class="txt">  64 :         <tr>  65 :           <td height=25>  제목     66 :             <input style='font-size:9pt;border:1px solid'  67 :                     type='text‘ name="subject" size=50 maxlength=100>  68 :           </td>  69 :         </tr>  71 :         <tr valign=top>  72 :           <td align="center" >  73 :              <p align="left">  내용     74 :              <textarea style='font-size:9pt;border:1px solid'  75 :                         name="content" style=background-image:url  76 :                               ('img/bbs_text_line.gif');  77 :                       cols=74 rows=14 wrap=virtual></textarea>  78 :           </td> </tr>

20 【예제 12-3】write_form.php 02 80 : <tr height=20>
 81 :           <td></td>   </tr>  83 :         <tr height=1 bgcolor=#5AB2C8><td></td></tr>  84 :         <tr><td height=30 align=center valign=top bgcolor="FFFFFF">  86 :           <br>  88 :             <input type=image src="img/i_write.gif" align=absmiddle  89 :                  border=0>  <a href='list.php'>  90 :                       <img style='cursor:hand‘ src="img/i_list.gif"  91 :                            align=absmiddle border=0 ></a></td>  93 :         </tr> </table>  95 :           </td>  96 :         </tr>  97 :     </table>  98 :           </td> </tr>  100 :        </form>  101 :     </table>  102 :   </body> </html>

21 【예제 12-4】insert.php 02 작성 글 DB 저장 1 : <?
 1 : <?  2 :    /* 이전화면에서 이름이 입력되지 않았으면  3 :       "이름을 입력하세요" 메시지 출력*/  4 :    if(!$name) {  5 :      echo(" <script> window.alert('이름을 입력하세요.')  8 :        history.go(-1)  9 :       </script> ");  11 :    exit;  12 :    }  13 :     14 :    if(!$passwd) {  15 :      echo(" <script> window.alert('비밀번호를 입력하세요.')  18 :        history.go(-1)  19 :      </script> ");  21 :    exit;  22 :    }

22 【예제 12-4】insert.php 02 44 :    include "../dbconn.php";       // dconn.php 파일을 불러옴  46 :    $regist_day = date("Y-m-d (H:i)");   47 :    // 현재의 '년-월-일-시-분'을 저장  48 :    $ip = $REMOTE_ADDR;         // 방문자의 IP 주소를 저장 50 :  51 :    $sql = "insert into freeboard(name, passwd, subject,  52 :            content, regist_day, hit, ip) ";  53 :    $sql .= "values('$name', '$passwd', '$subject', '$content',  54 :                    '$regist_day', 0, '$ip')";       56 :     57 :    mysql_query($sql, $connect);  // $sql 에 저장된 명령 실행  58 :  59 :    mysql_close();                // DB 연결 끊기  60 :     61 :    Header("Location:list.php");  // list.php 로 이동합니다.  62 : ?>

23 【예제 12-5】view.php 02 작성 글 DB 저장 1 : <? 2 : session_start();
 1 : <?  2 :     session_start();  3 : ?>  5 : <html>  6 :  <head>  7 :   <title>:: PHP 프로그래밍 입문에 오신 것을 환영합니다. :: </title>  8 :   <link rel="stylesheet" href="../style.css" type="text/css">  9 :  </head>  10 :  <body leftmargin="0" topmargin="0" marginwidth="0“ marginheight="0">  12 :     <table width=776 border=0 cellspacing=0 cellpadding=0 align=center>  14 :         <tr><td colspan="6" height=25>  15 :              <img src="img/freeboard_title.gif"></td></tr>  16 :         <tr><td background="img/bbs_bg.gif">

24 【예제 12-5】view.php 02 17 : <img border="0" src="img/blank.gif"
 18 :                    width="1" height="3"></td></tr>  19 :         <tr><td height=10></td></tr>  21 :         <tr><td height=10></td></tr>  24 :         <tr height=1 bgcolor=#5AB2C8><td></td> </tr>  27 : <?  28 :    include "../dbconn.php";  29 :  30 :    $sql = "select * from freeboard where num=$num";  31 :    $result = mysql_query($sql, $connect);  32 :    $row = mysql_fetch_array($result);  33 :     34 :    $content = str_replace("\n", "<br>", $row[content]);  35 :    $content = str_replace(" ", " ", $content);  36 :    $subject = str_replace(" ", " ", $row[subject]);  37 : ?>

25 【예제 12-5】view.php 02 39 : <tr bgcolor="#D2EAF0" height=30>
 40 :           <td>  <b><? echo $subject ?></td> </tr>  42 :         <tr height=1 bgcolor=#5AB2C8>  43 :           <td></td> </tr>  45 :         <tr> <td>  47 :     <table width=100% border=0 cellspacing=10 cellpadding=0 class=txt>  48 :         <tr>  49 :           <td><b>글쓴이 : <? echo $row[name] ?></b>    50 :                           <? echo $row[regist_day] ?> </td>  52 :         <tr height=1 bgcolor=#5AB2C8> <td></td></tr>  53 :         <tr> <td><br> <? echo $content ?></td> </tr>  56 :     </table> </td> </tr>  59 :         <tr height=20>  60 :            <td align=right> <font size=-2>IP :  61 :                           <? echo $row[ip]; ?></font></td> </tr>

26 【예제 12-5】view.php 02 75 : <? 76 : if ($userid == "admin") 77 : {
 75 : <?  76 :    if ($userid == "admin")  77 :    {  78 :       echo "  79 :         <tr>  80 :           <td align=center>  81 :           <a href='modify_form.php?num=$num&page=$page'>  82 :                            <img src='img/i_edit.gif' border=0>&nbsp</a>  83 :           <a href='delete.php?num=$num&page=$page'>  84 :                            <img src='img/i_del.gif' border=0>&nbsp</a>  85 :           <a href='list.php?page=$page'>  86 :                            <img src='img/i_list.gif' border=0></a>  87 :           </td>  88 :         </tr>  89 :            ";  90 :    }

27 【예제 12-5】view.php 02 91 : else 92 : { 93 : echo "
 92 :    {  93 :       echo "  94 :         <tr><td align=center>  96 : <a href='passwd_form.php?case=modify&num=$num&page=$page'>  97 :                            <img src='img/i_edit.gif' border=0>&nbsp</a>  98 :    <a href='passwd_form.php?case=delete&num=$num&page=$page'>  99 :                            <img src='img/i_del.gif' border=0>&nbsp</a>  100 :           <a href='list.php?page=$page'>  101 :                            <img src='img/i_list.gif' border=0></a>  102 :           </td>  103 :         </tr>  104 :            ";  105 :    }  106 : ?>

28 【예제 12-5】view.php 02 108 : </td> 109 : </table>
 110 :  </body>  111 : </html>  112 : <?  113 :     $hit = $row[hit];  114 :  115 :     $hit++;  116 :  117 :     $sql = "update freeboard set hit=$hit where num=$row[num]";  118 :     mysql_query($sql, $connect);  119 :     mysql_close();  120 : ?>

29 【예제 12-6】passwd_form.php 02 자유게시판 글 수정/삭제를 위한 비밀번호 확인 35 : <?
 35 : <?  36 :    if ($case == "modify")  37 :    {  38 :       echo "<form name=pwform method=post  39 :                 action='modify_form.php?num=$num&page=$page'>";  40 :    }  41 :    else  42 :    {  43 :       echo "<form name=pwform method=post  44 :                 action='delete.php?num=$num&page=$page'>";  45 :    }  46 : ?>  나머지는 방명록의 passwd_form.php 와 동일

30 【예제 12-7】modify_form.php 02 글 내용 수정 양식 1 : <? 2 : session_start();
 1 : <?  2 :    session_start();  4 :    include "../dbconn.php";  5 :    $sql = "select * from freeboard where num=$num";  7 :    $result = mysql_query($sql, $connect);  8 :    $row = mysql_fetch_array($result);  9 :  10 :    if ($passwd != $row[passwd] and $userid != "admin")  11 :    {      echo "  13 :          <script>  14 :              alert('비밀번호가 틀립니다.')  15 :              history.go(-1)  16 :          </script>   ";  18 :       exit;     }  20 : ?>

31 【예제 12-7】modify_form.php 02 34 : <form name="modifyform"
 35 :          action="modify.php?num=<? echo $num; ?>&  36 :            page=<? echo $page; ?>" method="post"> <tr>  38 :            <td align=center colspan=2>  39 :     <table width=776 border=0 cellspacing=0 cellpadding=0  40 :            class="txt" bgcolor=#F7F7F2>  41 :         <tr height=1 bgcolor=#5AB2C8><td></td></tr>  42 :         <tr bgcolor="#D2EAF0" height=20>  43 :           <td width="100%">    44 :             <b>이름, 전자우편주소, 비밀번호</b></td> </tr>  46 :         <tr height=1 bgcolor=#5AB2C8><td></td></tr>  47 :         <tr> <td>  49 :     <table width="100%" border=0 cellspacing=0 cellpadding=0  50 :            class="txt">  51 :         <tr height=25>  52 :           <td align=right width=100>이름 </td>

32 【예제 12-7】modify_form.php 02 53 : <td align=left>
 54 :             <input style='font-size:9pt;border:1px solid' type=text  55 :                     name="name" value="<? echo $row[name] ?>"  56 :                     size=25 maxlength=16></td> </tr>  59 :         <tr height=25>  60 :           <td align=right>비밀번호 </td>  61 :           <td align=left><input style='font-size:9pt;border:1px solid'  62 :            type="password" name="passwd"  63 :           value="<? echo $row[passwd]; ?>" size=25 maxlength=16>  64 :           </td> </tr>  67 :     </table>  68 :           </td> </tr>  70 :         <tr height=1 bgcolor=#5AB2C8><td colspan=2></td></tr>  71 :         <tr bgcolor="#D2EAF0" height=20>  72 :  <td colspan=2>  <b>하고 싶은 말을 남기세요. </b></td> </tr>       

33 【예제 12-7】modify_form.php 02  74 :         <tr height=1 bgcolor=#5AB2C8><td colspan=5></td></tr>   75 :         <tr><td colspan=2>  77 :     <table width="100%" border=0 cellspacing=0  78 :                    cellpadding=0 class="txt">  79 :         <tr><td height=25>  제목     81 :            <input style='font-size:9pt;border:1px solid'  82 :                    type='text' name="subject"  83 :                   value="<? echo $row[subject]; ?>"  84 :                    size=50 maxlength=100></td> </tr>  86 :         <tr><td height=2>  </td> </tr>  88 :         <tr valign=top>  89 :           <td>  내용    90 :            <textarea style='font-size:9pt;border:1px solid'  91 :                       name="content" style=background-image:url  92 :                            ('img/bbs_text_line.gif');  93 :                       cols=74 rows=14 wrap=virtual>  94 :                       <? echo $row[content] ?> </textarea></td> </tr>

34 【예제 12-7】modify_form.php 02  97 :         <tr height=20> <td></td> </tr>  100 :         <tr height=1 bgcolor=#5AB2C8><td colspan=5></td></tr>  101 :         <tr><td height=30 align=center valign=top bgcolor="FFFFFF">  105 :           <input type=image src="img/i_write.gif"  106 :                 align=absmiddle border=0>   107 :                 <a href='list.php?page=<? echo $page ?>'>  108 :                 <img style='cursor:hand‘ src="img/i_list.gif"  109 :                      align=absmiddle border=0 ></a></td> </tr>  112 :     </table>  113 :           </td></tr>  115 :     </table>  116 :           </td> </tr>  118 :      </form>  119 :     </table>  120 :   </body>  121 : </html>

35 【예제 12-8】modify.php 02 글 내용 수정하기 1 : <?
 1 : <?  2 :    // 이전화면에서 이름이 입력되지 않았으면 "이름을 입력하세요"  4 :    if(!$name) { echo("  6 :       <script>  7 :         window.alert('이름을 입력하세요.')  8 :         history.go(-1)  9 :       </script> ");   exit;  12 :    }  13 :     14 :    if(!$passwd) { echo(" 16 : <script>  17 :        window.alert('비밀번호를 입력하세요.')  18 :        history.go(-1)  19 :      </script>   ");   exit;  22 :    }

36 【예제 12-8】modify.php 02 44 : include "../dbconn.php";
 46 :    $regist_day = date("Y-m-d (H:i)");  // 현재의 날짜 저장  47 :    $ip = $REMOTE_ADDR;         // 방문자의 IP 주소를 저장  49 :  50 :    $sql = "update freeboard set name='$name', subject='$subject', ";  51 :    $sql .= "content='$content', passwd='$passwd' where num=$num";  52 :     53 :    mysql_query($sql, $connect);  54 :    mysql_close();  55 :    // list.php 로 이동  56 :    Header("Location:list.php?num=$num&page=$page");   57 : ?>

37 【예제 12-9】delete.php 02 글 삭제하기 1 : <? 2 : session_start();
 1 : <?  2 :    session_start();  4 :    include "../dbconn.php";  5 :  6 :    $sql = "select passwd from freeboard where num=$num";  7 :    $result = mysql_query($sql, $connect);  8 :    $row = mysql_fetch_array($result); // 해당 레코드 가져옴  10 :    // $passwd : 사용자가 passwd_form.php 화면에서 입력한 값  11 :    // $row[passwd] : DB에 들어있는 값  12 :    if ($passwd != $row[passwd] and $userid != "admin")    13 :   // 관리자가 아니고 비밀번호가 틀리면  14 :    {  15 :       echo("  16 :            <script>  17 :              window.alert('비밀번호가 틀립니다.')

38 【예제 12-9】delete.php 02 18 : history.go(-1) 19 : </script>
 20 :           ");  21 :       exit;  22 :    }  23 :    else  24 :    {  25 :       $sql = "delete from freeboard where num = $num";  26 :       mysql_query($sql, $connect);  27 :       mysql_close();  28 :       Header("Location:list.php?page=$page");  29 :    }  30 : ?> 


Download ppt "12장 자유게시판 한빛미디어(주)."

Similar presentations


Ads by Google