Transcript 방명록

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