11장 방명록 한빛미디어(주)
학습 목표 방명록 동작 기능을 이해한다 방명록 DB 테이블을 생성하는 법을 익힌다 방명록 메인 화면 소스를 이해한다.
주요 학습 내용 01. 파일목록 및 DB 테이블 02. 방명록 메인 프로그램 03. 방명록 글 저장 04. 방명록 글 삭제
방명록 기능 01 ⑴ 로그인 여부와 상관없는 글 쓰기 ⑵ 글쓴이, 글쓴 날짜, 글 내용, 접속 IP 등의 방명록 글 출력 ⑶ 글 삭제 시 비밀번호 확인 ⑷ 목록보기 아래에 링크 페이지 번호 표시
방명록 미리보기 02
방명록 파일 목록 03 파일명 설명 guestbook.sql 방명록 DB 테이블 생성 명령 guestbook.php 방명록 메인 화면 insert.php 방명록 글을 DB에 저장 passwd_form.php 글 삭제 시 사용되는 비밀번호 확인 양식 delete.php 방명록 글을 DB에서 삭제 [표 11-1] 방명록에 사용되는 파일 목록
방명록 프로그램 설치 04 ⑴ 작업 폴더(“www" 폴더) 밑에 “guestbook" 폴더를 만들고 생성된 “guestbook" 폴더 밑에 교재 뒤 CD의 “www\guestbook" 폴더에 있는 파일들과 "img" 디렉토리를 통째로 복사한다. ⑵ 방명록 DB 테이블을 생성한다.
not null, auto_increment, 방명록 DB 테이블 05 필드 이름 타입 추가 사항 필드 설명 num int not null, auto_increment, primary key 일렬 번호 name varchar(10) not null 이름 passwd 비밀 번호 content text 글 내용 egist_day varchar(20) 글 쓴 날짜 ip 접속 IP [표 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=image src=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 : // 게시판 목록 하단에 페이지 링크 번호 출력 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 : <? 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 : // 현재의 '년-월-일-시-분'을 저장 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(" 16 : { 17 : echo(" 18 : <script> 19 : window.alert('비밀번호가 틀립니다.') 20 : history.go(-1) 21 : </script> 22 : "); 23 : exit; 24 : } 25 : 26 : mysql_close(); 27 : ?>