1 / 20

질의응답

14 장. 질의응답. 학습 목표. 질의응답 게시판의 동작 기능을 이해한다 질의응답 게시판의 DB 테이블 구조를 이해한다 답변글 처리 방법에 대하여 이해한다 답변글을 목록에 출력하는 방법을 익힌다 답변글 폼 양식의 사용법을 익힌다 답변글을 DB 테이블에 저장하는 법을 익힌다. 주요 학습 내용. 01. 질의 응답 파일목록 및 DB 테이블 02. 답변글 처리 방법 03. 목록 보기 04. 글쓰기 05. 글내용 보기. 질의응답 미리 보기. 01.

gyda
Download Presentation

질의응답

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

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

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

  7. 필드 이름 타입 추가 사항 필드 설명 num int not null, auto_increment, primary key 일렬 번호 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) 접속 IP 질의 응답 게시판 DB 테이블 04 [표 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. 필드 이름 타입 추가 사항 필드 설명 num int not null, auto_increment, primary key 일렬 번호 parent int not null 리플의 부모 글 id varchar(10) not null 아이디 name varchar(20) not null 이름 content text not null 리플 내용 regist_day varchar(20) 리플 단 날짜 ip varchar(20) 접속 IP 질의응답 리플 DB 테이블 06 [표 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. 답변글 삽입 전 08 [그림 14-2] qna_board 테이블의 group_num, depth, ord 필드 값

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

  13. 【예제 14-1】list.php 02 • 질의응답 목록 보기 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 : 75 :for ($j=0; $j<$row[depth]; $j++) 76 :$space = "&nbsp;&nbsp;".$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 :{ 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>&nbsp;</a> 147 : <a href='modify_form.php?num=$num&page=$page'> 148 : <img src='img/i_edit.gif' border=0>&nbsp;</a> 149 : <a href='delete.php?num=$num&page=$page'> 150 : <img src='img/i_del.gif' border=0>&nbsp;</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 • 질의응답 목록 보기

More Related