웹마스터 팁
교육용 방명록 #1 [전체구성 설정, 테이블 생성, 기본함수 정의]
2000.07.03 02:48
홈페이지에 방문한 방문객들이 글을 남길수 있는 방명록을 제작하여 봅시다.
목록보기, 글쓰기, 수정, 삭제등 일반적인 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( "
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에서는 글쓰기를 해봅시다.. 휘리릭~
댓글 50
-
홍다니
2001.01.11 16:44
$str = str_replace( """, """,$str ); 에서 에러가 나는데요? -
홍다니
2001.01.11 16:45
// 숫자와 영문자(a에서 z까지 소문자와 대문자) 만 있을경우에 1을 리턴 <-- 이부분 아래 함수가 정의되어 있지 않네요? -
미향이..
2001.01.25 14:34
오늘 첨들어왔는데.. 알려주세여~~ 도대체.. ㅠ.ㅠ 저는 이거에대해서 하나두모릅니다!! 알구시퍼여~ -
무명
2001.02.01 10:34
function isAlNum($str) { -
무명
2001.02.01 10:34
if(eregi("[^0-9a-zA-Z]",$str)) return 0; -
무명
2001.02.01 10:35
return 1; } -
무명
2001.02.01 10:35
정의가 안됀부분이네요. -
무명
2001.02.01 10:35
그런데 할필요는 없는듯 -_- -
무명
2001.02.01 10:35
소스 자체에 들어가는 부분이 없는것 같네요 -
tagnet
2001.02.14 14:30
이제 분석은 된다 히잇,, 감솨 제로님~ -
cromer
2001.03.26 01:33
뒤에 겹따옴표 빼야...... -
정종원
2001.04.15 14:03
db에서 type설정할때 종류하고 괄호속에 숫자는 어떤의미? -
정종원
2001.04.15 14:03
안치면 디폴트값 쓰지 않나요?안쓰니 만들때 에러가... -
정종원
2001.04.15 14:04
숫자의 의미는 어떤건지 int(3)이면 3자리 int란건가? -
정종원
2001.04.15 14:04
아님 3byte란 건가요? 답변좀 -
뚜기
2001.04.28 13:56
에궁..다머르는것이뉭..ㅡㅡ;; -
이동찬
2001.05.02 06:46
이게 먼말이징..!! -
정동준
2001.05.15 00:30
라인 29에서 종결 테그가 없는것 같은데 어떻게 해야 되엽... -
지니
2001.05.18 16:40
function isBlank ($str) <---이부분은 정의 안해주나요...?? ㅠ.ㅠ 갈춰주셔요.. -
임선경
2001.05.20 16:18
도저히 무슨 말인지... ㅠ.ㅠ 방명록은 만들고 시픈뎁.. -
윤아미
2001.05.23 18:25
무슨말이에요오-_-??? -
이진원
2001.07.04 16:12
아싸榮 -
비공개
2001.07.14 14:45
-.-??? 무신 말인지 제대루 몰게따욤... -
박용현
2001.07.20 11:36
뭔소리랴?-_-? -
권민정
2001.07.25 21:44
뭘로 만드는 거져?? 문말???인지??? -
권민정
2001.07.25 21:45
ㅜ.ㅜ 머리의 한계..... -
주명식
2001.07.27 16:46
function avoid_crack($str) 에서 return $str 해줘야 하는 데 글이 깨져있네요. 엄~~청 삽질할뻔 하다가.. 구제 된 녀석이. ^^; -
은정이~~^^
2001.07.28 13:17
무슨말아야? -
박태휘
2001.07.28 16:55
22 $str = str_replace( """, """,$str ); -
공현태
2001.07.30 21:32
소스해석이 잘안되는데여.. lib.php3의 완전한 소스좀 올려주세요 -
신정훈
2001.08.22 17:15
--^ 전 이거 짜증나서 못하게떤뎀... -
이장미
2001.10.11 12:13
$str = str_replace( ">", ">",$str );
--> $str = str_replace( ">", "& gt;",$str ); -
지영님-★
2001.12.07 16:24
무슨말인지 하나도 모르겠다..ㅠㅡㅠ -
김동석
2002.01.27 13:08
kk -
고세미
2002.02.04 22:16
복잡다 ~~~~~~~~~~~~~~` -
Trustyle!
2002.02.06 18:17
-
달파란
2002.03.09 09:29
흠 -
밍이
2002.03.12 09:49
대충 이해 됐어요^_^*
초..초보지만 이해부터 하고... -
김영삼
2002.03.26 15:19
good 입니다...... -
K.샘
2003.02.04 18:40
커뮤니티를 만드는데 지옥을왜못가냐 .. -
윤은희
2003.05.16 14:48
Parse error: parse error, unexpected T_VARIABLE in c:apm_setupuserstestlib.php3 on line 11
계속 뜨는뎅...어쩌져??^^;;;;; -
조원석
2003.07.19 12:14
.............................................................................................................................................................................................................................................................................................................. -
조원석
2003.07.19 12:17
컥 위에 죄송합니다...;;;;
테스트 해본다고 했는데..아예 삭제 창이 안보이네요..ㅠㅠ -
미츠키
2003.12.04 04:41
'-'; 복잡하네; 그냥 소스만알려주시지 -
QQQ
2004.02.25 14:48
또있습니다. lib.php3에서 잘못된것을 제가 수정해드립니다. lib.php3입니다.
17 // HTML Tag를 제거하는 함수
18 function del_html ($str)
19 {
20 $str = str_replace(">", "& gt;",$str);
21 $str = str_replace("<", "& lt;",$str);
22 $str = str_replace("", "",$str);
23 return $str;
24 } -
QQQ
2004.02.25 14:46
오타가있고, 틀린것이 있군요. 수정합니다. ㅋㅋ lib.php3 입니다.
6 // 메세지 출력 함수입니다.
7 function message ($message)
8 {
9 echo "
10 <script language='javascript'>
11 window.alert ('$message');
12 history.go(-1);
13
14 "; exit;
15 } -
QQQ
2004.02.25 14:51
lib.php3의 29 $str = str_replace( " 30 $str = str_replace( " 31 $str = str_replace( " 32 $str = str_replace( " 33 $str = str_replace( " 34 return $str; 이 문제군요... -
QQQ
2004.02.25 15:11
그리고 DB Table을 만들때 잘못된것이있습니다. 수정해 드립니다.
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)
)";
이것을 아래처럼 해주십시오.
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)
); -
QQQ
2004.02.25 15:28
그리고
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 }
위에있는 것을 아랫처럼 고쳐주세요.
// 각종 HTML 태그를 이용한 테러방지
function avoid_crack($str)
{
$str = str_replace( "<script", "& lt;script",$str );
$str = str_replace( "<xmp", "& lt;xmp;",$str );
$str = str_replace( "<pre", "& lt;pre",$str );
$str = str_replace( "</table", "& lt;/table",$str );
$str = str_replace( "<meta", "& lt;meta",$str );
$str = str_replace( "<plaintext", "& lt;plaintext",$str );
return $str;
} -
하라주크
2007.07.30 17:34
하악하악 >_< 클리어완료~~~~~~~~~~
제로님감사합니다아 >ㅅ<!!
제목 | 글쓴이 | 날짜 |
---|---|---|
회원관리 프로그램을 구현하고 싶은신 분들께.. [7] | [폐]허접-_- | 2002.03.18 |
PHP 인증 페이지를 만들자! - Lesson 2 수정본 #1 [5] | ☺[폐]허접-_- | 2002.01.24 |
PHP 인증 페이지를 만들자! - Lesson 1 수정본 #2 | ☺[폐]허접-_- | 2002.01.24 |
노프레임/카운터에 관련된 PHP함수 팁 몇가지 [1] | 차카게살자 | 2001.12.28 |
MySQL 루트비번 분실시 대처요령 [29] | zero | 2001.04.18 |
교육용 방명록 #8 [delete.php3파일에서 넘겨받은 비밀번호를 검사하여 글을 삭제합니다.] [18] | zero | 2000.07.03 |
교육용 방명록 #7 [삭제 버튼을 눌렀을 때 비밀번호를 입력받는 부분입니다.] [5] | zero | 2000.07.03 |
교육용 방명록 #6 [수정된 값을 넘겨받아서 비밀번호를 비교하고 변경하여 줍니다.] [2] | zero | 2000.07.03 |
교육용 방명록 #3 [글쓰기 폼에서 넘어온 값을 DB에 입력하기] [5] | zero | 2000.07.03 |
교육용 방명록 #2 [글쓰기 폼 작성] [11] | zero | 2000.07.03 |
교육용 방명록 #1 [전체구성 설정, 테이블 생성, 기본함수 정의] [50] | zero | 2000.07.03 |
최근 게시물을 나타내는 원리와 방법 [55] | zero | 2000.03.06 |
교육용 메모장 #5 [21] | zero | 2000.07.10 |
교육용 메모장 #4 [18] | zero | 2000.07.10 |
교육용 메모장 #3 [16] | zero | 2000.07.10 |
교육용 메모장 #2 [18] | zero | 2000.07.10 |
교육용 메모장 #1 [53] | zero | 2000.07.10 |
윈2000, NT 또는 98에서 APM설치하기 [74] | zero | 2000.08.26 |
MySQL DB 데이타 백업/복구 하는 방법 [38] | zero | 2000.08.26 |
자동링크 만드는 방법!!! [28] | zero | 2000.03.06 |