220 likes | 449 Views
11 장. 방명록. 학습 목표. 방명록 동작 기능을 이해한다 방명록 DB 테이블을 생성하는 법을 익힌다 방명록 메인 화면 소스를 이해한다 . 방명록 글을 DB 테이블에 저장하는 방법을 익힌다 . 방명록 글을 DB 테이블에서 삭제하는 방법을 익힌다. 주요 학습 내용. 01. 파일목록 및 DB 테이블 02. 방명록 메인 프로그램 03. 방명록 글 저장 04. 방명록 글 삭제. 방명록 기능. 01. ⑴ 로그인 여부와 상관없는 글 쓰기
E N D
11장 방명록 한빛미디어(주)
학습 목표 • 방명록 동작 기능을 이해한다 • 방명록 DB 테이블을 생성하는 법을 익힌다 • 방명록 메인 화면 소스를 이해한다. • 방명록 글을 DB 테이블에 저장하는 방법을 익힌다. • 방명록 글을 DB 테이블에서 삭제하는 방법을 익힌다.
주요 학습 내용 01. 파일목록 및 DB 테이블 02. 방명록 메인 프로그램 03. 방명록 글 저장 04. 방명록 글 삭제
방명록 기능 01 ⑴ 로그인 여부와 상관없는 글 쓰기 ⑵ 글쓴이, 글쓴 날짜, 글 내용, 접속 IP 등의 방명록 글 출력 ⑶ 글 삭제 시 비밀번호 확인 ⑷ 목록보기 아래에 링크 페이지 번호 표시
방명록 미리보기 02
파일명 설명 guestbook.sql 방명록 DB 테이블 생성 명령 guestbook.php 방명록 메인 화면 insert.php 방명록 글을 DB에 저장 passwd_form.php 글 삭제 시 사용되는 비밀번호 확인 양식 delete.php 방명록 글을 DB에서 삭제 방명록 파일 목록 03 [표 11-1] 방명록에 사용되는 파일 목록
방명록 프로그램 설치 04 ⑴ 작업 폴더(“www" 폴더) 밑에 “guestbook" 폴더를 만들고 생성된 “guestbook" 폴더 밑에 교재 뒤 CD의 “www\guestbook" 폴더에 있는 파일들과 "img" 디렉토리를 통째로 복사한다. ⑵ 방명록 DB 테이블을 생성한다.
필드 이름 타입 추가 사항 필드 설명 num int not null, auto_increment, primary key 일렬 번호 name varchar(10) not null 이름 passwd varchar(10) not null 비밀 번호 content text not null 글 내용 egist_day varchar(20) 글 쓴 날짜 ip varchar(20) 접속 IP 방명록 DB 테이블 05 [표 11-2] 방명록 DB 테이블(테이블 명 : guestbook)
방명록 DB 테이블 만들기 06 • 메모장으로 다음을 타이핑한 다음 “c:\mysql\bin”폴더 밑에 “guestbook.sql”이름으로 저장 create table guestbook ( num int not null auto_increment, name varchar(10) not null, passwd 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 < guestbook.sql
【예제 11-1】guestbook.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“ marginheight="0"> 7 : <table border=0 cellspacing=0 cellpdding=0 width='776' align='center'> 8 : <tr> 9 : <td colspan="5" height=25> 10 : <img src="img/guestbook_title.gif"></td> 11 : </tr> 12 : <tr> 13 : <td background="img/bbs_bg.gif">
【예제 11-1】guestbook.php 02 14 :<img border="0" src="img/blank.gif" width="1" height="3"></td> 15 : </tr> 16 : </table> 17 : <tr><td background="img/bbs_bg.gif"> 19 : <img border="0" src="img/blank.gif" width="1" height="1"></td> 20 : </tr> 21 : <table border=0 cellspacing=0 cellpdding=0 width='776‘ align='center'> 22 :<form action="insert.php"> 23 : <tr><td>이름: <input type=text 24 : style='font-size:9pt;border:1px solid' name=name size=10> 25 : 비밀번호: 26 : <input type=password style='font-size:9pt;border:1px solid' 27 :name=passwd size=10></td></tr> 28 : <tr height=5><td> </td></tr> 29 : <tr><td><textarea style='font-size:9pt;border:1px solid' 30 :name="content” style=background-image:url
【예제 11-1】guestbook.php 02 31 : ('img/bbs_text_line.gif'); cols=125 rows=5 32 : wrap=virtual></textarea></td></tr> 33 : <tr height=5><td> </td></tr> 34 : <tr><td align=right><input type=imagesrc=img/regist.gif> </td></tr> 35 : </form> 36 : </table> 37 : <table width=776 border=0 cellspacing=0 cellpadding=0 align=center> 38 : <tr height=5><td colspan=2> </td></tr> 39 : <tr height=1 bgcolor=#5AB2C8><td colspan=2></td></tr> 40 : <? 41 :$scale = 5;// 한 화면에 표시되는 글 수 43 :include "../dbconn.php"; 44 : 45 :$sql = "select * from guestbook order by num desc"; 46 :$result = mysql_query($sql, $connect);
【예제 11-1】guestbook.php 02 48 :$total_record = mysql_num_rows($result);// 전체 글 수 50 :// 전체 페이지 수($total_page) 계산 51 :if ($total_record % $scale == 0) 52 :$total_page = floor($total_record/$scale); 53 :else 54 :$total_page = floor($total_record/$scale) + 1; 55 : 56 :if (!$page)// 페이지번호($page)가 0 일 때 57 :$page = 1;// 페이지 번호를 1로 초기화 58 : 59 :// 표시할 페이지($page)에 따라 $start 계산 60 :$start = ($page - 1) * $scale; 62 :for ($i=$start; $i<$start+$scale && $i < $total_record; $i++) 63 :{ 64 :mysql_data_seek($result, $i);// 레코드 포인터 이동 65 :$row = mysql_fetch_array($result);// 레코드 가져오기
【예제 11-1】guestbook.php 02 67 :$content = str_replace("\n", "<br>", $row[content]); 68 :$day = $row[regist_day]; 70 : echo " <tr height=25><td> $row[num] $row[name] 72 : $day </td> 73 : <td align=left><a href='passwd_form.php?num=$row[num]'> 74 :삭제</a></td></tr> 75 : <tr height=1 bgcolor=#5AB2C8><td colspan=2></td></tr> 76 : <tr><td colspan=2> </td></tr> 77 : <tr><td colspan=2>$content<br> 78 : </td></tr> 79 : <tr><td colspan=2 align=right>IP address : $row[ip]</td></tr> 80 : <tr height=1 bgcolor=#5AB2C8><td colspan=2></td></tr> "; 82 :} 83 : ?> 84 : <tr><td colspan=2> </td></tr> 85 : <tr><td colspan=2 align=center>
【예제 11-1】guestbook.php 02 86 : <? 87 :// 게시판 목록 하단에 페이지 링크 번호 출력 88 :for ($i=1; $i<=$total_page; $i++) 89 :{ 90 :if ($page == $i) 91 :{ 92 : echo " <font color='4C5317'><b>[$i]</b></font> "; 95 :} 96 :else 97 :{ 98 : echo " <a href='guestbook.php?page=$i'> 100 : <font color='4C5317'>[$i]</font></a> "; 102 :} 103 :} 104 : ?>
【예제 11-2】insert.php 02 • 방명록 글 저장 1 : <? 2 :if(!$name) {echo(" <script> 5 : window.alert('이름을 입력하세요.') 6 : history.go(-1) 7 : </script> "); 9 : exit; 10 : }· 11 : 12 :if(!$passwd) { 13 :echo(" <script> 15 : window.alert('비밀번호를 입력하세요.') 16 : history.go(-1) 17 : </script> "); 19 : exit; 20 :}
【예제 11-2】insert.php 02 31 :// 현재의 '년-월-일-시-분'을 저장 32 :$regist_day = date("Y-m-d (H:i)"); 33 :// 방문자의 IP 주소를 저장 34 :$ip = $REMOTE_ADDR; 37 :include "../dbconn.php"; 38 : 39 :$sql = "insert into guestbook(name, passwd, content, regist_day, ip) "; 40 :$sql .= "values('$name', '$passwd', '$content', '$regist_day', '$ip')"; 41 : 42 :mysql_query($sql, $connect); 43 : 44 :mysql_close(); 45 : 46 :Header("Location:guestbook.php");// guestbook.php 로 이동 47 : ?>
【예제 11-3】passwd_form.php 02 • 비밀번호 입력 확인 19 : <script language=javascript> 20 : function go() { 21 : if (document.pwform.passwd.value == "") { 22 : alert("비밀번호를 입력해 주세요."); 23 : return false; 24 : } 25 :document.pwform.submit(); 26 :} 27 : 28 : function clean() { 29 :document.pwform.passwd.value = ""; 30 : } 31 : </script>
【예제 11-3】passwd_form.php 02 35 :<form name=pwform method=post 36 :action='delete.php?num=<? echo $num ?>'> 37 : <table cellpadding="0" cellspacing="0" border="0" width="306"> 38 : <tr height=1 bgcolor="#292E5F"> 39 : <td></td> </tr> 41 : <tr height=18> 42 : <td bgcolor="#CEE3F7"><img src="img/bbs_check.gif" > 43 :<font color=003366><b>비밀번호를 입력하세요!</b></font> 44 : </td> </tr> 46 : <tr height=1 bgcolor="#292E5F"> 47 : <td></td> </tr> 49 : <tr height=20 bgcolor="#f7f7f2"> 50 : <td></td> </tr> <tr> 53 : <td valign="top" align="center"> 54 : <table cellpadding="0" cellspacing="5" border="0“ width="100%" 55 : bgcolor="#f7f7f2">
【예제 11-3】passwd_form.php 02 56 : <tr> <td width="80" align="right"> 58 : <font size="-1" face="돋움"> 비밀번호 </font> 59 : </td> 60 : <td width="170"> 61 : <input class=c1 type="password"name="passwd" size="15" 62 : maxlength="10"> 63 : </td> </tr> 65 : <tr> <td colspan=2 align=center> 67 : <img src="img/button_ok.gif" align=absmiddle class=hand 68 : onclick="go()"> 69 :<img src="img/button_rewrite.gif" align=absmiddle class=hand 70 : onclick="clean()"> 71 : <img src="img/button_close.gif" align=absmiddle 72 : class=hand onclick="javascript:history.back()"> </tr> 74 : </tr> </table> 76 : </td> 85 : </form>
【예제 11-4】delete.php 02 • 방명록 글 삭제 1 : <? 2 :include "../dbconn.php"; 4 : 5 :$sql = "select passwd from guestbook where num=$num"; 6 : $result = mysql_query($sql, $connect); 7 :$row = mysql_fetch_array($result); 8 : 9 :if ($passwd == $row[passwd]) 10 : { 11 :$sql = "delete from guestbook where num = $num"; 12 :mysql_query($sql, $connect); 13 :Header("Location:guestbook.php?page=$page"); 14 : }
【예제 11-4】delete.php 02 15 :else 16 :{ 17 :echo(" 18 : <script> 19 : window.alert('비밀번호가 틀립니다.') 20 : history.go(-1) 21 : </script> 22 : "); 23 : exit; 24 :} 25 : 26 :mysql_close(); 27 : ?>