Download presentation
Presentation is loading. Please wait.
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> </a> 83 : <a href='delete.php?num=$num&page=$page'> 84 : <img src='img/i_del.gif' border=0> </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> </a> 98 : <a href='passwd_form.php?case=delete&num=$num&page=$page'> 99 : <img src='img/i_del.gif' border=0> </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 : ?>
Similar presentations