Presentation is loading. Please wait.

Presentation is loading. Please wait.

14장 질의응답 한빛미디어(주).

Similar presentations


Presentation on theme: "14장 질의응답 한빛미디어(주)."— Presentation transcript:

1 14장 질의응답 한빛미디어(주)

2 학습 목표 질의응답 게시판의 동작 기능을 이해한다 질의응답 게시판의 DB 테이블 구조를 이해한다
답변글 처리 방법에 대하여 이해한다 답변글을 목록에 출력하는 방법을 익힌다 답변글 폼 양식의 사용법을 익힌다 답변글을 DB 테이블에 저장하는 법을 익힌다

3 주요 학습 내용 01. 질의 응답 파일목록 및 DB 테이블 02. 답변글 처리 방법 03. 목록 보기 04. 글쓰기
05. 글내용 보기

4 질의응답 미리 보기 01 공지사항 게시판에다 답변달기 기능 추가

5 질의응답 파일 목록 02 파일명 설명 qna_board.sql 질의응답 DB 테이블 생성 명령 qna_ripple.sql
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 질의응답 글쓰기 양식 [표 14-1] 질의응답 게시판에 사용되는 파일 목록

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

7 not null, auto_increment,
질의 응답 게시판 DB 테이블 04 필드 이름 타입 추가 사항 필드 설명 num int not null, auto_increment, primary key 일렬 번호 group_num not null 그룹 번호 ord 답변 글 순서 depth 답변 글 깊이 id varchar(10) 아이디 name 이름 subject varchar(100) 제목 content text 글 내용 regist_day varchar(20) 글 쓴 날짜 hit 조회수 ip 접속 IP [표 14-2] 질의응답의 게시판 DB 테이블 (테이블 명 : qna_board)

8 질의응답 게시판 DB 테이블 만들기 05 메모장으로 다음을 타이핑한 다음 “c:\mysql\bin” 폴더 밑에 “qna_board.sql”이름으로 저장    CREATE TABLE qna_board (        num int not null auto_increment,        group_num int not null,        ord int not null,        depth int not null,        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 < qna_board.sql

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

10 질의응답 리플 DB 테이블 만들기 07 메모장으로 다음을 타이핑한 다음 “c:\mysql\bin” 폴더 밑에 “qna_ripple.sql”이름으로 저장 CREATE TABLE qna_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 < qna_ripple.sql

11 [그림 14-2] qna_board 테이블의 group_num, depth, ord 필드 값
답변글 삽입 전 08 [그림 14-2] qna_board 테이블의 group_num, depth, ord 필드 값

12 [그림 14-3] “답변글 1-2-3“에 새로운 답변글 삽입
답변글 삽입 후 09 [그림 14-3] “답변글 1-2-3“에 새로운 답변글 삽입

13 【예제 14-1】list.php 02 질의응답 목록 보기 1 : <? 2 : session_start(); 3 :
 1 : <?  2 :    session_start();  3 :  4 :    $scale = 5;   // 한 화면에 표시되는 글 수  5 :  6 :    include "../dbconn.php";  7 :    $sql = "select * from qna_board order by group_num desc, ord asc";  8 :    $result = mysql_query($sql, $connect);  9 : ?>

14 【예제 14-1】list.php 02 73 : $space = ""; 74 :
 74 :  75 :       for ($j=0; $j<$row[depth]; $j++)  76 :           $space = "  ".$space;  77 :  78 :       // 레코드 화면에 출력하기  79 :       echo "  80 :         <tr height=25>  81 :           <td align=center>$number</td>  82 :           <td> $space  83 :            ";  84 :       if ($row[depth]>0)  85 :         echo "<img src='img/reply_head.gif' border=0>";  86 :       else  87 :         echo "<img src='img/record_id.gif' border=0>";

15 【예제 14-2】write_form.php 02 글쓰기 폼 양식 59 : <? 60 : if ($num) 61 : {
 59 : <?  60 :    if ($num)  61 :    {  62 :       include "../dbconn.php";  64 :       $sql = "select * from qna_board where num = $num";  65 :       $result = mysql_query($sql, $connect);  67 :       $row = mysql_fetch_array($result);  68 :  69 :       $subject = "[re]".$row[subject];  70 :       $content = ">".$row[content];  71 :       $content = str_replace("\n", "\n>", $content);  72 :       $content = "\n\n".$content;  73 :  74 :       mysql_close();  75 :    }  76 : ?>

16 【예제 14-3】insert.php 02 글쓴 내용의 DB 저장
39 :    if (!$num) // $num 이 0 이면 원글, 1이면 답변 글  40 :    {     41 :       $depth = 0;   // depth, ord 를 0으로 초기화  42 :       $ord = 0;  44 :       // 레코드 삽입(group_num 제외)  45 :       $sql = "insert into qna_board(depth, ord, id, name, subject,";  46 :       $sql .= "content, regist_day, hit, ip) ";  47 :       $sql .= "values($depth, $ord, '$userid', '$username', '$subject',";  48 :       $sql .= "'$content', '$regist_day', 0, '$ip')";     49 :       mysql_query($sql, $connect);  // $sql 에 저장된 명령 실행  51 :       // 최근 auto_increment 필드(num) 값 가져오기  52 :       $sql = "select last_insert_id()";  53 :       $result = mysql_query($sql, $connect);  54 :       $row = mysql_fetch_array($result);  55 :       $auto_num = $row[0];

17 【예제 14-3】insert.php 02 57 : // group_num 값 업데이트
 58 :       $sql = "update qna_board set group_num = $auto_num                      where num=$auto_num";  59 :       mysql_query($sql, $connect);  60 :    }  61 :     else  62 :    {  63 :       // 부모 글 가져오기  64 :       $sql = "select * from qna_board where num = $num";  65 :       $result = mysql_query($sql, $connect);  66 :       $row = mysql_fetch_array($result);  67 :  68 :       // 부모 글로 부터 group_num, depth, ord 값 설정  69 :       $group_num = $row[group_num];  70 :       $depth = $row[depth] + 1;  71 :       $ord = $row[ord] + 1;

18 【예제 14-3】insert.php 02   75 :       $sql = "update qna_board set ord = ord + 1 where                      group_num = $row[group_num]  76 :               and ord > $row[ord]";  77 :       mysql_query($sql, $connect);   79 :       // 레코드 삽입  80 :       $sql = "insert into qna_board(group_num, depth, ord, id,                      name, subject,";  81 :       $sql .= "content, regist_day, hit, ip) ";  82 :       $sql .= "values($group_num, $depth, $ord, '$userid',                            '$username', '$subject',";  83 :       $sql .= "'$content', '$regist_day', 0, '$ip')";     85 :       mysql_query($sql, $connect);  // $sql 에 저장된 명령 실행  87 :    }  88 :       mysql_close();                // DB 연결 끊기  89 :     90 :       Header("Location:list.php?page=$page");  // list.php 로 이동  91 : ?>

19 【예제 14-4】view.php 02 글내용 보기 142 : <? 143 : echo "
 144 :           <td align=center>  145 :             <a href='write_form.php?num=$num&page=$page'>  146 :                            <img src='img/i_answer.gif' border=0> </a>  147 :             <a href='modify_form.php?num=$num&page=$page'>  148 :                            <img src='img/i_edit.gif' border=0> </a>  149 :             <a href='delete.php?num=$num&page=$page'>  150 :             <img src='img/i_del.gif' border=0> </a>  151 :             <a href='list.php?page=$page'><img src='img/i_list.gif‘ border=0>  152 :    </a></td>  153 :     ";  154 : ?>  155 :         </tr>

20 【예제 14-1】list.php 02 질의응답 목록 보기


Download ppt "14장 질의응답 한빛미디어(주)."

Similar presentations


Ads by Google