웹마스터 팁

방명록 제작

학습목표

홈페이지에 방문한 방문객들이 글을 남길수 있는 방명록을 제작하여 봅시다.
목록보기, 글쓰기, 수정, 삭제등 일반적인 CGI 프로그램에서 필요한 기본적인 기능을 직접 구현하면서 CGI 프로그램을 제작하는 순서와 진행방법등을 익힐수 있습니다.

1 Step. 전체적인 구도를 정합시다.

방명록은 글을 쓰는 부분과 입력된 글을 보여주는 부분, 그리고 수정, 삭제하는 부분까지 총 4가지로 나누어 집니다.
또한 각각의 기능은 목록보여주기를 제외하고는 브라우저 상에서 보여주는 부분과 직접적으로 작업하는 부분으로 2가지씩 총 7개의 파일로 이루어집니다.
또 헤더, 푸터를 저장한 2개의 파일과 함수만 모은 파일, 그리고 MySQL DB에 연결하는 파일까지 총 11가지의 파일로 이루어집니다.

dbconn.php3  : MySQL DB에 연결하는 부분을 담고 있는 파일
lib.php3 : 각종 함수들을 모아놓은 파일
head.php3 :header 파일
foot.php3 :footer 파일
write.php3 :글쓰기 화면을 보여주는 파일
write_ok.php3 :쓰여진 글을 MySQL DB에 저장하는 파일
list.php3 : 목록을 보여주는 파일
delete.php3 : 글삭제시 비밀번호 입력을 보여주는 파일
delete_ok.php3 : 입력받은 비밀번호를 검사하여 글을 삭제하는 파일
modify.php3 : 글을 수정시 보여주는 파일
modify_ok.php3 :  수정된글의 비밀번호를 검사하여 글을 수정하는 파일

그리고 보너스로 테이블 자동생성 파일도 있습니다.. -_-;;;

make_table.php3 : $table_name 이라는 변수명에 저장된 테이블이 없으면 생성..


2 Step. 방명록의 글이 저장될 테이블의 스키마를 정의합시다.

MySQL DB 에 방명록의 글을 저장하기 위해서는 테이블을 생성해야 합니다.
그러기 위해서는 테이블의 스키마를 정의하는 일이 제일 중요한 부분입니다.
일반적인 방명록은 비밀번호, 글쓴이의 이름, 홈페이지 주소, 메일주소, 본문내용등 5개의 입력항목이 있습니다.
여기에 조금 더 추가하여 글쓴이의 IP주소와 글쓴 시간까지 7개의 필드로 정합시다.
제일 중요한 기본키까지 8개죠.

기본키 : no int(11) DEFAULT '0' NOT NULL auto_increment primary key
아이피주소 : ip varchar(15),
비밀번호 : password varchar(20),
글쓴이이름 : writer varchar(12),
홈페이지 : homepage varchar(80),
메일주소 : email varchar(80),
본    문 : comment text,
글쓴시간 : reg_date int(11)

3 Step. MySQL DB에 테이블을 생성합시다.

step 2에서 정의한 스키마를 직접적인 쿼리문으로 만들어 봅시다.

CREATE TABLE guestbook (
          no int(11) DEFAULT '0' NOT NULL auto_increment primary key,
          ip varchar(15),
          password varchar(20),
          writer varchar(12),
          homepage varchar(80),
          email varchar(80),
          comment text,
          reg_date int(11)
       )";

이정도까지 하면 기본적인 것은 설정이 되었습니다.
이제 실제로 해봐야죠.

이제 위의 쿼리를 MySQL DB에서 입력하게 되면 테이블이 생성이 되겠죠?
2가지 방법을 생각해봅시다.

i. 제일 간단하게 phpMyAdmin을 이용하는 방법.
  
  phpMyAdmin에서 자신의 테이블을 선택한후 Run SQL query/queries on database 라는 textarea박스 안에 위의 쿼리문을 복사한후에 Go 버튼을 누르면 쉽게 테이블이 생성이 됩니다.

ii. MySQL 콘솔에서 테이블을 생성하는 방법
   MySQL에서 지원하는 mysql 파일을 이용하여 직접 쿼리를 입력하는 방법입니다.
   윈도즈> c:mysqlbinmysql -u아이디 -p비밀번호
   리눅스> $ mysql -u아이다 -p비밀번호
   위와 같이 하게 되면

Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 298524 to server version: 3.22.32

Type 'help' for help.

mysql>

  위의 화면이 나옵니다.  
  이 상태에서 자신의 db를 선택합니다.

use db네임

이제 위에서 만든 쿼리를 복사해서 입력한후 엔터를 누르면 테이블이 생성이 됩니다.

4 Step. dbconn.php3 파일을 만들어봅시다.

dbconn.php3 파일은 MySQL DB에 연결하는 부분만을 담고 있는 파일입니다.
내용은 다음과 같습니다.

1  <?
2  $host_name="localhost";
3  $user_name="test";    
4  $db_name="test";      
5  $db_password="*******";  
6  $connect = mysql_connect($host_name, $user_name,$db_password) or die(mysql_error());
7  mysql_select_db($db_name, $connect ) or die(mysql_error());
8  ?>

내용설명
1. <? 는 php 문법을 시작한다는 표시입니다.
2. $host_name 에 MySQL DB의 주소를 입력합니다.
   같은 서버에 있으면 localhost를 입력하고 다른 원격서버라면 그 서버의 아이피주소를 입력하면 됩니다.
3. $user_name 변수에 MySQL에서 설정한 자신의 ID를 입력합니다.
4. $db_name 변수에 자신이 사용할 DB의 이름을 입력합니다.
5. $db_password 변수에 자신의 MySQL 비밀번호를 입력합니다.
6. mysql_connect() 함수를 이용하여 MySQL DB에 커넥트를 한후 그 결과값을 $connect 변수에 저장합니다.
7. mysql_select_db() 함수를 이용하여 자신의 DB를 지정합니다.
8. ?> php 문법을 끝낸다는 표시입니다.

위의 내용을 dbconn.php3 파일로 만듭니다.
그런후 다른 파일에서 include "dbconn.php3"; 로 사용하게 되면 자신의 DB 로 연결하게 됩니다.

5 Step. 방명록 제작시 꼭 필요한 함수들과 전역변수들을 따로 모은 lib.php3 파일을 만들어 봅시다.

lib.php3 파일에는 방명록 테이블의 이름을 $table_name라는 변수에 지정하고, $admin_password이라는 변수에 관리자 비밀번호를 지정해 놓습니다.

그리고 다음의 함수들을 만들었습니다.
function message ($message) : 에러나 경고 메시지 출력 함수
function del_html ($str) : HTML 태그를 일반 텍스트 문자로 치환하는 함수
function avoid_crack ($str) : 스크립트나 메타테그를 이용하여 방명록 출력화면을 깨는 태그를 일반 문자로 치환하는 함수
function isBlank ($str) : 비어 있는 문자열인지를 검사하는 함수. (스페이스바만 입력하였을시 빈문자열로 취급)
function isNum($str) : 숫자로만 이루어진 문자열인지를 검사하는 함수.

lib.php3 파일의 내용
1  <?
2  // 방명록의 데이타가 저장될 테이블 이름 정의
3  $table_name = "guestbook";
4  // 관리자 비밀번호 저장
5  $admin_password = "1234";
6  // 메세지 출력 함수입니다.
7  function message ($message)
8  {
9    echo "
10   <script>
11   window.alert ("$message");
12   history.go(-1);
13  
14   "; exit;
15 }
16
17 // HTML Tag를 제거하는 함수
18 function del_html ($str)
19 {
20   $str = str_replace( ">", ">",$str );
21   $str = str_replace( "<", "& lt;",$str );
22   $str = str_replace( """, """,$str );
23   return $str;
24 }
25 // 각종 HTML 태그를 이용한 테러방지
26 function avoid_crack($str)
27 {
28   $str = str_replace( "<script", "& lt;script",$str );
29   $str = str_replace( " 30   $str = str_replace( " 31   $str = str_replace( " 32   $str = str_replace( " 33   $str = str_replace( " 34   return $str;
35 }
36 // 빈 문자열인지 검사 (공백을 빼고 검사함), 빈 문자열이면 1을 리턴
37 function isBlank($str) {
38   if(eregi("[^[:space:]]",$str)) return 0;
39   return 1;
40 }
41 // 문자열내의 값이 숫자인지를 검사. 숫자이면 1을 리턴, 아니면 0을 리턴
42 function isNum($str) {
43   if(eregi("[^0-9]",$str)) return 0;
44   return 1;
45 }
46 // 숫자와 영문자(a에서 z까지 소문자와 대문자) 만 있을경우에 1을 리턴
47 ?>


우선 #1 끝~~

이해 안되면 될때까지 보면 되지 않을까여?.. 흐.. -_-;;

그럼 #2에서는 글쓰기를 해봅시다.. 휘리릭~