Presentation is loading. Please wait.

Presentation is loading. Please wait.

13장 공지사항 한빛미디어(주).

Similar presentations


Presentation on theme: "13장 공지사항 한빛미디어(주)."— Presentation transcript:

1 13장 공지사항 한빛미디어(주)

2 학습 목표 공지사항 게시판의 동작 기능을 이해한다 공지사항의 게시판 DB 테이블과 리플 DB 테이블의 구조를 이해한다
관리자만이 글쓰기, 글 삭제, 글 수정을 할 수 있는 방법을 익힌다. 리플을 DB 테이블에 저장하는 방법을 익힌다 리플을 DB 테이블에서 삭제하는 방법을 익힌다 리플을 화면에 출력하는 방법을 익힌다

3 주요 학습 내용 01. 공지사항 파일목록 및 DB 테이블 02. 목록 보기 03. 글쓰기 04. 글 내용 보기
05. 글 수정 및 삭제 06. 리플 글 삽입 및 삭제

4 공지사항 주요 기능 01 ⑴ 관리자(아이디:"admin") 로그인 상태에서만 공지사항 글쓰기/수정/삭제 가능
⑵ 관리자가 아닌 경우에는 화면에 글쓰기/수정/삭제 버튼 표시 안함 ⑶ 로그인된 회원들만이 공지사항 글에 리플 달기 가능 ⑷ 글 목록보기 화면의 제목에 리플 개수 표시

5 공지사항 미리 보기 02 글쓰기는 “admin” 아이디를 만들어서 로그인 해야 가능함.

6 공지사항 파일 목록 03 파일명 설명 notice_board.sql 공지사항 DB 테이블 생성 명령
notice_ripple.sql 리플 저장을 위한 DB 테이블 생성 명령 list.php 공지사항 목록 보기 insert.php 공지사항 글을 DB에 저장 insert_ripple.php 리플을 DB에 저장 delete.php 게시판 글을 DB에서 삭제 delete_ripple.php 리플을 DB에서 삭제 modify_form.php 공지사항 글 수정 양식 modify.php 공지사항 글을 DB에서 수정 search.php 특정 문자열로 검색된 게시판 글 목록 view.php 글 내용 보기 write_form.php 공지사항 글쓰기 양식 [표 13-1] 공지사항 게시판에 사용되는 파일 목록

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

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

9 자유게시판 DB 테이블 만들기 06 메모장으로 다음을 타이핑한 다음 “c:\mysql\bin” 폴더 밑에 “notice_board.sql”이름으로 저장  CREATE TABLE notice_board (        num int not null auto_increment,        id varchar(10) not null,        name varchar(10) 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 < notice_board.sql

10 not null, auto_increment,
공지사항 리플 DB 테이블 07 필드 이름 타입 추가 사항 필드 설명 num int not null, auto_increment, primary key 일렬 번호 parent not null 리플의 부모 글 id varchar(10) 아이디 name varchar(20) 이름 content text 리플 내용 regist_day 리플 단 날짜 ip 접속 IP [표 13-3] 리플 DB 테이블 (테이블 명 : notice_ripple)

11 공지사항 리플 DB 테이블 만들기 08 메모장으로 다음을 타이핑한 다음 “c:\mysql\bin” 폴더 밑에 “notice_ripple.sql”이름으로 저장  CREATE TABLE notice_ripple (        num int not null auto_increment,        parent int not null,        id varchar(10) not null,        name varchar(10) not null,        content text not null,        regist_day varchar(20),        ip varchar(20),        PRIMARY KEY (num)  ); 명령 프롬프트에서 다음을 실행  C:\mysql\bin> mysql -uphp5 -p1234 php5_db < notice_ripple.sql

12 【예제 13-1】list.php 02 공지사항 목록 보기 59 : $start = ($page - 1) * $scale;
 61 :    $number = $total_record - $start;  63 :   for ($i=$start; $i<$start+$scale && $i < $total_record; $i++)    64 :    {  65 :       mysql_data_seek($result, $i);   // 가져올 레코드로 포인터 이동   66 :       $row = mysql_fetch_array($result);       // 하나의 레코드 가져오기  68 :       $day = substr($row[regist_day], 0, 10);  69 :  70 :       $sql = "select * from notice_ripple where parent = '$row[num]'";  72 :       $result2 = mysql_query($sql, $connect);  73 :       $num_ripple = mysql_num_rows($result2);  75 :       echo " <tr height=25>  77 :           <td align=center>$number</td>  78 :           <td><img src='img/record_id.gif' border=0>  79 :    <a href='view.php?num=$row[num]&page=$page'>$row[subject]  80 :            ";

13 【예제 13-1】list.php 02  81 :       if ($num_ripple) echo " <font color=blue>[$num_ripple]</font>";  82 :       echo "  83 :             </a></td>  84 :           <td align=center>$day</td>  85 :           <td align=center>$row[hit]</td>  86 :           <td align=center>$row[name] </td>  87 :         </tr>  88 :         <tr bgcolor='#CCCCCC' height=1>  89 :           <td colspan='5'></td>  90 :         </tr>  91 :            ";  92 :    $number--;  93 :    }

14 substr( ) 함수 09 <? $str1 = substr ("abcdef", 1); // "bcdef" 을 반환한다.
string substr ( string string, int start [, int length])  <?        $str1 = substr ("abcdef", 1);    // "bcdef" 을 반환한다.        $str2 = substr ("abcdef", 2, 3); // "cde" 을 반환한다.        /* 만약 start가 음수라면, 반환되는 문자열은 string의 끝에서부터           start 번째 부터 시작하는 문자열이 된다. */        $str3 = substr ("abcdef", -1); // "f" 를 반환        $str4 = substr ("abcdef", -4); // "cdef" 를 반환        $str5 = substr ("abcdef", -3, 1); // "d" 를 반환        echo $str1." ".$str2." ".$str3." ".$str4." ".$str5."<br>";   ?>

15 【예제 13-2】write_form.php 02 글쓰기 폼 양식 1 : <? 2 : session_start();
 1 : <?  2 :    session_start();  4 :    if ($userid != "admin")  5 :    {   echo("  7 :            <script>  8 :              window.alert('관리자만 글을 쓸 수 있습니다.')  9 :              history.go(-1)  10 :            </script>  11 :          ");           exit;  13 :    }  14 :    else  15 :    {  16 : ?>  17 : <html>  18 :  <head>

16 【예제 13-2】write_form.php 02  39 :     <table width='100%' border=0 cellspacing=0 cellpadding=0 class='txt'>  40 :         <tr height=25>  41 :           <td align=right width=100>이름 </td>  42 :           <td align=left> : <? echo $username ?> </td> </tr>  44 :      </table> </td> </tr>  47 :         <tr height=1 bgcolor=#5AB2C8><td colspan=2></td></tr>  48 :         <tr bgcolor='#D2EAF0' height=20>  49 :           <td colspan=2>  <b>하고 싶은 말을 남기세요.</b></td> </tr>         51 :         <tr height=1 bgcolor=#5AB2C8><td colspan=5></td></tr>   52 :         <tr><td colspan=2>  54 :     <table width='100%' border=0 cellspacing=0 cellpadding=0  55 :         <tr> <td height=25>  제목     57 :              <input style='font-size:9pt;border:1px solid' type='text'  58 :                      name='subject' size=50 maxlength=100></td>

17 【예제 13-2】write_form.php 02 // 중간 생략
 71 :         <tr height=1 bgcolor=#5AB2C8><td></td></tr>  72 :         <tr>  73 :           <td height=30 align=center valign=top bgcolor='FFFFFF'><br>  75 :            <input type=image src='img/i_write.gif' align=absmiddle border=0>  76 :                <a href='list.php'><img style='cursor:hand'  77 :                 src='img/i_list.gif' align=absmiddle border=0 ></a></td>  78 :         </tr></table> </td> </tr>  82 :     </table> </td> <tr>  85 :        </form>  86 :     </table>  87 :   </body>  88 : </html>  89 :  90 : <?  91 :     }  92 : ?>

18 【예제 13-3】insert.php 02 글 쓴 내용 DB 저장 1 : <? 2 : session_start();
 1 : <?  2 :    session_start();   // 중간 생략  24 :    include "../dbconn.php";       // dconn.php 파일을 불러옴 26 :    $regist_day = date("Y-m-d (H:i)");  // 현재의 날짜를 저장  27 :    $ip = $REMOTE_ADDR;         // 방문자의 IP 주소를 저장  28 :  29 :    // 레코드 삽입 명령  30 :    $sql = "insert into notice_board(id, name, subject, content, regist_day, hit, ip) ";  31 :    $sql .= "values('$userid', '$username', '$subject', '$content', '$regist_day',  0, '$ip')";     33 :    mysql_query($sql, $connect);  // $sql 에 저장된 명령 실행  35 :    mysql_close();                // DB 연결 끊기  37 :    Header("Location:list.php");  // list.php 로 이동  38 : ?>

19 【예제 13-4】view.php 02 글내용 보기 1 : <? 2 : session_start(); 3 : ?>
 1 : <?  2 :     session_start();  3 : ?>  4 : <html>  5 : <head>  6 : <title>:: PHP 프로그래밍 입문에 오신 것을 환영합니다~~ :: </title>  7 : <link rel="stylesheet" href="../style.css" type="text/css">  8 : </head>  9 :   <body leftmargin="0" topmargin="0" marginwidth="0“ marginheight="0"> // 중간 생략  21 :    <tr height=1 bgcolor=#5AB2C8><td></td></tr>  23 : <?  24 :    include "../dbconn.php";  26 :    $sql = "select * from notice_board where num=$num";  28 :    $result = mysql_query($sql, $connect);

20 【예제 13-4】view.php 02 29 : $row = mysql_fetch_array($result); 30 :
 30 :    31 :    $day = substr($row[regist_day], 0, 10);  32 :   33 :    $content = str_replace("\n", "<br>", $row[content]);  34 :    $content = str_replace(" ", " ", $content);  35 :    $subject = str_replace(" ", " ", $row[subject]);  36 :  37 :    $hit = $row[hit];  38 :    $hit++;  39 :  40 :    $sql = "update notice_board set hit=$hit where num=$num";  41 :    mysql_query($sql, $connect);  42 : ?>  44 :      <tr bgcolor="#D2EAF0" height=35>  45 :      <td>  nbsp;<b><? echo $subject ?></td> </tr>

21 【예제 13-4】view.php 02  69 :         <tr height=1 bgcolor=#5AB2C8><td></td></tr>  70 :         <tr> <td>  72 : <?  73 :     $sql = "select * from notice_ripple where parent=$num                       order by num desc";  74 :     $result = mysql_query($sql, $connect);  75 :     $num_ripple = mysql_num_rows($result);  77 :     if($num_ripple)  78 :     {  79 :         while ( $row = mysql_fetch_array($result) )  80 :         {  81 :            $ripple_day = $row[regist_day];  82 :            $ripple_day = substr($ripple_day, 5, 5);  83 :  84 :            $ripple_content = str_replace("\n", "<br>", $row[content]);  85 :            $ripple_content = str_replace(" ", " ", $ripple_content);  86 :            $ripple_ip = $row[ip];

22 【예제 13-4】view.php 02 87 : $ripple_num = $row[num];
 88 :            $ripple_id = $row[id];  89 :            $ripple_name = $row[name];  91 :      echo " <table width=100% cellpadding=0>  93 :         <tr height=20>  94 :           <td width=10% align=center> $ripple_name  </td>  95 :           <td width=80%% align=left> $ripple_content</td>  96 :           <td width=10% align=left> $ripple_day  ";  98 :         if ($userid == $ripple_id or $userid=="admin")  99 :        { echo " <a href='delete_ripple.php?num=$num& ripple_num= $ripple_num'>D ";  103 :        }  104 :          echo " </td> </tr> <tr height=1 bgcolor=#5AB2C8>  108 :           <td colspan=3></td> </tr> </table> ";  112 :        }  113 :    }   115 :     mysql_close();  116 : ?>

23 【예제 13-4】view.php 02 122 : <? 123 : echo "
 122 : <?  123 :       echo "  124 :        <form method=post action='insert_ripple.php?num=$num'>  125 :         <table align=center border=0 cellspacing=0 cellpadding=0 width=766>  126 :  <tr><td colspan=2>  이름  : $username                         </td></tr>  127 :           <tr height=5><td colspan=2> </td></tr>  128 :        <tr><td><textarea style='font-size:9pt;border:1px solid‘ name='content'  129 :          style=background-image:url('img/bbs_text_line.gif'); cols=110 rows=4 wrap=virtual></textarea></td>  131 :          <td align=right><input type=image src='img/regist.gif'></td>  132 :           </tr> </table>  136 :       </form>  137 :           ";  138 : ?>

24 【예제 13-4】view.php 02 145 : <td align=center> 146 : <?
 146 : <?  147 :   if ($userid == "admin")  148 :   { echo "  150 :           <a href='modify_form.php?num=$num&page=$page'>  151 :                            <img src='img/i_edit.gif' border=0> </a>  152 :           <a href='delete.php?num=$num&page=$page'>  153 :                            <img src='img/i_del.gif' border=0> </a>  154 :            ";  155 :   }  156 : ?>  157 :          <a href="list.php?page=<? echo $page ?>">                   <img src='img/i_list.gif' border=0>  158 :           </a></td> </tr>  160 :     </table>  161 :   </body>  162 : </html>

25 【예제 13-5】modify_form.php 02 글 수정 폼 양식 1 : <? 2 : session_start();
 1 : <?  2 :    session_start();  4 :    if ($userid != "admin")  5 :    { echo("  7 :            <script>  8 :              window.alert('관리자만 수정할 수 있습니다.')  9 :              history.go(-1)  10 :            </script>  11 :          ");          exit;  13 :    }  14 :    else  15 :    {  17 :       include "../dbconn.php";  18 :       $sql = "select * from notice_board where num=$num";  19 :       $result = mysql_query($sql, $connect);

26 【예제 13-5】modify_form.php 02 21 : $row = mysql_fetch_array($result);
 23 :       $subject = $row[subject];  24 :       $content = $row[content];  25 : ?>  26 : <html>  27 :  <head>  28 :   <title>:: PHP 프로그래밍 입문에 오신 것을 환영합니다~~ ::</title>  29 :  <link rel='stylesheet' href='../style.css' type='text/css'>      30 :  </head>  31 :  <body leftmargin='0' topmargin='0' marginwidth='0‘ marginheight='0'>  32 :  33 :     <table border=0 cellspacing=0 cellpdding=0 width='776‘ align='center'>  34 :   <form name='writeform‘ action='modify.php?num=<? echo $num ?>  35 :        &page=<? echo $page ?>‘ method='post'>

27 【예제 13-5】modify_form.php 02 54 : <tr height=25>
 55 :           <td align=right width=100>이름 </td>  56 :           <td align=left> : <? echo $username ?> </td></tr></table>  59 :           </td>  60 :         </tr>  61 :         <tr height=1 bgcolor=#5AB2C8><td colspan=2></td></tr>  62 :         <tr bgcolor='#D2EAF0' height=20>  63 :  <td colspan=2> <b>하고 싶은 말을 남기세요.</b> </td></tr>         65 :         <tr height=1 bgcolor=#5AB2C8><td colspan=5></td></tr>   69 :         <tr>  70 :           <td height=25>  제목     71 :              <input style='font-size:9pt;border:1px solid' type='text'  72 :                      name='subject' size=50 maxlength=100  73 :                     value='<? echo $subject ?>'></td>  74 :         </tr> // 이하 생략

28 【예제 13-6】modify.php 02 글 수정 DB 업데이트 1 : <? 2 : session_start();
 1 : <?  2 :    session_start();  4 :    if ($userid=="admin")  5 :    { // 중간 생략  26 :       include "../dbconn.php";  28 :       $regist_day = date("Y-m-d (H:i)");  // 현재의 날짜 저장  29 :       $ip = $REMOTE_ADDR;         // 방문자의 IP 주소를 저장  31 :  32 :       $sql = "update notice_board set subject='$subject', ";  33 :       $sql .= "content='$content' where num=$num";  35 :       mysql_query($sql, $connect);  36 :       mysql_close();  37 : } 39 :       Header("Location:list.php?num=$num&page=$page");   40 : ?>

29 【예제 13-7】delete.php 02 글 삭제 1 : <? 2 : session_start(); 3 :
 1 : <?  2 :    session_start();  3 :  4 :    if ($userid == "admin")   5 :    {  6 :       include "../dbconn.php";  7 :  8 :       $sql = "delete from notice_board where num = $num";  9 :       mysql_query($sql, $connect);  10 :       mysql_close();  11 :    }  12 :  13 :    Header("Location:list.php?page=$page");  14 : ?> 세션변수

30 【예제 13-8】insert_ripple.php
02 리플 글 삽입 1 : <?  2 :    session_start();  4 :    if(!$userid) {  5 :      echo("  6 :       <script>  7 :         window.alert('회원가입 후 이용하세요.')  8 :         history.go(-1)  9 :       </script>  10 :    ");  11 :    exit;  12 :    } 13 : 24 :    include "../dbconn.php";        26 :    $id = $userid;  27 :    $name = $username; 세션변수

31 【예제 13-8】insert_ripple.php
02 29 :    $regist_day = date("Y-m-d (H:i)");  // 현재의 날짜 저장  30 :    $ip = $REMOTE_ADDR;         // 방문자의 IP 주소를 저장  31 :  32 :    // 레코드 삽입 명령  33 :    $sql = "insert into notice_ripple(parent, id, name, content, regist_day, ip) ";  34 :    $sql .= "values('$num', '$id', '$name', '$content', '$regist_day', '$ip')";     35 :     36 :    mysql_query($sql, $connect);  // $sql 에 저장된 명령 실행  37 :  38 :    mysql_close();                // DB 연결 끊기  39 :     40 :    Header("Location:view.php?num=$num");  // view.php 로 이동  41 : ?>

32 【예제 13-9】delete_ripple.php
02 리플 글 삭제  1 : <?  2 :       include "../dbconn.php";  3 :  4 :       $sql = "delete from notice_ripple where num = $ripple_num";  5 :       mysql_query($sql, $connect);  6 :       Header("Location:view.php?num=$num");  7 :       mysql_close();  8 : ?>


Download ppt "13장 공지사항 한빛미디어(주)."

Similar presentations


Ads by Google